FreeRTOS9.0的移植-Keil-STM32F107VC

序言:

  作为一名做嵌入式代码开发的人来说,熟练使用一款嵌入式操作系统显得尤为重要。自己也是从裸机代码走过来的,自己深知当工程代码量越来越大,以及后期维护。基于嵌入式操作系统的代码无论的优化和维护都会显得轻松许多。自己公司使用的也是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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值