序言:
作为一名做嵌入式代码开发的人来说,熟练使用一款嵌入式操作系统显得尤为重要。自己也是从裸机代码走过来的,自己深知当工程代码量越来越大,以及后期维护。基于嵌入式操作系统的代码无论的优化和维护都会显得轻松许多。自己公司使用的也是FreeRTOS,自然也就抽空学习这个嵌入式操作系统的使用。第一步莫过于移植,网上很多移植的文章,得益于FreeRTOS本身移植起来非常方便,得益于这个系统的工程师发布的版本本身就为我们移植做了很多工作。
环境介绍:
Keil:4.72
FreeRTOS 版本号V9.0
STM32Libraries 版本号 V3.20
准备工作:
一块硬件板(根据自己硬件修改代码段)
建好一个STM32F107VC的工程(这个工程建立我就介绍了相信看这篇文章的朋友肯定也都知道的)
FreeRTOS的官方源码:这个大家可以自行到官网去下载这里我就不上传了。
移植过程:
1.在工程里面给FreeRTOS建一个文件夹方便模块化管理
2.在官网源码找到我们需要的文件:
这里我只用到了第一个文件夹FreeRTOS,关于第二个文件夹具体的使用还没研究。
FreeRTOS进来后就能看到这三个文件夹,虽然我英语很差这三个文件的名字还是能看懂的,相信你们也可以。
我们再点击Source进来就能看到我们需要文件了。我们先从C文件开始。这里我们需要在自己的工程里面建立一个FerrRTOS文件夹移植这些C文件和H文件
下面我直接给出我移植过来的文件,大家参考直接copy就是了。
头文件:H
C文件:C
有些文件根据平台不一样官方都给您分类了很方便
KEIL中没有文件只看到See-also-the-RVDS-directory意思是让你去RVDS去copy
这里我们选择CM3
这里大家移植完发现还有一个文件找不到那就是FreeRTOSConfig.h,这个文件大家在官网的Demos里面去copy,里面都是一些宏定义
移植好添加到工程里面就是代码修改了。这里不得不提FreeRTOS需要改动的东西确实少,学过UCOS的朋友肯定知道比这复杂很多。
我也相信开源免费的FreeRTOS会越来越被普及。
这里只需要修改我们硬件的启动文件和中断文件,这里我修改startup_stm32f10x_cl.s,stm32f10x_it.c 。其实有些32基础的朋友都值得,这里汇编修改只是因为FreeRTOS
中断向量名的重定义,这里我们需要以FreeRTOS的名称为标准。下面添上代码段
PRESERVE8
THUMB
//增加代码段
IMPORT xPortPendSVHandler
IMPORT xPortSysTickHandler
IMPORT vPortSVCHandler
IMPORT vPortSVCHandler
; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY
EXPORT __Vectors
EXPORT __Vectors_End
EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
; DCD SVC_Handler ; SVCall Handler
DCD vPortSVCHandler ; 重定义 vPortSVCHandler
DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved
; DCD PendSV_Handler ; PendSV Handler
; DCD SysTick_Handler ; SysTick Handler
DCD xPortPendSVHandler ;重定义xPortPendSVHandler
DCD xPortSysTickHandler ;重定义xPortSysTickHandler
; External Interrupts
DCD WWDG_IRQHandler ; Window Watchdog
DCD PVD_IRQHandler ; PVD through EXTI Line detect
DCD TAMPER_IRQHandler ; Tamper
DCD RTC_IRQHandler ; RTC
上面中文注释的便是需要修改的代码
这里写了一个串口打印的测试代码。
测试结果
很高心这里能入门开始使用这个嵌入式操作系统,这里在网上看到一篇网友的移植帖子谈到内部关于优先级问题,由于缺乏实践使用经验,还没有去验证。不过强烈建议大家可以看看,避免以后不必要的错误。网址:http://www.openedv.com/thread-77593-1-1.html