[STM32F4] STM32CubeMx(STM32F4 +FreeRTOS+CMSIS-RTOS)之线程(thread)创建

[复制链接]
 楼主| 自动化陈稳 发表于 2023-4-18 23:39 | 显示全部楼层 |阅读模式
一.CMISIS-RTOS中thread相关API概览

95232643eb9917ebaa.png

评论

———————————————— 版权声明:本文为CSDN博主「qq_33974167」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_33974167/article/details/102774186  发表于 2023-4-18 23:47
 楼主| 自动化陈稳 发表于 2023-4-18 23:39 | 显示全部楼层
优先级(priority)相关枚举:
  1. typedef enum  {
  2.   osPriorityIdle          = -3,          ///< priority: idle (lowest)
  3.   osPriorityLow           = -2,          ///< priority: low
  4.   osPriorityBelowNormal   = -1,          ///< priority: below normal
  5.   osPriorityNormal        =  0,          ///< priority: normal (default)
  6.   osPriorityAboveNormal   = +1,          ///< priority: above normal
  7.   osPriorityHigh          = +2,          ///< priority: high
  8.   osPriorityRealtime      = +3,          ///< priority: realtime (highest)
  9.   osPriorityError         =  0x84        ///< system cannot determine priority or thread has illegal priority
  10. } osPriority;
 楼主| 自动化陈稳 发表于 2023-4-18 23:39 | 显示全部楼层
二.线程创建并执行

在STM32CubMx下,已经自动生成了一个线程,可以看看其定义
87781643eb9b39a253.png
MX_FREERTOS_Init()在freertos.c的文件中,
 楼主| 自动化陈稳 发表于 2023-4-18 23:46 | 显示全部楼层
osThreadDef参数含义:

//#define osThreadDef        (名字(该线程的名字),线程函数名,优先级,该线程可以实例化的个数,线程的栈大小 )
 楼主| 自动化陈稳 发表于 2023-4-18 23:46 | 显示全部楼层


  1. void MX_FREERTOS_Init(void) {

  2.   /* Create the thread(s) */
  3.   /* definition and creation of deviceTask*/
  4.   osThreadDef(deviceTask, StartDefaultTask, osPriorityNormal, 0, STACKSIZE);
  5.   defaultTaskHandle = osThreadCreate(osThread(deviceTask), NULL);


  6. }
  7. //线程函数
  8. void StartDefaultTask(void const * argument)
  9. {

  10.   /* USER CODE BEGIN StartDeviceTask */
  11.    /* Infinite loop */
  12.   for(;;)
  13. {

  14. }
  15.   /* USER CODE END StartDeviceTask */
  16. }
 楼主| 自动化陈稳 发表于 2023-4-18 23:47 | 显示全部楼层
现在就可以在无限循环中,添加自己的应用了         
 楼主| 自动化陈稳 发表于 2023-4-18 23:47 | 显示全部楼层
三.LED闪烁

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

      osThreadDef(ledThreadHandler, ledThread, osPriorityNormal, 0, STACKSIZE);
      this->led_thread = osThreadCreate(osThread(ledThreadHandler), NULL);
 楼主| 自动化陈稳 发表于 2023-4-18 23:47 | 显示全部楼层
在LED线程中
  1. void startLedTask(void const * argument)
  2. {
  3.     led_t led0 , led1;
  4.     led0 = led_get_instance(LED_ID0);
  5.     led1 = led_get_instance(LED_ID1);
  6.    for(;;)
  7.    {
  8.         led_on(led0);
  9.         led_off(led1);
  10.         osDelay(1000);
  11.         led_off(led0);
  12.         led_on(led1);
  13.         osDelay(1000);      
  14.    }
  15. }
 楼主| 自动化陈稳 发表于 2023-4-18 23:48 | 显示全部楼层
这样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
elsaflower 发表于 2023-5-10 20:08 | 显示全部楼层
freertos任务切换需要多少个时钟周期
yorkbarney 发表于 2023-5-10 20:51 | 显示全部楼层
freertos时实系统的栈最大是多少
lihuami 发表于 2023-5-11 16:40 | 显示全部楼层
使用freertos的时候能不能使用定时器
kmzuaz 发表于 2023-5-11 17:49 | 显示全部楼层
ucos、freertos、RTOS等等都可以
biechedan 发表于 2023-5-11 19:10 | 显示全部楼层
怎么设置freertos的最大任务数
usysm 发表于 2023-5-11 21:31 | 显示全部楼层
freertos如何在一个任务中删除另一个任务
wengh2016 发表于 2023-5-13 10:55 | 显示全部楼层
FreeRTOS堆分配大小对任务数的影响
sesefadou 发表于 2023-5-13 11:36 | 显示全部楼层
用STM32CubeMx创建的FreeRTOS可以运行多少个实例
mikewalpole 发表于 2023-5-13 11:55 | 显示全部楼层
对于stm32嵌入式系统软件,如何选择操作系统
jimmhu 发表于 2023-5-13 12:40 | 显示全部楼层
跑FreeRTOS总是进入HardFault,不知是什么原因
uptown 发表于 2023-5-13 12:49 | 显示全部楼层
为什么要用freertos               
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

1379

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

105

主题

1379

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部