187|0

13

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

AG32 下使用 freeRTOS 的参考 [复制链接]

本帖最后由 HIZYUAN 于 2024-9-20 18:23 编辑

AG32 下使用 freeRTOS 的参考

 

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

 

 

更多使用技巧可在www.agm-micro.comhizyuan.com上查看

AG32下使用freeRTOS的参考. ...

AG32下使用freeRTOS的参考.pdf

312.91 KB, 下载次数: 0

此帖出自信息发布论坛
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表