FreeRTOS是一个高度可定制和可剥夺的多任务内核,具有无任务数量限制的特点。它允许用户创建多个独立的任务,这些任务之间互不干扰。为了实现这一点,每个任务都需要分配独立的堆栈空间。在任务切换时,执行环境会被保存到任务的堆栈中,这样当任务再次被调度执行时,它能够准确地恢复到上次执行时的状态。
此前已经整理了一些教程,可以参考精选汇总 | freertos从基础到高级篇系列。
FreeRTOS提供了实时操作系统所需的各种功能,包括资源管理、同步和任务通信等。在任务创建后,它们并不是同时运行的,而是根据优先级顺序来进行调度执行。
在软件开发中,有很多可以直接使用的工具。ARM Cortex微控制器软件接口标准是CMSIS,它是一个与供应商无关的硬件抽象层。CMSIS-RTOS是实时操作系统的通用API,其目的是通过将FreeRTOS、Rtthread等操作系统再次封装,形成通用的API函数,从而使移植更加方便。我们选择了CMSIS_V2接口,关于这个选择,之前也有过相关讨论,可以参考stm32CubeIDE中CMSIS_V1和CMSIS_V2选项的区别。
首先创建两个任务myTask01和myTask02,如下图所示:
创建2个事件myEvent01,myEvent02,如下图所示:
拉下来也可以配置以下信息,在此我们默认配置计数信号量、分配方式、控制块名称等配置信息。
生成代码之后任务和事件如下代码:
/* Definitions for myTask01 */
osThreadId_t myTask01Handle;
const osThreadAttr_t myTask01_attributes = {
.name = "myTask01",
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityLow,
};
...
/* 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 */
}
最后就可以实现多个任务间的通信了。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !