我是靠谱客的博主 大意手套,最近开发中收集的这篇文章主要介绍STM32CubeMx(STM32F4 +FreeRTOS+CMSIS-RTOS)之线程(thread)创建,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.CMISIS-RTOS中thread相关API概览

   

模块宏定义描述
线程定义osThreadDef定义一个线程
osThread访问一个线程定义

 

模块API描述

线程管理:

定义,创建和控制线程

osThreadCreate开始执行一个线程
osThreadTerminate停止线程的运行
osThreadYield运行处于就绪态的线程
osThreadGetId获取线程的ID
osThreadSetPriority改变线程运行的优先级
osThreadGetPriority获取线程的优先级

 

优先级(priority)相关枚举:

typedef enum
{
osPriorityIdle
= -3,
///< priority: idle (lowest)
osPriorityLow
= -2,
///< priority: low
osPriorityBelowNormal
= -1,
///< priority: below normal
osPriorityNormal
=
0,
///< priority: normal (default)
osPriorityAboveNormal
= +1,
///< priority: above normal
osPriorityHigh
= +2,
///< priority: high
osPriorityRealtime
= +3,
///< priority: realtime (highest)
osPriorityError
=
0x84
///< system cannot determine priority or thread has illegal priority
} osPriority;

 

二.线程创建并执行

在STM32CubMx下,已经自动生成了一个线程,可以看看其定义

                    

MX_FREERTOS_Init()在freertos.c的文件中,

osThreadDef参数含义: 

//#define osThreadDef	(名字(该线程的名字),线程函数名,优先级,该线程可以实例化的个数,线程的栈大小 )

 


void MX_FREERTOS_Init(void) {
/* Create the thread(s) */
/* definition and creation of deviceTask*/
osThreadDef(deviceTask, StartDefaultTask, osPriorityNormal, 0, STACKSIZE);
defaultTaskHandle = osThreadCreate(osThread(deviceTask), NULL);
}
//线程函数
void StartDefaultTask(void const * argument)
{
/* USER CODE BEGIN StartDeviceTask */
/* Infinite loop */
for(;;)
{
}
/* USER CODE END StartDeviceTask */
}

          现在就可以在无限循环中,添加自己的应用了         

 

三.LED闪烁 

创建一个LED线程(修改默认的线程)


osThreadDef(ledThreadHandler, ledThread, osPriorityNormal, 0, STACKSIZE);
this->led_thread = osThreadCreate(osThread(ledThreadHandler), NULL);

在LED线程中

void startLedTask(void const * argument)
{
led_t led0 , led1;
led0 = led_get_instance(LED_ID0);
led1 = led_get_instance(LED_ID1);
for(;;)
{
led_on(led0);
led_off(led1);
osDelay(1000);
led_off(led0);
led_on(led1);
osDelay(1000);
}
}

 这样LED闪烁应用就完成了(代码已上传)

ref:

file:///D:/Keil_v5/ARM/PACK/ARM/CMSIS/4.2.0/CMSIS/Documentation/RTOS/html/group___c_m_s_i_s___r_t_o_s___thread_mgmt.html#ga7f2b42f1983b9107775ec2a1c69a849a

 

最后

以上就是大意手套为你收集整理的STM32CubeMx(STM32F4 +FreeRTOS+CMSIS-RTOS)之线程(thread)创建的全部内容,希望文章能够帮你解决STM32CubeMx(STM32F4 +FreeRTOS+CMSIS-RTOS)之线程(thread)创建所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部