DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 138|回复: 0
打印 上一主题 下一主题

μCOSII在基于Cortex-M3核的ARM处理器上的移植

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 18:42:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                      目前,嵌入式技术已被广泛应用到汽车电子、无线通信、数码产品等各个领域。嵌入式操作系统及嵌入式处理器技术发展迅猛,嵌入式操作系统典型代表有μCOS—II、μClinux、Winclow CE、VxWorks等;嵌入式处理器包括ARM、MIPS、PowerPC等。随着软硬件技术的发展,人们开始意识到基于嵌入式操作系统的程序开发模式的便利性及可靠性,并且在程序开发过程中开始倾向于从传统超循环开发模式转向基于嵌入式操作系统的开发模式。
  1 软硬件开发环境及处理器介绍
  1.1 软件硬开发环境
  本移植过程使用的软件环境是RealView MDK开发套件,此产品是ARM公司最新推出的针对各种嵌入式处理器的软件开发工具,该开发套件功能强大,包括了μVision3集成开发环境和RealView编译器。使用的硬件平台是深圳英蓓特公司推出的全功能*估板STMl03V100,其上所采用的处理器是ST意法半导体公司生产的32位哈佛结构ARM处理器STM32F103VBT6,该处理器内置ARM公司最新的Cortex—M3核,并且具有非常丰富的片上资源。
  1.2 关于基于Cortex-M3的ARM处理器的介绍
  基于Cortex—M3核的ARM处理器支持两种模式,分别称为线程模式和处理模式。程序可以在系统复位时或中断返回时两种情况下进入线程模式,而处理模式只能通过中断或异常的方式来进入。处于线程模式中代码可以分别运行在特权方式下和非特权方式下。处于处理模式中的代码总是运行在特权方式下。运行在特权方式下的代码对系统资源具有完全访问权,而运行在非特权方式下的代码对系统资源的访问权受到一定限制。处理器可以运行在Thumb状态或Debug状态。在指令流正常执行期间,处理器处于Thumb状态。当进行程序调试时,指令流可以暂停执行,这时处理器处于Debug状态。处理器有两个独立的堆栈指针,分别称为MSP和PSP。系统复位时总是处于线程模式的特权方式下,并且默认使用的堆栈指针是MSP。本移植过程中假设任务总是运行在线程模式的特权方式下且总是使用堆栈指针PSP。
  2 移植过程详解
  2.1 μCOS-II内核介绍
  μCOS—II是一个实时可剥夺型操作系统内核,该操作系统支持最多64个任务,但每个任务的优先级必须互不相同,优先级号小的任务比优先级号大的任务具有更高的优先级,并且该操作系统总是调度优先级最高的就绪态任务运行。此内核的代码是美国人Jean J.Labrosse用C语言编写的,具有很好的可移植性,其2.52版本通过了美国航天航空管理局的安全认证,可靠性非常高。文中所述的移植过程使用的就是该版本的源代码。
  2.2 开始移植
  μCOS—II v2.52的源代码按照移植要求分为需要修改部分和不需要修改部分。其中需要修改源代码的文件包括头文件OS_CPU.H、C语言文件OS_CPU.C以及汇编格式文件OS_CPU_A.ASM。
  2.2.1 修改头文件OS_CPU.H
  头文件OS_CPU.H中需要修改的内容有与编译器相关的数据类型重定义部分和与处理器相关的少量代码。由于本移植过程中使用的是RealView编译器,因此通过查阅此编译器的相关说明文档可以得到其所支持的基本数据类型,据此修改OS_CPU.H中与编译器相关的数据类型重定义部分。修改后代码如下所示:






  其中INT_DIS()和INT_EN()分别对应关中断和开中断处理过程。
  根据文献可知文中所使用的处理器支持的堆栈为满递减方式,即堆栈的增长方向是从内存高地址向低地址方向递减并且堆栈指针总是指向栈顶的数据。在头文件OS_CPU.H中相应代码只须修改一条,如下所示
  #define OS_STK_GROWTH1
  此定义中的1代表堆栈方向是向下递减的。
  头文件OS_CPU.H中最后一个要修改的地方是任务切换宏定义,μCOS—II内核就是通过这个宏调用来触发任务级的任务切换。任务切换一般是通过陷阱或软件中断来实现的,在基于Cortex—M3核的处理器中支持一条称为超级用户调用的指令SVC,此指令是ARM软件中断指令SWI的升级版。此处的宏定义代码修改为如下形式
  #define OS_TASK_SW()OS_SVC()
  其中OS_SVC()之中包含了SVC指令,它可以由嵌入汇编的方式在C语言代码中进行定义,如下所示
  _asm void OS_SVC(void){SVCOx00}
  以上代码以嵌入汇编的方式定义了一个输入参数和返回值都为空的C语言函数,嵌入汇编的格式在RealView编译器的说明文档中有详细的说明。
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-7-20 00:29 , 耗时 0.112630 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表