AG32 下使用freeRTOS 的参考 4 min read AG32其他文档 在SDK 下已经有移植好的FreeRTOS Kernel V10.4.6 版本,可供用户使用。源码位于:\AgRV_pio\packages\framework-agrv_freertos\用户使用时,不必关注该源码,只需关注API 使用即可。 一、简单验证: 使用时,从VSCODE 中直接打开工程:\AgRV_pio\platforms\AgRV\examples\freeRTOS打开工程后,可以先验证简单的运行情况。这个工程中,并没有ve 文件(而是使用了默认的ve 文件)。便于后续开发,可以先建立一份ve。步骤:1. 从example 路径下copy 一份example_board.ve 过来;2. 打开该example_board.ve,删除掉里边除clk 和led 灯以外的其他引脚配置;3. 在platformio.ini 中添加对该ve 的引用:board_logic.ve = example_board.ve接下来,编译ve 并烧录,然后编译code 并烧录。两项都烧录成功后,就可以看到led 灯的闪烁了。 二、使用样例: 打开main.c,可以看到在main 函数中使用了几种元素:xQueue、xSemaphore、xTask、xTimer。同时在main.c 中对接的hook 回调中,会配合使用这些元素。这里注意,如果要精简样例,比如只跑一个task 时,删除其他元素时,要同时把hook 里对应的调用也删除。main() 函数中,可精简到调用3 个函数:int main(void){prvSetupHardware();xTaskCreate(led_task,“led_task”,configMINIMAL_STACK_SIZE,NULL,mainEVENT_SEMAPHORE_TASK_PRIORITY,&xGPTimerTask);vTaskStartScheduler();for(;;);}其中,prvSetupHardware()函数中有init 函数是必须的: 在led_task 中可写闪灯代码如下: 另外,由于不再使用xEventSemaphore,也需要在vApplicationTickHook 中去除对xSemaphore的操作: 可尝试编译运行,查看效果。除了以上简化过程,还有用户会使用到freeRTOS 的静态方法。如果使用静态方法,即打开了宏:configSUPPORT_STATIC_ALLOCATION,需要新增两个hook函数,可参考:https://blog.csdn.net/m0_46451722/article/details/113053257 中的描述。使用如: 编译通过后,可在函数中使用static 那组函数。用法和动态那组函数相似,注意参数使用静态分配好的即可。 三、使用自建工程: 如果用户希望在自建工程中使用freeRTOS,该如何把它添加进来?比如,在example 下要把freeRTOS 加进来。步骤:1. 在platformio.ini 中增加对freertos 的引用: 注意,多个库之间用“逗号+空格”来隔开。2. 确认ve 文件里的配置正常(时钟+led 引脚);3. 在example.c 中引入freertos 的头文件及用到的宏定义: 4. 在example.c 中新增几个函数: 5. 在main.c 中init 后直接启动freeRTOS: 然后,编译ve 并烧录,再编译code 并烧录,就可以看到led 的闪烁了。 PREVIOUS ← AG32下的分散加载 NEXT STEP AG32 下使用Segger RTT →