一、使用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。

步骤:

  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灯的闪烁了。

2. 使用样例:

打开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那组函数。

用法和动态那组函数相似,注意参数使用静态分配好的即可。

3. 使用自建工程:

如果用户希望在自建工程中使用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的闪烁了。

    .

    二、使用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。

    步骤:

    1. 从example路径下copy一份 example_board.ve 过来,重命名为uCOS_board.ve;
    2. 打开该uCOS_board.ve,删除掉里边除clk和led灯以外的其他引脚配置;
    3. 在platformio.ini中添加对该ve的引用:board_logic.ve = uCOS_board.ve

    接下来,编译ve并烧录,然后编译code并烧录。

    两项都烧录成功后,就可以看到led灯的闪烁了。

    2. 使用样例:

    打开main.c,可以看到例程中展示了几种元素的使用方法:Semaphore、Queue、Task、Timer。

    这里简化样例时,比如只保留一个Task:AppTaskTimer,则注掉其他task的创建即可。

    uC/OS的样例较为简单,自行尝试即可。

    3. 使用自建工程:

    如果用户希望在自建工程中使用uC/OS,该如何把它添加进来?

    比如,在example下要把uC/OS加进来。步骤:

    1. 在platformio.ini中增加对uC/OS的引用:

      注意,多个库之间用“逗号+空格”来隔开。

      2. 确认ve文件里的配置正常(时钟+led引脚);

      3. 将用到的几个头文件从uCOS工程下copy过来;

      4. 在example.c中引入freertos的头文件及用到的宏定义:

      5. 在example.c中新增几个函数(从uCOS的例程中简化过来的):

      6. 在main.c中保留uCOS的启动即可:

      然后,编译ve并烧录,再编译code并烧录,就可以看到led的闪烁了。

      .

      三、其他系统

      其他系统不再举例。

      参考上边的两个,自行建立对应的系统即可。

      .