1,源文件准备 (freertos官网获取源码)
1)与FreeRTOS内核有关的文件数量仅为3个,分别是list.c queue.c tasks.c
croutine.c timers.c 也是必须得文件。
该文件位于FreeRTOS\Source
2)与内存分配有关的文件共有4个,分别是heap_1.c,heap_2.c,heap_3.c,heap_4.c,heap_5.c 最新版有5个文件只需选择其中
的1个。
该文件位于Source\portable\MemMang。
3) 与移植相关的代码包括port.c portmacro.h。这些代码不但和编译器有关还和平台(MCU)有关。FreeRTOS先以编译器为大类,然后再以平台(MCU)为小类。在这里选择Keil编译器,平台为ARM_CM4F。
该文件位于Source\portable\RVDS\ARM_CM4F。
4)除了上述内容之外,还包括FreeRTOS内核相关的头文件。
该文件FreeRTOS\Source\include。
tip: 1、FreeRTOS中联合程序(co-routine)与任务类似,但在实现上区别,可参考http://www.openrtos.cn/freertos/taskandcr.html获取详细内容。简单而言联合程序相当于不能抢占的任务,其优先级均低于任务。因为其非抢占性,因此其需要的系统资源更少,不需要独立的堆栈空间。
2、portmacro.h 主要包括两部分内容,第一部分定义了一系列内核代码中用到的数据类型。FreeRTOS 与 uC/OS-II 一样,并不直接使用char、int 等这些原生类型,而是将其重新定义为一系列以port开头的新类型。在uC/OS-II的移植代码中,通常采用 typedef 来定义新的类型,而FreeRTOS的作者似乎更喜欢用宏定义。
2、freertos 需要的使用到的中断和硬件
freertos需要使用三个中断:
1) systick 系统时钟
2) PendSV 任务调度需要使用
3 ) SVC 任务调度需要使用
SVC(系统服务调用)用于任务启动,有些操作系统不允许应用程序直接访问硬件,而是通过提供一些系统服务函数,通过SVC来调用;
PendSV(可挂起系统调用)用于完成任务切换,它的最大特性是如果当前有优先级比它高的中断在运行,PendSV会推迟执行,直到高优先级中断执行完毕;
SysTick用于产生系统节拍时钟,提供一个时间片,如果多个任务共享同一个优先级,则每次SysTick中断,下一个任务将获得一个时间片。
PendSV和SysTick异常优先级设置为最低,这样任务切换不会打断某个中断服务程序,中断服务程序也不会被延迟,这样简化了设计,有利于系统稳定。
3、系统配置
FreeRTOSConfig.h需要自行加入工程,并且配置内容