在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 157|回复: 0

[原创] AG32下使用os的参考

[复制链接]
发表于 2025-4-8 10:04:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 SHYG 于 2025-4-8 10:06 编辑

一、使用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的引用: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函数是必须的:

e55c998b4fdf72c524db47f051ca6979.png

                               
登录/注册后可看大图
编辑
在led_task中可写闪灯代码如下:

78feae3aab2ce28ddf7c0cf2c9b29aef.png

                               
登录/注册后可看大图
编辑
另外,由于不再使用xEventSemaphore,也需要在vApplicationTickHook中去除对xSemaphore的操作:

16d9b9c0bd988606a915677c8f69631c.png

                               
登录/注册后可看大图
编辑
可尝试编译运行,查看效果。
.
除了以上简化过程,还有用户会使用到freeRTOS的静态方法
如果使用静态方法,即打开了宏:configSUPPORT_STATIC_ALLOCATION,需要新增两个hook函数,可参考:FreeRtos学习笔记---------------创建任务(静态方法)-CSDN博客 中的描述。
使用如:

066a8d9ae392e1ac053dc1b7b82a5198.png

                               
登录/注册后可看大图
编辑
编译通过后,可在函数中使用 static那组函数。
用法和动态那组函数相似,注意参数使用静态分配好的即可。
3. 使用自建工程:如果用户希望在自建工程中使用freeRTOS,该如何把它添加进来?
比如,在example下要把freeRTOS加进来。步骤:
1. 在platformio.ini中增加对freertos的引用:

7639431547581534bf0e44d384dec692.png

                               
登录/注册后可看大图
编辑
注意,多个库之间用“逗号+空格”来隔开。
2. 确认ve文件里的配置正常(时钟+led引脚);
3. 在example.c中引入freertos的头文件及用到的宏定义:

08b24dd50b871683fb8b93504c25bec3.png

                               
登录/注册后可看大图
编辑
4. 在example.c中新增几个函数:

7af79ae41cfaf76b9610f7fbf3156671.png

                               
登录/注册后可看大图
编辑
5. 在main.c中init后直接启动freeRTOS:

8f25b8ed94105ce3fd6075fa67511ba3.png

                               
登录/注册后可看大图
编辑
然后,编译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的引用: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的引用:

fd54649f755f56d679735209a8a9cc30.png

                               
登录/注册后可看大图
编辑
注意,多个库之间用“逗号+空格”来隔开。
2. 确认ve文件里的配置正常(时钟+led引脚);
3. 将用到的几个头文件从uCOS工程下copy过来;
4. 在example.c中引入freertos的头文件及用到的宏定义:

d319faaaf129bc4dd33a4d22488e9915.png

                               
登录/注册后可看大图
编辑
5. 在example.c中新增几个函数(从uCOS的例程中简化过来的):

67c5d9be100f2ce7f079dae6f83a5f1e.png

                               
登录/注册后可看大图
编辑
6. 在main.c中保留uCOS的启动即可:

504bb7aab18d43e7241b449a02a1d9a2.png

                               
登录/注册后可看大图
编辑
然后,编译ve并烧录,再编译code并烧录,就可以看到led的闪烁了。
.
三、其他系统其他系统不再举例。
参考上边的两个,自行建立对应的系统即可。https://item.taobao.com/item.htm ... .0.0.621e2c1b1WjywJ以上网站可以购买到AG32相关产品和方安定制!

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

本版积分规则

手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-5-28 19:08 , Processed in 0.106094 second(s), 5 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表