打印
[应用相关]

AT32的FreeRTOS的使用

[复制链接]
782|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zljiu|  楼主 | 2023-7-19 12:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1、通过自己整理的官方的项目库的条件下移植FreeRTOS
        首先自己已经根据at32的官方库,创建好了自己的一个项目文件,根据自己的开发板,可以有串口、led灯等测试的app,后面需要移植的FreeRTOS需要使用串口或者led灯进行验证。

    移植FreeRTOS需要注意的部分:

        1、移植的项目必须开启滴答时钟的中断,FreeRTOS的驱动就是靠滴答定时器的时钟中断。

        2、FreeRTOS中重现定义了三个中断函数:SysTick_Handler()、PendSV_Handler()

SVC_Handler();

下面是AT32上移植FreeRTOS:

        1、首先准备好前面说的at32的项目文件,然后去FreeRTOS官方或者at32的论坛或者资料中心(推荐去at32的论坛或者资料中心,因为可能存在版本的问题,导致移植中会有很多的问题)。

        2、在at32项目中添加FreeRTOS的分组,然后需要添加下面的相关文件:

        首先是FreeRTOS的核心文件,task和list是必须要的文件,其他的可以根据需要自行添加。

      

        这两个文件夹下的文件,对应添加m4内核、poit4的存取方式。

        

        下面的头文件中箭头指出的两个头文件是非常重要的,有时候会缺少“FreeRTOSConfig.h”的头文件,这时候需要自己从新添加。

        

上面文件都添加完成之后,就在keil中添加对应文件的路径就可以了。然后进行编译。编译好之后,首先进行下面的修改。

1、将编译产生的一些错误进行修改,比如找不到文件,未定函数这种。

2、上面添加之前需要确认滴答定时器的中断时候打开,卡面忘记介绍

3、FreeRTOSConfig.h头文件里面对对前面介绍的三个中断函数进行define的从定义;或者直接在启动文件里面对这三个中断函数进行替换修改。





4、再次编译运行会产生三个重定义的函数,这时候到中断初始化文件里面,将上面三个中断函数屏蔽掉就可以了。

上面全部完成之后,移植的部分应该就完成了,这时候就需要写测试代码对移植的FreeRTOS做驱动测试了。

如果不能运行,可以检查系统滴答定时定器的中断是否开启。

2、利用AT32技术论坛里面的demo整理之后使用
      在下图所示的位置,找到at32移植好的例程,





         下载了资料之后,应用FreeRTOS应用笔记里面关于项目中移植FreeRTOS的内容,是非常少的,几乎没有什么作用,关于FreeRTOS的使用还是很丰富的。

        里面的demo是直接可以根据选择不同芯片型号的启动文件使用,直接打开运行的时候,会报错,是自己写的app代码产生的错误,只需要屏蔽掉led的代码,只留下uasrt1的代码就可以了,进行任务函数的测试。

        然后可以根据自己的习惯创建项目文件夹,进而整理出来自己的项目文件,创建如下图所示的文件夹。



         主要需要处理的文件是:start文件夹、freertos文件夹、library文件夹。start文件夹主要存放项目的启动文件,包括中断文件、时钟文件、还有cm4的内核文件,如下图所示:



         然后就是freertos文件夹中主要就是FreeRTOS官方的文件,主要文件分为下图所示的三部分,图中的这些c文件就是FreeRTOS的核心文件,包括任务、链表、消息队列等文件。



         portable文件中主要是关于内存管理的文件和cm4和cm3的内核接口文件,如下图所示:



        include头文件里面主要是一些重要的头文件,如下图所示,其中FreeRTOSConfig.h文件主要是FreeRTOS的代码剪切的头文件,使用那些函数就要定义相应的宏。



         这些代码整理好之后,在keil中创建了项目之后,选择代码,然后选择编译中产生文件的位置,然后在keil中添加项目和文件,然后添加文件的路径,编译的时候,可能会产生某个函数隐式定义,那就是没有引用相应的头文件,添加对应的头文件就可以了。

        另一种就是发现没有函数没有定义的错误的时候,但是通过keil的全局搜索,搜i所不到这个函数的时候,可能是某个宏重定义了这个函数,然后这个函数的开启宏没有定义。比如SysTick_Handler()函数,编译的时候没有定义这个函数的开启宏,就会产生报错。比如下面产生的问题,屏蔽掉的宏的问题。


————————————————
版权声明:本文为CSDN博主「一天不学习,就给自己一个大b兜子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_50299271/article/details/127112366

使用特权

评论回复
沙发
tpgf| | 2023-8-9 18:24 | 只看该作者
移植的源芯片不同 那么需要修改的步骤会不会改变呢

使用特权

评论回复
板凳
nawu| | 2023-8-10 09:20 | 只看该作者
freertos的核心文件是不需要更改的是吗

使用特权

评论回复
地板
aoyi| | 2023-8-10 09:54 | 只看该作者
一般的单片机都可以跑freertos  这个系统比较小

使用特权

评论回复
5
tfqi| | 2023-8-10 11:50 | 只看该作者
FreeRTOS的驱动只能靠滴答定时器的时钟中断吗?

使用特权

评论回复
6
磨砂| | 2023-8-10 12:18 | 只看该作者
哪些文件是我们可以改动的 哪些是不能改动的 原则是什么呢

使用特权

评论回复
7
晓伍| | 2023-8-10 15:11 | 只看该作者
每次移植需要重新定义的都是这三个文件吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

3322

帖子

3

粉丝