You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
2.3 KiB
32 lines
2.3 KiB
2 years ago
|
## RTOS
|
||
|
|
||
|
Timebase Source为什么不可以使用滴答定时器呢?
|
||
|
|
||
|
在FreeRTOS中我们的SysTick定时器被用于了我们的始终基准,它用来实现我们的任务切换,我们的SysTick定时器每次触发我们的中断(默认是一毫秒,可以自行修改为其他值)
|
||
|
|
||
|
Timebase Source是干嘛的呢?
|
||
|
|
||
|
简单的说,正常裸机开发中我们的SysTick定时器是用来主要是用来进行我们的HAL_Delay()延时的,使用其作为基准,前面我们说了SysTick定时器被用于系统任务切换了,所以它就是一直在工作,或者说一直在触发中断,这样的话我们的HAL_Delay()就需用使用我们的其他定时器(TIM2)进行替代其作用了
|
||
|
|
||
|
系统中断的替换
|
||
|
在FreeRTOSConfig.h中添加#define xPortPendSVHandler PendSV_Handler
|
||
|
在FreeRTOSConfig.h中添加#define xPortSysTickHandler SysTick_Handler
|
||
|
在FreeRTOSConfig.h中添加#define vPortSVCHandler SVC_Handler
|
||
|
|
||
|
第一步:准备一个STM32工程,这里工程越简洁越好
|
||
|
第二步:准备好工程后,创建一个FreeRTOS文件夹
|
||
|
第三步:打开刚才下载好的稳定版本文件,路径:FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel将里面内容复制出来
|
||
|
第四步:将内容粘贴到工程中得FreeRTOS文件中
|
||
|
为了简洁好看,我们在创建个source文件夹把这些.c文件放到这里面
|
||
|
现在FreeRTOS源码被我们分成了三个目录,分别是①include目录;②portable目录;③source目录
|
||
|
|
||
|
这里 分析一下 FreeRTOS源码结构,①和③包含的是FreeRTOS核心功能源文件及头文件 .c和.h,这两部分的文件试用于各种编译器和处理器,是通用的,基本不需要修改,②为需要移植修改的目录,这与编译器和所使用的CPU有关,属于RTOS硬件接口层。
|
||
|
|
||
|
***软件到硬件中间必须有一个桥梁,portable 文件夹里面的东西就是 FreeRTOS***
|
||
|
MemMang 选一个
|
||
|
RVDS 依据编译器,选择 port,保留FreeRTOS/portable/RVDS文件夹中的ARM_CM3文件夹
|
||
|
依据编译器,选择 port
|
||
|
FreeRTOS-Kernel/portable/GCC/ARM_CM3/
|
||
|
|
||
|
缺少 FreeRTOSConfig.h 文件
|
||
|
在demo目录下找到对应内核目录下的demo(可能是其它MCU,不要紧)拷贝一个FreeRTOSConfig.h文件到本地source\FreeRTOS\include目录内
|