首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

NucleoF429工程建立与FreeRTOS移植-2

NucleoF429工程建立与FreeRTOS移植-2

第二步:移植FreeRTOS
1、FreeRTOS下载下来是一个执行文件:
点击运行后会解压出Source Code。我们只是用Source文件夹里的文件。


2、在工程模板文件夹下建立FreeRTOS文件夹,将解压出的Source中的文件全部复制到新建的FreeRTOS中,


3、在Keil工程里添加FreeRTOS需要的文件:


除了FreeRTOS文件夹中的所有.c文件以外,还需要Heap_2.cPort.c文件,这两个文件分别位于:...FreeRTOS\portable\MemMang...\FreeRTOS\portable\RVDS\ARM_CM4F
除了以上的C文件,还需要一个FreeRTOS的配置头文件,FreeRTOS的自带的Demo中有STM32F407的例程,复制...\FreeRTOSV8.2.3\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK下的FreeRTOSConfig.h到工程的Include中。
4、添加FreeRTOS的头文件搜索路径。


以上基本完成了移植工作,但还有一些编译错误需要解决,可能是由于版本的原因和移植方式的原因,之前在STM32F103上移植是并没有多少错误,但这次F429上多了一些。
FreeRTOS的一些中断服务程序需要代替F429自带的程序,比如在FreeRTOSConfig.h定义了这三个中断服务程序,就需要把STM32F4xx_it.c中的SVC_Handler()/PendSV_Handler()/SysTick_Handler()这三个程序屏蔽掉,否则会报重复定义错误。(另一中解决办法是修改.s文件中的中断向量表,网上大多数采用这种方法。)


另一类错误就是FreeRTOSConfig.h定义了一些开关量,但实际的程序实现并没有给出,需要用户自己编写,所以我将这些都定义为0,默认不编译。
FreeRTOS里添加任务之前,需要改一下默认的系统时钟,否则时间不准。在进入main之前,程序默认初始化了系统时钟,都是按照外接25MHz设置到180Mhz的,NucleoF429默认无外接高速晶振,所以要改变分频,在system_stm32F4xx.c PLL_M由原来的258即可.
编译无错后,可以添加任务了。
我使用了板子上自带的三个LED,实现不同频率的闪烁。
步骤分别是1、硬件初始化,2、创建任务,3、启动任务序列。

其中,任务的实现为:

FreeRTOS在遇到延时时会自动让出CPU,所以三个任务会轮流执行。GPIOC是为了测量时间。
以上是建立工程和移植FreeRTOS的全部过程。如果里面有错误的地方,欢迎各位留言讨论。
-------------------------------------------------监介的分割线--------------------------------------------------
没错!下面进一段广告!!
众所周知,版主在不久前发起了 活动,深受欢迎。版主本人也自讨腰包设置了奖品,欢迎各位留言参加。还有一个:

PS:我的前一片篇博客: 其中的串口波形显示软件很棒,欢迎下载使用,有什么问题可以留言给我,会及时回复。

返回列表