freeRtos在stm32上的移植
2017-03-27 11:33
369 查看
1、 直接copy FreeRTOS源码Source目录
2、 直接copy FreeRTOS源码\demo\Common目录
3、 拷贝\FreeRTOS\Demo\CORTEX_STM32F103_Keil\FreeRTOSConfig.h
4、 在Source/portable目录中,保留RVDS和MemMang目录,其余可刪除。
复制<FreeRTOS目录>\Demo\CORTEX_STM32F103_Keil\FreeRTOSConfig.h
5、 KEIL开发环境中
Target options ---> C/C++
中
Include path 設定:
.\FreeRTOS\Source\include
.\FreeRTOS\Source\portable\RVDS\ARM_CM3
.\FreeRTOS\Common\include
6、 修改startup_stm32f10x_xx.s
在 __heap_limit
段添加
IMPORT xPortPendSVHandler
IMPORT xPortSysTickHandler
IMPORT vPortSVCHandler
__Vectors区段中断向量表將SVCall Handler、PendSV_Handler、SysTick
Handler更名改由
RTOS管理,这样stm32f10x_it.c就不會影响到這三個OD要用到的中断常驻程式。不過为了方
便我是直接註解比较直观。
;DCD SVC_Handler ; SVCall Handler
DCD vPortSVCHandler ; SVCall Handler
;DCD PendSV_Handler ; PendSV Handler
;DCD SysTick_Handler ; SysTick Handler
DCD xPortPendSVHandler ;PendSV Handler
DCD xPortSysTickHandler ; SysTickHandler
注解:
在Cortex-M3硬件下,FreeRTOS使用SysTick作为系统节拍时钟,使用SVC和PendSVC进行上下文切换。异常中断服务代码位于port.c文件中,FreeRTOS的作者已经为各种架构的CPU写好了这些代码,可以直接拿来用,需要用户做的,仅仅是将这些异常中断入口地址挂接到启动代码中。
在Cortex-M3架构中,FreeRTOS为了任务启动和任务切换使用了三个异常:SVC、PendSV和SysTick。SVC(系统服务调用)用于任务启动,有些操作系统不允许应用程序直接访问硬件,而是通过提供一些系统服务函数,通过SVC来调用;PendSV(可挂起系统调用)用于完成任务切换,它的最大特性是如果当前有优先级比它高的中断在运行,PendSV会推迟执行,直到高优先级中断执行完毕;SysTick用于产生系统节拍时钟,提供一个时间片,如果多个任务共享同一个优先级,则每次SysTick中断,下一个任务将获得一个时间片。
7、 所使用到的基本的内核源文件
port.c(.\FreeRTOS\Source\portable\RVDS\ARM_CM3\)
heap_x.c(.\FreeRTOS\Source\portable\MemMang\)
list.c(.\FreeRTOS\Source\)
queue.c
tasks.c
FreeRTOSConfig.h(.\user\inc\)
在官方源码包中包含了很多不同架构不同编译器的Demo,移植主要就是得到那几个主要的文件,熟悉你想要的芯片文件的位置,移植过程灵活掌握,
2、 直接copy FreeRTOS源码\demo\Common目录
3、 拷贝\FreeRTOS\Demo\CORTEX_STM32F103_Keil\FreeRTOSConfig.h
4、 在Source/portable目录中,保留RVDS和MemMang目录,其余可刪除。
复制<FreeRTOS目录>\Demo\CORTEX_STM32F103_Keil\FreeRTOSConfig.h
5、 KEIL开发环境中
Target options ---> C/C++
中
Include path 設定:
.\FreeRTOS\Source\include
.\FreeRTOS\Source\portable\RVDS\ARM_CM3
.\FreeRTOS\Common\include
6、 修改startup_stm32f10x_xx.s
在 __heap_limit
段添加
IMPORT xPortPendSVHandler
IMPORT xPortSysTickHandler
IMPORT vPortSVCHandler
__Vectors区段中断向量表將SVCall Handler、PendSV_Handler、SysTick
Handler更名改由
RTOS管理,这样stm32f10x_it.c就不會影响到這三個OD要用到的中断常驻程式。不過为了方
便我是直接註解比较直观。
;DCD SVC_Handler ; SVCall Handler
DCD vPortSVCHandler ; SVCall Handler
;DCD PendSV_Handler ; PendSV Handler
;DCD SysTick_Handler ; SysTick Handler
DCD xPortPendSVHandler ;PendSV Handler
DCD xPortSysTickHandler ; SysTickHandler
注解:
在Cortex-M3硬件下,FreeRTOS使用SysTick作为系统节拍时钟,使用SVC和PendSVC进行上下文切换。异常中断服务代码位于port.c文件中,FreeRTOS的作者已经为各种架构的CPU写好了这些代码,可以直接拿来用,需要用户做的,仅仅是将这些异常中断入口地址挂接到启动代码中。
在Cortex-M3架构中,FreeRTOS为了任务启动和任务切换使用了三个异常:SVC、PendSV和SysTick。SVC(系统服务调用)用于任务启动,有些操作系统不允许应用程序直接访问硬件,而是通过提供一些系统服务函数,通过SVC来调用;PendSV(可挂起系统调用)用于完成任务切换,它的最大特性是如果当前有优先级比它高的中断在运行,PendSV会推迟执行,直到高优先级中断执行完毕;SysTick用于产生系统节拍时钟,提供一个时间片,如果多个任务共享同一个优先级,则每次SysTick中断,下一个任务将获得一个时间片。
7、 所使用到的基本的内核源文件
port.c(.\FreeRTOS\Source\portable\RVDS\ARM_CM3\)
heap_x.c(.\FreeRTOS\Source\portable\MemMang\)
list.c(.\FreeRTOS\Source\)
queue.c
tasks.c
FreeRTOSConfig.h(.\user\inc\)
在官方源码包中包含了很多不同架构不同编译器的Demo,移植主要就是得到那几个主要的文件,熟悉你想要的芯片文件的位置,移植过程灵活掌握,
相关文章推荐
- FreeRTOS移植到STM32
- FreeRTOS STM32移植笔记
- STM32上移植FreeRTOS
- FreeRTOS STM32移植笔记
- FreeRTOS STM32移植笔记
- 22、FreeRTOS 在 STM32 上的移植
- 23、STM32 上系统精确延时与获取 micro 时间函数的实现(FreeRTOS 中也能移植)
- stm32移植FreeRTOS——port.c: Internal fault: [0xafc2db:400524]
- FreeRTOS STM32移植笔记
- FreeRTOS移植教程 STM32 -- Cortex M3
- FreeRTOS STM32移植笔记
- FreeRTOS STM32移植笔记
- STM32移植FreeRTOS的Tips
- 关于freertos移植到stm32出错,程序直接跳到HardFault_Handler的问题。
- FreeRTOS 在STM32上的移植 V1.0
- FreeRTOS 在STM32上的移植 V1.0
- FreeRTOS在STM32上移植--详尽篇
- STM32中移植FreeRTOS(中断优先级与任务优先级的关系)
- FreeRTOS STM32移植笔记