标题:
NucleoF429工程建立与FreeRTOS移植-2
[打印本页]
作者:
look_w
时间:
2018-1-24 20:28
标题:
NucleoF429工程建立与FreeRTOS移植-2
第二步:移植FreeRTOS
1、FreeRTOS下载下来是一个执行文件:
点击运行后会解压出Source Code。我们只是用
Source
文件夹里的文件。
2、在工程模板文件夹下建立FreeRTOS文件夹,将解压出的
Source
中的文件全部复制到新建的
FreeRTOS
中,
3、在
Keil
工程里添加
FreeRTOS
需要的文件:
除了FreeRTOS文件夹中的所有
.c
文件以外,还需要
Heap_2.c
和
Port.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
由原来的
25
为
8
即可
.
编译无错后,可以添加任务了。
我使用了板子上自带的三个
LED
,实现不同频率的闪烁。
步骤分别是
1
、硬件初始化,
2
、创建任务,
3
、启动任务序列。
其中,任务的实现为:
FreeRTOS在遇到延时时会自动让出
CPU
,所以三个任务会轮流执行。
GPIOC
是为了测量时间。
以上是建立工程和移植
FreeRTOS
的全部过程。如果里面有错误的地方,欢迎各位留言讨论。
-------------------------------------------------监介的分割线--------------------------------------------------
没错!下面进一段广告!!
众所周知,版主在不久前发起了
活动,深受欢迎。版主本人也自讨腰包设置了奖品,欢迎各位留言参加。还有一个:
PS:我的前一片篇博客: 其中的串口波形显示软件很棒,欢迎下载使用,有什么问题可以留言给我,会及时回复。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0