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
|