ucosii在stm32上的移植详解3

本文详细介绍了如何在STM32上移植UCOSII操作系统,包括从Micrium官网下载移植包,理解移植所需的文件结构,修改`os_cpu.h`、`os_cpu_a.asm`中的关键代码,以及处理`os_cpu_c.c`中的函数。通过阅读AN-1018.pdf文档和理解移植基础知识,可以成功进行移植工作。
摘要由CSDN通过智能技术生成

转载请注明出处:http://blog.csdn.net/lbl1234

    移植详解1和2中主要讲了移植需要用到的基础知识,本文则对具体的移植过程进行介绍。
    首先从micrium网站上下载官方移植版本(编译器使用ARM/Keil的,V2.86版本,V2.85有问题)。
    下载地址:
http://micrium.com/page/downloads/ports/st/stm32
    解压缩后得到如下文件夹和文件:
    Micrium\
       AppNotes
       Licensing
       Software
       ReadMe.pdf

    AppNotes包含ucosii移植说明文件。这两个文件中我们仅需关心Micrium\AppNotes\AN1xxx-RTOS\AN1018-uCOS-II-Cortex-M3\AN-1018.pdf。因为这个文件对ucosii在CM3内核移植过程中需要修改的代码进行了说明。
   Licensing包含ucosii使用许可证。
   Software下有好几个文件夹,在本文的移植中仅需关心uCOS-II即可。
       CPU: stm32标准外设库
       EvalBoards: micrium官方评估板相关代码
       uc-CPU: 基于micrium官方评估板的ucosii移植代码
       uC-LCD:micrium官方评估板LCD驱动代码
       uc-LIB: micrium官方的一个库代码
       uCOS-II: ucosii源代码
       uC-Probe: 和uC-Probe相关代码
   ReadMe.pdf就不说了。

    好了,官方的东西介绍完了,该我们自己建立工程着手移植了。关于建立工程,并使用stm32标准外设库在我之前的文章《stm32标准外设库使用详解》已有介绍,这里请大家下载其中模板代码http://download.csdn.net/source/3448543),本文的移植是基于这个工程的。
    建立文件夹template\src\ucosii, template\src\ucosii\src, template\src\ucosii\port;
    把Micrium\Software\uCOS-II\Source下的文件拷贝至template\src\ucosii\src;
    把Micrium\Software\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealView下的文件拷贝至

template\src\ucosii\port;
   ucosii\src下的代码是ucosii中无需修改部分,ucosii\port下的代码是移植时需要修改的。为防止对
源码的误改动造成移植失败,可以把ucosii\src下的代码文件设为只读。
   这里根据AN-1018.pdf和移植详解1、2中介绍的移植基础知识,对ucosii\port下的代码解释一下。

os_cpu.h

#ifdef   OS_CPU_GLOBALS
#define  OS_CPU_EXT
#else
#define  OS_CPU_EXT  extern
#endif

typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned short INT16U;
typedef signed short INT16S;
typedef unsigned int INT32U;
typedef signed int INT32S;
typedef float FP32;
typedef double FP64;
就不解释了。

typedef unsigned int OS_STK;
typedef unsigned int OS_CPU_SR;

   因为CM3是32位宽的,所以OS_STK(堆栈的数据类型)被类型重定义为unsigned int。
   因为CM3的状态寄存器(xPSR)是32位宽的,因此OS_CPU_SR被类型重定义为unsigned int。OS_CPU_SR
是在OS_CRITICAL_METHOD方法3中保存cpu状态寄存器用的。在CM3中,移植OS_ENTER_CRITICAL(),OS_EXIT_CRITICAL()选方法3是最合适的。

#define  OS_CRITICAL_METHOD   3

#if OS_CRITICAL_METHOD == 3
#define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}
#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}
#endif

   具体定义宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),其中OS_CPU_SR_Save()和OS_CPU_SR_Restore()是用汇编代码写的,代码在os_cpu_a.asm中,到时再解释。

#define  OS_STK_GROWTH        1
   CM3中,栈是由高地址向低地址增长的,因此OS_STK

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值