当前位置: 首页 > news >正文

RTOS学习笔记,二、多任务管理

用RTOS在一块板子上同时实现LED灯控制,OLED显示,LCD闪烁任务。

在MX_FREERTOS_Init函数中创建多个任务,这里还是使用创建任务函数,分为动态和静态

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, // 函数指针, 任务函数 const char * const pcName, // 任务的名字 const configSTACK_DEPTH_TYPE usStackDepth, // 栈大小,单位为word,10表示40字节 void * const pvParameters, // 调用任务函数时传入的参数 UBaseType_t uxPriority, // 优先级 TaskHandle_t * const pxCreatedTask ); // 任务句柄, 以后使用它来操作这个任务
TaskHandle_t xTaskCreateStatic ( TaskFunction_t pxTaskCode, // 函数指针, 任务函数 const char * const pcName, // 任务的名字 const uint32_t ulStackDepth, // 栈大小,单位为word,10表示40字节 void * const pvParameters, // 调用任务函数时传入的参数 UBaseType_t uxPriority, // 优先级 StackType_t * const puxStackBuffer, // 静态分配的栈,就是一个buffer StaticTask_t * const pxTaskBuffer // 静态分配的任务结构体的指针,用它来操作这个任务 );

/* 创建任务: 影 */

这里用的是默认任务

defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); void StartDefaultTask(void *argument) { /* USER CODE BEGIN StartDefaultTask */ /* Infinite loop */ LCD_Init(); LCD_Clear(); for(;;) { IRReceiver_Test();/*影*/ } /* USER CODE END StartDefaultTask */ }

/* 创建任务: 光 */

static StackType_t g_pucStackOfLightTask[128]; static StaticTask_t g_TCBOfLightTask; static TaskHandle_t xLightTaskHandle; xLightTaskHandle = xTaskCreateStatic(Led_Test, "LightTask", 128, NULL, osPriorityNormal, g_pucStackOfLightTask, &g_TCBOfLightTask);

/* 创建任务: 色 */

static StackType_t g_pucStackOfColorTask[128]; static StaticTask_t g_TCBOfColorTask; static TaskHandle_t xColorTaskHandle; xColorTaskHandle = xTaskCreateStatic(ColorLED_Test, "ColorTask", 128, NULL, osPriorityNormal, g_pucStackOfColorTask, &g_TCBOfColorTask);

这里使用了静态任务创建,需要说明栈的大小,那栈的大小如何确定呢。

考虑三个因素:

1.返回地址LR和其他寄存器会存在栈中,所以要看函数调用深度

2.局部变量大小

3.现场

这里每个函数都直接用了128*4个字节。肯定够但没必要那么大

http://www.jsqmd.com/news/926175/

相关文章:

  • 【案例分享】我从失败中学到的架构教训
  • 值得学习的嵌入式开发材料
  • 2026年当下河北地区镶铜铸铁闸门采购指南:实力厂家深度解析 - 2026年企业资讯
  • 2026年当前秦皇岛婚礼酒店哪个好?深度解析秦皇岛万怡酒店婚宴实力 - 2026年企业资讯
  • 助睿实验平台-浏览器用户行为分析与流失预测-数据加工
  • 2026年q2四川无机涂料外墙厂家排行及选型推荐:无机涂料多少钱一平方/无机涂料工程专用/实力盘点 - 优质品牌商家
  • Spark中Hbase的伪分布式模式配置
  • 2026年Q2长春K金回收选择推荐:避坑实操要点 - 优质品牌商家
  • 别再只调OpenCV参数了!从AD、Census到SGM,手把手教你用Python实现双目立体匹配核心算法
  • linux 6 定时任务指令
  • 【极域脱机指南】脱离机房老师控制--教程
  • 今日开源[第2期]Project N.O.M.A.D. - zhang
  • 2026年苏州本地专业防水补漏领域五家合规经营企业深度梳理与场景适配分析 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 山东大学软件学院创新实训——个人博客(七)
  • 2026年苏州3家资质齐全防水补漏服务商核心市场适配与专业能力分析报告 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 逐位二进制拼接 → 翻转 → 去头零 → 消邻重
  • 汽车行业:从4S店到充电桩,电子合同正在重构汽车服务签约体验
  • AE510 Smart Kit:边缘 AI 视觉套件,让传统售货机迈入智能结算时代
  • 别再傻傻分不清了!用OpenCV+Python实战搞懂单应矩阵、本质矩阵和基础矩阵
  • OpCore Simplify:终极黑苹果配置工具,3步完成复杂EFI配置
  • 用Python和R实战检验皮尔逊相关性五大假设(附完整代码与可视化)
  • 2026年南京五粮液回收服务商评测:四家机构实力对比 - 优质品牌商家
  • 云主机(华为)改密码的流水账
  • K-means实战避坑指南:如何用肘部法则和轮廓系数找到最佳K值(附Python代码)
  • 接收端电路
  • yolov26改进 | 添加注意力机制篇 | 添加DAttention (DAT)注意力机制二次创新C2PSA(附独家网络结构图)
  • 基于PLC两电梯协同运力控制系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)_文章底部可以扫码
  • 容器之间ros2可发现topic没有数据
  • 3分钟完成GTNH中文汉化:新手完整安装指南
  • 小学期第三周