模式
AG32下使用OS的参考
关于资源 > AG32下使用OS的参考
一、使用FreeRTOS
在SDK下已经有移植好的FreeRTOS Kernel V10.4.6 版本,可供用户使用。
源码位于:\AgRV_pio\packages\framework-agrv_freertos\
用户使用时,不必关注该源码,只需关注API使用即可。
1. 简单验证
使用时,从VSCode中直接打开工程:\AgRV_pio\platforms\AgRV\examples\freeRTOS
打开工程后,可以先验证简单的运行情况。
这个工程中,并没有ve
文件(而是使用了默认的ve
文件)。
便于后续开发,可以先建立一份ve
。
步骤:
- 从
example
路径下copy一份example_board.ve
过来; - 打开该
example_board.ve
,删除掉里边除clk
和led
灯以外的其他引脚配置; - 在
platformio.ini
中添加对该ve
的引用:iniboard_logic.ve = example_board.ve
- 接下来,编译
ve
并烧录,然后编译code
并烧录。
两项都烧录成功后,就可以看到led
灯的闪烁了。
2. 使用样例
打开main.c
,可以看到在main
函数中使用了几种元素:xQueue
、xSemaphore
、xTask
、xTimer
。
同时在main.c
中对接的hook
回调中,会配合使用这些元素。
注意:如果要精简样例,比如只跑一个task
时,删除其他元素时,要同时把hook
里对应的调用也删除。
main()
函数中,可精简到调用3个函数:
c
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的静态方法
除了以上简化过程,还有用户会使用到FreeRTOS的静态方法。
如果使用静态方法,即打开了宏:configSUPPORT_STATIC_ALLOCATION
,需要新增两个hook
函数,可参考:FreeRTOS静态分配 中的描述。
使用示例

编译通过后,可在函数中使用 static
那组函数。
用法和动态那组函数相似,注意参数使用静态分配好的即可。
3. 使用自建工程
如果用户希望在自建工程中使用FreeRTOS,该如何把它添加进来?
步骤:
在
platformio.ini
中增加对FreeRTOS的引用:inilib_deps = framework-agrv_freertos
注意,多个库之间用“逗号+空格”来隔开。
确认
ve
文件里的配置正常(时钟+led
引脚);在
example.c
中引入FreeRTOS的头文件及用到的宏定义:在
example.c
中新增几个函数:在
main.c
中init
后直接启动FreeRTOS:
然后,编译ve
并烧录,再编译code
并烧录,就可以看到led
的闪烁了。
二、使用uCOS
在SDK下已经有移植好的uC/OS-III V3.08.01 版本,可供用户使用。
源码位于:\AgRV_pio\packages\framework-agrv_ucos\
用户使用时,不必关注该源码,只需关注API使用即可。
1. 简单验证
使用时,从VSCode中直接打开工程:\AgRV_pio\platforms\AgRV\examples\uCOS
打开工程后,可以先验证简单的运行情况。
这个工程中,并没有ve
文件(而是使用了默认的ve
文件)。
便于后续开发,可以先建立一份ve
。
步骤:
- 从
example
路径下copy一份example_board.ve
过来,重命名为uCOS_board.ve
; - 打开该
uCOS_board.ve
,删除掉里边除clk
和led
灯以外的其他引脚配置; - 在
platformio.ini
中添加对该ve
的引用:iniboard_logic.ve = uCOS_board.ve
- 接下来,编译
ve
并烧录,然后编译code
并烧录。
两项都烧录成功后,就可以看到led
灯的闪烁了。
2. 使用样例
打开main.c
,可以看到例程中展示了几种元素的使用方法:Semaphore
、Queue
、Task
、Timer
。
这里简化样例时,比如只保留一个Task
:AppTaskTimer
,则注掉其他task
的创建即可。
uC/OS的样例较为简单,自行尝试即可。
3. 使用自建工程
如果用户希望在自建工程中使用uC/OS,该如何把它添加进来?
步骤:
在
platformio.ini
中增加对uC/OS的引用:注意,多个库之间用“逗号+空格”来隔开。
确认
ve
文件里的配置正常(时钟+led
引脚);将用到的几个头文件从uCOS工程下copy过来;
在
example.c
中引入uC/OS的头文件及用到的宏定义:在
example.c
中新增几个函数(从uCOS的例程中简化过来的):在
main.c
中保留uC/OS的启动即可:
然后,编译ve
并烧录,再编译code
并烧录,就可以看到led
的闪烁了。
三、其他系统
其他系统不再举例。
参考上边的两个,自行建立对应的系统即可。