当前位置: 首页 > 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.zskr.cn/news/1437504.html

相关文章:

  • Spark中Hbase的伪分布式模式配置
  • 2026年Q2长春K金回收选择推荐:避坑实操要点 - 优质品牌商家
  • 别再只调OpenCV参数了!从AD、Census到SGM,手把手教你用Python实现双目立体匹配核心算法
  • 今日开源[第2期]Project N.O.M.A.D. - zhang
  • 汽车行业:从4S店到充电桩,电子合同正在重构汽车服务签约体验
  • OpCore Simplify:终极黑苹果配置工具,3步完成复杂EFI配置
  • 第一篇:uniapp+Django 互动功能全流程(登录缓存→点赞 / 收藏 / 评论列表显示)
  • 3分钟完成GTNH中文汉化:新手完整安装指南
  • 容器之间ros2可发现topic没有数据
  • 小学期第三周
  • 云成本治理框架:优化云计算成本
  • 避坑指南:高通SA8255P平台Nor Flash烧录全流程与‘先擦后写’的血泪教训
  • Masa Mods中文汉化包:为你的Minecraft 1.21模组体验注入母语力量!
  • 2026年苏州本地防水补漏行业三家合规经营服务机构信息梳理分析 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 2026年5月新消息:寻找行业内比较好的铠装通信电缆品牌,这几家值得关注 - 2026年企业资讯
  • 仅限头部客户启用的Gemini深度监测模块(含暗网论坛追踪+小红书种草溯源)
  • 源站 IP 暴露被直接打穿?这套 AWS 纵深防御方案你一定用得上
  • 达梦 DMHS/DRS 数据同步技术解析
  • 2026产品专员职场提升能力的有效途径
  • 2026年6月浙江专业奶茶瓶生产厂商盘点:为何畅维包装备受品牌青睐? - 2026年企业资讯
  • 零起点Python机器学习快速入门【1.4】
  • 2026产品运营如何提升职场素养打造专业形象
  • 阜阳名酒回收服务评测:青春煮酒与同行横向对比 - 优质品牌商家
  • DSP28035双电压供电电路设计
  • WarcraftHelper:3步解锁魔兽争霸III现代游戏体验的技术指南
  • Linux上使用QEMU安装Android-x86虚拟机(转)
  • JAVA:字符串反转
  • 高并发系统设计:应对海量请求的技术实践
  • Gemini推送通知优化终极手册(2024Q2最新API v1.5实测数据+AB测试报告)
  • 纯视觉无感全域赋能 跨镜无缝接力重塑精细化安防能力技术解析方案