//恢复线程函数
rt_thread_resume(LED_Thread);
//挂起任务函数
uwRet = rt_thread_suspend(LED_Thread);
工程代码百度网盘链接网址在:RT-Thread物联网操作系统介绍
#include "MyIncludes.h"
static rt_thread_t LED_Thread = RT_NULL;
/*******************************************************************************
* Function Name : LED_Thread_Process
* Description : LED线程函数
* Input : None
* Output : None
* Return : None
* Note : None
*******************************************************************************/
static void LED_Thread_Process(void* parameter)
{
while (1)
{
LED_Toggle(LED_R); //翻转LED
rt_thread_delay(200); /* 延时1000个tick,即1秒 */
}
}
static rt_thread_t KEY_Thread = RT_NULL;
/*******************************************************************************
* Function Name : KEY_Thread_Process
* Description : 按键线程函数
* Input : None
* Output : None
* Return : None
* Note : None
*******************************************************************************/
static void KEY_Thread_Process(void* parameter)
{
rt_err_t uwRet = RT_EOK;
while (1)
{
Key_Read(); //扫描按键
if(Key_Info.Num_Last != Key_Info.Num) //按键值发生变化
{
Key_Info.Num_Last = Key_Info.Num;
if(Key_Info.Num != 0)
{
switch(Key_Info.Num)
{
case KEY_ONE:
rt_kprintf("挂起LED线程!\n");
//先恢复一下,再挂起,因为led线程中有delay进行调度,可能正处在挂起状态,导致不能挂起
rt_thread_resume(LED_Thread); //先恢复一下
uwRet = rt_thread_suspend(LED_Thread);/* 挂起LED线程 */
if(RT_EOK == uwRet)
{
rt_kprintf("挂起LED线程成功!\n");
}
else//挂起失败
{
if(RT_THREAD_SUSPEND == uwRet)
{
rt_kprintf("LED线程已经挂起\n");
}
else
rt_kprintf("挂起LED线程失败!失败代码:0x%lx\n",uwRet);
}
break;
case KEY_TWO:
rt_kprintf("恢复LED线程!\n");
uwRet = rt_thread_resume(LED_Thread);/* 恢复LED线程! */
if(RT_EOK == uwRet)
{
rt_kprintf("恢复LED线程成功!\n");
}
else
{
rt_kprintf("恢复LED线程失败!失败代码:0x%lx\n",uwRet);
}
break;
default: break;
}
}
}
rt_thread_delay(10); /* 延时10毫秒 */
}
}
int main(void)
{
//LED线程
LED_Thread = /* 线程控制块指针 */
rt_thread_create("LED", /* 线程名字 */
LED_Thread_Process, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
15, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (LED_Thread != RT_NULL)
rt_thread_startup(LED_Thread);
else
return -1;
//按键线程
KEY_Thread = /* 线程控制块指针 */
rt_thread_create("KEY", /* 线程名字 */
KEY_Thread_Process, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
12, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (KEY_Thread != RT_NULL)
rt_thread_startup(KEY_Thread);
else
return -1;
}