[应用相关] RTOS-主任务及开始函数

[复制链接]
 楼主| 中国龙芯CDX 发表于 2025-3-28 20:47 | 显示全部楼层 |阅读模式
本帖最后由 中国龙芯CDX 于 2025-3-28 20:49 编辑

main函数


  1. int main()
  2. {
  3.         //在前面这里放所使用模块的初始化,将所有用到的外设驱动起来
  4.         //下面就是开始任务函数的定义
  5.         StartTask_Handler=xTaskCreateStatic((TaskFunction_t        )start_task,
  6.                                                                                                         //任务函数               
  7.                                                                                 (const char*         )"start_task",
  8.                                                                                                         //任务名称               
  9.                                                                                 (uint32_t                 )START_STK_SIZE,       
  10.                                                                                                         //任务堆栈大小
  11.                                                                                 (void*                           )NULL,               
  12.                                                                                                         //传递给任务函数的参数               
  13.                                                                                 (UBaseType_t         )START_TASK_PRIO,
  14.                                                                                                         //任务优先级       
  15.                                                                                 (StackType_t*   )StartTaskStack,       
  16.                                                                                                         //任务堆栈
  17.                                                                                 (StaticTask_t*  )&StartTaskTCB);                
  18.                                                                                                         //任务控制块
  19.     vTaskStartScheduler();//开启任务调度
  20. }
复制代码

83fc47ed7d619cddfda16bccba12a5ad.png
 楼主| 中国龙芯CDX 发表于 2025-3-28 20:50 | 显示全部楼层
开始任务函数
在FreeRtos进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断
一般我们都会使用这个临界区,进入和退出是配套使用的,我们在使用的时候要尽量保持临时段耗时短
  1. //开始任务函数
  2. void start_task(void *pvParameters)
  3. {
  4.     taskENTER_CRITICAL();         //进入临界区
  5.     //创建task1任务
  6.         Task1Task_Handler=xTaskCreateStatic((TaskFunction_t        )task1_task,               
  7.                                                                                 (const char*         )"task1_task",               
  8.                                                                                 (uint32_t                 )TASK1_STK_SIZE,        
  9.                                                                                 (void*                           )NULL,                                
  10.                                                                                 (UBaseType_t         )TASK1_TASK_PRIO,         
  11.                                                                                 (StackType_t*   )Task1TaskStack,        
  12.                                                                                 (StaticTask_t*  )&Task1TaskTCB);        
  13.     //创建task2任务
  14.         Task2Task_Handler=xTaskCreateStatic((TaskFunction_t        )task2_task,               
  15.                                                                                 (const char*         )"task2_task",               
  16.                                                                                 (uint32_t                 )TASK2_STK_SIZE,        
  17.                                                                                 (void*                           )NULL,                                
  18.                                                                                 (UBaseType_t         )TASK2_TASK_PRIO,         
  19.                                                                                 (StackType_t*   )Task2TaskStack,        
  20.                                                                                 (StaticTask_t*  )&Task2TaskTCB);
  21.                                                                                                                                                         
  22.     vTaskDelete(StartTask_Handler); //删除开始任务
  23.     taskEXIT_CRITICAL();            //退出临界区
  24. }
复制代码
8287367e69af3a4995.png
掌握Rtos下的多任务多优先级的实现方式,掌握FreeRtos的基本用法,打造一个实时性系统
您需要登录后才可以回帖 登录 | 注册

本版积分规则

335

主题

2540

帖子

4

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