线程的创建,挂起,恢复

关于几个状态的解释
关于

线程的创建

RTOS2的源码
//  ==== Public API ====

/// Create a thread and add it to Active Threads.
osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr) {
  osThreadId_t thread_id;

  EvrRtxThreadNew(func, argument, attr);
  if (IsIrqMode() || IsIrqMasked()) {
    EvrRtxThreadError(NULL, (int32_t)osErrorISR);
    thread_id = NULL;
  } else {
    thread_id = __svcThreadNew(func, argument, attr);
  }
  return thread_id;
} 

在这里插入图片描述返回值是线程句柄。
三个属性分别是
func线程函数
参数指针,作为开始参数传递给线程函数
attr线程属性;NULL:默认值

Note的地方需要特别注意,比如这两个API都不能被中断回调函数调用(比如TIM溢出中断,接收中断等)

线程的挂起和恢复在这里插入图片描述
在这里插入图片描述

void thread_User_App(void *argment)
{
	uint8_t ucKeyCode;		/* 按键代码 */
	osStatus_t status;
	
	while(1)
	{ 
		bsp_RunPer10ms();	/* 每隔10ms调用一次此函数 */
	  ucKeyCode = bsp_GetKey();	/* 读取键值, 无键按下时返回 KEY_NONE = 0 */
		if (ucKeyCode != KEY_NONE)
		{
			switch (ucKeyCode)
			{
				case KEY_DOWN_K1:			/* K1键按下 */
					printf("K1 按下 \r\n");
					break;

				case KEY_UP_K1:				/* K1键弹起 */
					printf("K1 弹起\r\n");
					status = osThreadSuspend(threadID_LED);    //挂起线程
					if(osOK == status)
					{
						printf("threadID_LED  Suspend Ok !\r\n");
					}
					else
					{
						printf("threadID_LED  Suspend ERROR !\r\n");
					}
					break;

				case KEY_DOWN_K2:			/* K2键按下 */
					printf("K2键按下\r\n");
					break;

				case KEY_UP_K2:				/* K2键弹起 */
					printf("K2键弹起\r\n");
					break;
				case KEY_DOWN_K3:			/* K3键按下 */
					printf("K3键按下\r\n");
					break;
				case KEY_UP_K3:			/* K3键按下 */
					printf("K3键弹起\r\n");
				    status = osThreadResume(threadID_LED);
					if(osOK == status)
					{
						printf("(threadID_LED  Resume Ok !\r\n");  //恢复线程
					}
					else
					{
						printf("(threadID_LED  Resume ERROR !\r\n");
						
					}
					break;
				default:
					/* 其它的键值不处理 */
					break;
			}
		}
		
		 osDelay(10);
		
	}
}

void thread_LED_App(void *argment)
{

	while(1)
	{
		HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
		printf("threadID_LED  is  Running !\r\n");
		osDelay(500);

	}
}

在这里插入图片描述
根据打印结果,按键K1和K3分别实现了对LED线程的挂起和恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值