学习使用Free RTOS ,移植最新的STM32 v3.5固件库

    最近拿到了一块万利的EK-STM32F的学习板,打算先用它来熟悉下STM32的编程环境,不过在这过程中和一个同事聊的时候觉得如果只调用STM32的库写程序,可能在芯片资源的利用上面可能就会差一点,在这么高的主频下,一些硬延时的函数对资源会造成比较大的损失,所以一般的编程方式还是有不少局限性的,所以我就觉得有必要去使用小型的嵌入式RTOS来实现系统的资源管理。

    以前看过一些RTT的资料,可是感觉比较复杂,如果直接使用的话可能要花的时间比较长,虽然一直什么都做了,可是还是有点复杂的感觉,uCos吗商业使用限制比较大,虽然资源比较多,可是很多组件都是暂时用不到的。最后找到了Free RTOS,一个商用免费的系统,占用的ROM/RAM资源比较小,且对stm32都有现成的例子支持,对于一般的使用还是够用了。

    下面要看如何移到EK-STM32F板子上使用了,我看了下里面自带的例子,发现其STM32使用的库还是最老的版本库,现在都出到lib v3.5了,那么我用肯定要使用最新的。刚开始直接在例子里替换了最新的库,结果报了几百个警报错误,直接让我奔溃,那么只能不这么弄了,不再使用原来的例子直接改了,那就一步步来。

  我开始自己建了一个项目,先将新库的结构给搭建好:
  建好之后试了一个简单的例子,确定该库能正常使用,之后在开始添加Free Rtos文件并对一些文件进行修改,以确保能正常运行FREE RTOS:
   其实FREE RTOS很多文件都是系统无关的,这了我只修改了几个中断文件的入口以确保系统正式运行,下面三个中断函数就是RTOS带的函数,修改就好了,刚开始我是修改启动文件里的跳转函数,结果发现报了HardFault错误,现在这个才是正确的:
   
1    DCD     SVC_Handler               ; SVCall Handler
2    DCD     PendSV_Handler            ; PendSV Handler
3    DCD     SysTick_Handler           ; SysTick Handler
   我找了下官方对这几个函数的解释,就能看出这几个中断就是给OS使用的,看来Cortex-M3是对OS有优化的:
   
   SVCall  A supervisor call (SVC) is an exception that is triggered by the SVC instruction. In an OS environment, applications can use SVC instructions to access OS kernel functions and device drivers.

   PendSV  PendSV is an interrupt-driven request for system-level service. In an OS environment, use PendSV for context switching when no other exception is active.

    SysTick  A SysTick exception is an exception the system timer generates when it reaches zero. Software can also generate a SysTick exception. In an OS environment, the processor can use this exception as system tick
   改完之后我试了一个简单的LED任务,延时1s亮灭,下载,发现没什么问题,说明功能暂时OK了,下面就学习具体的RTOS操作和芯片功能设置了。
posted @ 2013-07-02 13:45  吾乐  阅读(3097)  评论(1编辑  收藏  举报