程序进行初始化,到osKernelStart()函数后便会停留在该函数中,随即程序开始在不同的task中开始轮转。程序不会进入到HAL_GPIO_ToglePin(GPIOB,GPIO_PIN_1);

在freertos.c文件中,创建task有两种方式,分别是xTaskCreate与***taskHandle = osThreadNew的形式,前者为FreeRTOS的原生创建task的方式,参数为xTaskCreate(任务函数, 任务名, 栈大小(字), 任务入参, 优先级, 任务句柄)任务函数需要与实际任务相同实现跳转;任务名主要用于调试时方便查看,并无代码运行时的作用;栈大小与任务的复杂程度相关,任务中的函数较复杂时应增加栈的大小,防止栈溢出;任务入参用于传输任务函数中所需的参数;优先级用于配置不同任务之间的执行优先程度,若两个任务的优先级相同,则FreeRTOS将会以时间片调度的方式执行两个任务,即内部调度器先给defaulttask分配1ms,1ms结束后挂起,再给mytask分配1ms,循环执行。(分配的时间与FreeRTOS的rate_hz设置有关,我在这里设置的1000,因此就是1ms,若设置100,则分配的时间就是10ms);句柄主要用于对该task执行其他操作,如挂起、恢复、删除、改优先级等。

若使用第二种方式创建task,第二种方式源自于cmsis_os2,是已经被封装好了的函数,只需调用即可,需要以下代码

该代码用于创建task句柄,配置task的属性。同时也需要任务函数:

可以达到与第一种方式同样的效果,注意任务的创建均在MX_FREERTOS_Init(void)函数中实现。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐