uC/OS-III 学习笔记(一)——uC/OS-III移植

2019-07-13 07:59发布

uC/OS-III 学习笔记(一)

uC/OS-III移植


前言

  最近毕设要做一个嵌入式设备,需要用到操作系统。本人只会制板和写ARM裸机程序,OS方面是一个小白,只对uC/OS和Linux两种系统略有了解。鉴于嵌入式Linux学习周期较长,有可能在毕设结束之前都不能学到能够开发项目的地步。故选择uC/OS作为设备的操作系统。
  之所以选择uC/OS-III,是本着“要学就学最新”的想法来的。uC/OS-III相比II,加入了时间片轮转功能,能够允许定义相同优先级的任务。其好处balabalabala…好吧,我没仔细学过II,说不出来。估计以后就可以填这个大坑了。
  至于FreeRTOS等操作系统的比较——算了吧,我一个OS都不会用,没什么可比性,写出来也没人信。
  
废话到此为止,下面开始正文

uC/OS-III 的移植

  首先讲讲我的开发环境:STM32F103RET6 + KEIL5 + ST 3.5.0 库
  • STM32F103RET6:是Cortex-M3内核的芯片,有PendSV和Systick中断供操作系统使用。
  • Keil5:用来管理工程,当然也可以用IAR,个人感觉Keil5漂亮一点。
  • ST 3.5.0 库:之所以使用ST 3.5.0 的库,而不是现在流行的HAL库,主要原因是目前国内的比较完善的教程主要是针对ST 3.5.0库来写的,一点有个什么bug还可以有个参考。不过之后当我对uC有了较深入的认识后,肯定会想办法移植到HAL库上。   移植比较简单,具体步骤如下:
      

1#下载源码

上Micrium官网下载源码https://www.micrium.com/(未墙,慢的可以上4G)
下载源码
用F107的做F103的移植没毛病。F103的只有uC/OS-II的工程。 下载源码需要注册,然而Micrium的官网经常出问题。如果无法注册也没有关系,可以从这里下载(度盘)。

2#找一个好的教程

网上随便搜搜都能找到如何移植的。这里我参考的是野火团队的《uCOS-III 应用开发指南——基于 STM32F103系列》,该书及配套文档在STM32&STM8社区技术论坛上就有这里。注册个账号即可下载。(什么?你懒得注册?那么这里好了) 该书讲解的比较全面,不仅讲解了如何移植,还通过阅读源码的方式,讲解了uC/OS-III的各个机制,且每一部分都有相应的例程帮助读者巩固理解。但不是很通俗易懂,且关于Cortex-M3的一些内核机制,包括PendSV、Systick、双堆栈等没有进行说明,也没有对操作系统做一个入门级的解说。这对于从来没有接触过OS的小伙伴可能有点困难。 这里建议初学者先仔细看一下这两篇文档:《初探uCOS-II》、《uCOS-II 移植与深入实战指南》,照着做一遍,先大致了解一下uCOS-II的工作原理。其中第二本书要求读者阅读一下《CM3权威指南》。这里我都有。 (uCOS-II那本书用的工程文件跟uCOS-III的不一样,其实也只是BSP的接口函数不一样啦,改一改就行。当然不放心的同学可以下这个uCOS-II对应的工程) 除了野火的书外,还有一本叫《STM32F4 UCOS开发手册V2.1》的书,书里的内容是是针对STM32F4系列,是战舰系列的配套教程(有一本F1的,但实际内容是F4的)。这本书讲的就比较通俗易懂,里面从uC/OS-II、讲到M3/M4内核机制,再讲到uC/OS-III的内容,图文并茂,讲的比较生动。个人建议手头已经有STM32F407开发板的同学,可以直接按照此教程来学习。但如果各位和我一样只有F103板子的话,还是看野火的书吧,这本书完全可以当个参考,毕竟没必要花那个冤枉钱。 本人也是按照野火的书一步步学的,从这里开始就写一下我对该书的理解好了,因为书已经讲得很细了嘛

3#移植

移植就按照教程一步步来就好了。个人认为最重要的是修改SysTick和PendSV的中断处理函数入口名称。该向量定义在启动文件stm32f10x_hd.s中,共两处: DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler PendSV_Handler PROC EXPORT PendSV_Handler [WEAK] B . ENDP SysTick_Handler PROC EXPORT SysTick_Handler [WEAK] B . ENDP uC/OS给的官方例程中,这两个中断函数入口名称分别为:OS_CPU_PendSVHandler和OS_CPU_SysTickHandler,跟Keil给出的启动文件不一样。这里需要修改启动文件中这两处名称,让其能够与uC的源码正确的连接起来。 之所以特地把这里拎出来,是因为这两个中断至关重要。至于为什么重要,去好好看看这张图吧:
Cortex-M3上下文切换
这张图的讲解在《uCOS-II 移植与深入实战指南》和《CM3权威指南》中,请务必把这张图搞清楚,不然真是学的一脸阿库娅。

4#编译与下载

ST-Link不能下载怎么办:
我的一篇文章有讲。