您的位置:首页 > 其它

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,移植主要就是得到那几个主要的文件,熟悉你想要的芯片文件的位置,移植过程灵活掌握,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: