霍尔果斯网站建设网络科技有限公司网站
2026/6/1 5:38:54 网站建设 项目流程
霍尔果斯网站建设,网络科技有限公司网站,郑州网站建设公,非法期货做网站关注、星标公众号#xff0c;直达精彩内容素材来源#xff1a;技术让梦想更伟大作者#xff1a;李肖遥FreeRTOS 是一个可裁剪、可剥夺型的多任务内核#xff0c;而且没有任务数限制#xff0c;在此之前分析过很多了。这个东西还是很强大的也很实用#xff0c;参考精选汇总…关注、星标公众号直达精彩内容素材来源技术让梦想更伟大作者李肖遥FreeRTOS 是一个可裁剪、可剥夺型的多任务内核而且没有任务数限制在此之前分析过很多了。这个东西还是很强大的也很实用参考精选汇总 | freertos从基础到高级篇系列FreeRTOS 提供了实时操作系统所需的所有功能包括资源管理、同步、任务通信等本篇主要说一下任务通信我们选用接口是CMSIS_V2之前也讲到过stm32CubeIDE中CMSIS_V1和CMSIS_V2选项的区别。来看看怎么操作首先创建两个任务然后再创建2个事件拉下来也可以配置以下信息在此我们默认配置就可以了Semaphore Name信号量名称Count计数信号量的最大值Allocation分配方式Dynamic 动态内存创建Conrol Block Name控制块名称生成代码之后任务和事件代码如下/* Definitions for myTask01 */ osThreadId_t myTask01Handle; const osThreadAttr_t myTask01_attributes { .name myTask01, .stack_size 128 * 4, .priority (osPriority_t) osPriorityLow, }; /* Definitions for myTask02 */ osThreadId_t myTask02Handle; const osThreadAttr_t myTask02_attributes { .name myTask02, .stack_size 128 * 4, .priority (osPriority_t) osPriorityLow, }; /* Definitions for myEvent01 */ osEventFlagsId_t myEvent01Handle; const osEventFlagsAttr_t myEvent01_attributes { .name myEvent01 }; /* Definitions for myEvent02 */ osEventFlagsId_t myEvent02Handle; const osEventFlagsAttr_t myEvent02_attributes { .name myEvent02 };这个是创建任务的句柄/* creation of myTask01 */ myTask01Handle osThreadNew(StartTask01, NULL, myTask01_attributes); /* creation of myTask02 */ myTask02Handle osThreadNew(StartTask02, NULL, myTask02_attributes);我们改写代码实现task2往task发送信号实现简单的任务通信。/* USER CODE END Header_StartTask01 */ void StartTask01(void *argument) { /* USER CODE BEGIN StartTask01 */ /* Infinite loop */ osStatus_t os_Status; while(1) { os_Status osEventFlagsWait(myTask02Handle, /* 事件标志组ID */ COMM2_EVENT, /* 等待事件标志位0与事件标志位1 */ osFlagsWaitAny, /* 逻辑或 */ osWaitForever /* 一直等待 */ ); if(os_Status COMM1_EVENT) { printf(startTask02 is running.\r\n); } } /* USER CODE END StartTask01 */ } /* USER CODE BEGIN Header_StartTask02 */osEventFlagsWait函数的具体实现以及定义如下osEventFlagsSet就是往某个任务的句柄发送一个信号实现如下/* USER CODE END Header_StartTask02 */ void StartTask02(void *argument) { /* USER CODE BEGIN StartTask02 */ /* Infinite loop */ for(;;) { osEventFlagsSet(myEvent01Handle, COMM1_EVENT); osDelay(1); } /* USER CODE END StartTask02 */ }至此基本结构就完成了后续就根据实际需要来实现任务要做的事情可以创建多个使用任务间通信来进行传递。 ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ 关注我的微信公众号回复“加群”按规则加入技术交流群。点击“阅读原文”查看更多分享欢迎点分享、收藏、点赞、在看。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询