最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

μCOS—Ⅲ在Cortex—M3处理器上的移植

IT圈 admin 31浏览 0评论

2024年3月23日发(作者:桓玉宇)

_薯t 。 囊 囊 

ac/os—III在Cortex—M3处理器上的移植 

李承创。陈跃斌,房晓丽,王兵 

(云南民族大学电气信息工程学院,昆明650031) 

摘要:为了将uC/OS—III移植到Cortex—M3处理器上,选用RealView MDK作为软件开发平台,针对Cortex—M3处理器 

特性编写了移植所需的C语言和汇编语言源代码,并验证了移植的正确性。移植后的uc/os—III能够稳定运行于Cortex 

M3处理器上。该移植对大部分Cortex—M3处理器具有通用性,对其他架构处理器的uc/os—III移植具有参考作用。 

关键词:uC/OS—III;嵌入式操作系统;ARM;Cortex—M3;移植 

中图分类号:TP316.2 文献标识码:A 

Porting uc/os_—III to Cortex——M3 Processor 

Li Chengchuang,Chen Yuebin,Fang Xiaoli,Wang bing 

(School of Electrical and Information Technology,Yunnan University of Nationalities,Kunming 650031,China) 

Abstract:In order tO port uC/OS—III to Cortex—M3 processor,it uses RealView MDK as the software development platform.With 

Cortex—M3 processor’s features,it writes the required C and assembly source code for porting,and verifies the correctness of the por— 

ting.After porting,uC/OS—III can run on Cortex—M3 processor stably.The porting is universal for most Cortex—M3 processor, 

which is a reference for uc/os—III porting on processers of other architectures. 

Key words: ̄C/OS—III;embedded operating system;ARM;Cortex—M3;porting 

应用。Cortex—M3拥有固定的存储器映射,采用更高效 

引 言 

“c/Os—III是一款基于优先级调度的抢占式实时内 

核,Micrium公司于2011年8月公开了uc/os—III的源 

的NVIC(Nested Vectored Interrupt Controller)、更简单 

的堆栈以及更高性能的指令集,且NVIc(包括SysTick) 

的寄存器位置固定,极大地方便了uC/OS—III的移植及 

在基于Cortex—M3内核的处理器之间的迁移。 

码,其源码遵循ANSI C标准,因而具有良好的移植性,相 

信其将会被移植到越来越多的处理器体系上。本文主要 

完成基于Cortex—M3处理器的uC/OS—III移植,通过本 

次移植,加深对嵌入式操作系统原理的理解。此外,在 

uc/os—III移植成功的基础上进行嵌入式应用程序开 

发,可以把主要精力集中到应用程序上,而硬件资源交由 

C/OS—III管理,从而使得嵌入式应用程序更易开发和 

维护,在嵌入式软硬件结构变得越来越复杂的今天具有现 

实意义。 

2 移 植 

2.1 移植方案 

本文移植 C/OS—III内核的版本为V3.02.O0,其源 

代码下载地址见参考文献E4]。选用意法半导体(ST)公 

司生产的基于Cortex—M3内核的STM32F103RBT6微 

控制器作为硬件实验平台,而编译环境采用RealView 

MDK V3.5。 

1 uc/os—Ill和Cortex—M3特点 

相对以前的版本,uC/OS—III最大改进之处在于允 

Cortex—M3支持两种特权级别:特权级和用户级, 

uC/OS—III内核和用户代码都运行于特权级下。Cortex 

M3还支持两个栈指针MSP和PSP,uC/OS—III内核和 

ISR(Interrupt Service Routine)使用MSP,uc/os—III的 

许多个任务运行于同一优先级上,相同优先级的任务按时 

问片轮转调度,内核对象的数量不受限制,以及接近于零 

的中断禁用时钟周期。 

Cortex—M3是ARM公司推出的基于ARMy7一M 

任务则使用PSP。 

首先针对Cortex—M3处理器的特性编写与内核、 

CPU和BSP(Board Support Package)相关的源代码,然后 

创建若干个简单的用户任务,在具体的硬件平台上测试移 

架构的内核,主要针对高性能、低成本和低功耗的嵌人式 

4 2 Microcontrollers&Embedded Systems 20 12年第4期 WwW.mesnet.corn.CI] 

植后的uC/OS—III。 

LDR 

LDR 

R0,一0SPrioCur ;OSPrioCur=OSPrioHighRdy 

2.2内核相关 

2.2.1 编写OS—cpu.h 

OS

R1,=OSPrioHighRdy 

LDRB R2,[R1] 

STRB R2,rRO] 

LDR R0。_二OSTCBCurPtr 

cpu.h头文件主要是对上下文切换函数和时间戳 

获取函数进行宏定义。 ̄c/os—III的上下文切换包括两 

种类型:任务级上下文切换OS—TASK—SW()和中断级上 

下文切换OSIntCtxSw()。它们使用相同的代码置位 

ICSR.PENDSVSET以悬起PendSV异常,由PendSV的 

ISR“缓期执行”上下文切换。 

OS

TS

:OSTCBCurPtr=OSTCBHighRdyPtr 

LDR R1.一OSTCBHighRdyPtr 

LDR 

STR 

R2。[R1] 

R2,rRO] 

LDR R0,ER2] ;R0:0sTcBHighRdyPtr->StkPtr 

;恢复R4~Rll 

;恢复PSP 

;Return Stack选择PSP 

;开中断 

;异常返回 

GET()的作用是获取当前时间戳,若使能 

LDMFDR0 1,{R4一R11) 

MSR 

0RR 

uC/OS—III的时间戳功能,则将OS-TS—GET()宏定义为 

CPU

TS

——

PSP,R0 

LR,#Ox04 

TmrRd(),否则简单地宏定义为0。 

CPSIE I 

BX LR 

2.2.2编写OS—cpu

a.asm 

在OS—cpu—a.asm文件中需要用汇编指令实现OS— 

StartHighRdy()函数和PendSV的ISR。OSStartHighRdy() 

函数被内核用于调度第一个最高优先级的就绪任务,以开 

始多任务运行环境,汇编代码实现如下: 

OSStartHighRdy 

LDR R0,一NVICSYSPRI1 4 

_

2.2.3编写OS~cpu

C.c 

OS

cpu—C.C文件包含了OSTaskStkInit()函数和若干 

钩子函数。OSTaskStklnit()函数的作用是在创建任务时 

初始化任务栈,并返回新的栈顶位置。 C/OS—III基于 

Cortex—M3的任务栈结构如图1所示。其中PSR、PC、 

LR、R1、R0五个寄存器应赋予正确的初值,而其他11个 

寄存器的初值无关重要。 

Low Memory 

LDR R1,-二PRI

LOWEST;设置PendSV优先级为最低 

STRB R1,[RO] 

M0V R0,#0 

MSR PSP。R0 

;设置PSP为0 

LDR R0一NVIC

ICSR ;挂起PendSV异常 

LDR R1。一PENDSVSET 

STR R1,ERO] 

CPSIE I ;确保中断使能 

Cortex—M3支持PendSV异常,而PendSV异常的典 

型应用场合就是上下文切换。得益于Cortex—M3的中断 

. 

机制,uc/os—III上下文切换只需保存和恢复R1l~R4、 

∽ 

Stack Growth 

PSP,而PSR、PC、LR、R12、R3~R0由硬件自动保存和恢 

复。PendSV的ISR汇编代码如下: 

PendSV

Handler 

R0。PSP 

;确保此标识符与中断向量表中的一致 

;上下文切换期间禁用中断 CPSID I 

MRS 

CBZ R0,SkipSaving;如果PSP等于0,则跳过现场保存 

;保存R4~R11 STMFD R0 1,{R4一R11) 

LDR R1,一OSTCBCurPtr;保存PSP 

LDR R2'[R1] 

High Memory 

STR 

SkipSaving 

R0,[R2] 

图1 ̄c/os—III基于Cortex—M3的任务栈结构 

;调用OSTaskSwHook() 

OS

PUSH fLR) 

LDR 

BLX 

cpu—c.c文件中的钩子函数是 ̄c/os—III为了扩 

R0.一OSTaskSwHook 

RO 

展用户功能而定义的。进行uc/os—III移植时至少需要 

定义OSTaskSwHook()、OSInitHook()、OSTimeTick— 

Hook()、0SIdleTaskHook()、OSStatTaskHook()、0STa— 

POP (LR) 

paper@mesnet.corn.cR(投稿专用) 2012年第4期 平 机 嵌入式彖碗应冈43 

skCreateHook()、OSTaskDelHook()、OSTaskReturnHook() 

OSIntExit() 

八个钩子函数。为了简单起见,本次移植不对钩子函数作 

功能扩展。 

} 

uc/os—III新增了时间戳功能,用于测量中断禁用 

2.3 OPU相关 

2.3.1 编写cpu.h 

cpu.h头文件主要包括对标准数据类型、字长、栈、临 

时长、代码执行时长和确定事件发生时间等。时间戳定时 

器可以由DWT(Data Watchpoint and Trace)的时钟周期 

计数器CYCCNT充当,该计数器是一个自由运行的32位 

递增计数器,溢出时自动重载为0,周而复始。时间戳定 

时器初始化和读取函数源代码实现分别如下: 

void CPUTS

TmrInit(void){ 

界区的相关定义。标准数据类型与具体的编译器相关,需 

要查阅相应的编译器手册。Cortex—M3字长是32位,则 

CPU

DATA和CPU

ADDR皆定义为CPU—INT32U类 

CRITICALMETH一 

DEM

CR l—TRCENA; 

//置位DEM—CR.TRCENA 

型。Cortex—M3使用满降序栈,栈增长方向应为从高地 

址到低地址。临界区方法选用CPU

DWT

CYCCNT一0u; 

DWT

CTRL l—CYCCNTENA;//使能CYCCNT计数器 

0El_STATUS_LOCAL。 

2.3.2编写cpu

a.asm 

CPUTSTMR CPU

TS

TmrRd(void){ 

return(CPU

TS

TMR)DWT

CYCCNT; 

cpu—a.asm文件的最主要部分是临界区函数的实现。 

根据所选用的临界区方法,中断使能函数CP SI Save() 

和中断禁用函数CPU—SR

Restore()代码实现如下: 

此外,本移植过程的BSP还涉及RCC、GPIO、NVIC 

和LED/LCD等硬件的初始化函数和驱动程序。 

CPUSRSave 

——

MRS R0,PRIMASK ;保存PRIMASK的值 

;关中断 

3测 试 

首先不加任何用户任务来测试移植好的“c/os—II1 

内核自身运行情况,待验证内核正常运行之后,编写 

TaskLedl、TaskLed2、TaskLed3、TaskProfile四个任务,其 

中前3个任务被赋予相同的优先级(本移植是假设使能了 

vC/OS—III的轮转调度功能),实现对3盏LED灯不停地 

闪烁;而TaskProfile的功能是在液晶屏上显示上下文切 

换次数。 

运行结果如图2所示。 

CPSID I 

BX 

——

LR 

CPU

SRRestore 

MSR 

BX 

PRIMASK,R0 ;恢复PRIMASK的值 

LR 

Cortex—M3的指令集提供了CLZ指令,则可选地使 

用汇编指令实现CPU—CntLeadZeros()函数,以加快vC/ 

OS—III调度器查找最高优先级的就绪任务的速度,CPU— 

CntLeadZeros()函数汇编代码实现如下: 

CPU

CntLeadZer0s 

R0,R0 

I R 

图中3盏LED灯不停地闪 

烁,验证了uc/os—III的 

CI Z 

BX 

相同优先级任务轮转调度 

的特征;LCD上显示Ctx— 

2.4 BSP 

Cortex—M3内核包含了一个SysTiek定时器,可以 

SwCtr的值一直在增加,指 

示不断发生上下文切换。 

系统连续稳定运行5个小 

用来给vc/os—III提供系统时钟节拍。SysTiek初始化 

和ISR的源代码实现分别如下: 

void SysTick

Init(CPU

INT32U cnts){ 

时以上没出现任何问题,可 

见本移植是成功的。 

图2 运行结果 

SysTick一>LOAD=cnts; 

SysTick一>VAL一0; 

//重载值寄存器 

//当前计数值 

SysTick一>CTRL】=0x00000007;//控制寄存器 

} 

void SysTick

Handler(void)( 

结 语 

本文主要论述了基于Cortex—M3内核处理器上uc/ 

CPU

SR

ALLOC(); 

0s—III的移植过程并给出关键代码,移植后的uc/os— 

III能够稳定运行于STM32F103RBT6处理器上。本移植 

CPU

CRITICAL

ENTER(); 

OSlntEnter(); 

CPU

CRITICAL

EXIT(); 

能通用于大部分Cortex—M3内核的处理器,并对于将 

“c/os—III移植到其他体系结构的处理器上具有参考 

OSTimeTick(); 

价值。鬣 D 

44 Microcontrollers&Embedded Systems 20 12年第4期 WWW.mesnet.com.cn 

腿 

速率快,广泛应用于移动设备。本手持终端采用了SD 

卡存储汉字字库、界面图片和射频卡中读取的数据。SD 

卡通过SPI总线与STM32F103VET6进行通信,经实验 

证明每秒可以传输2 MB以上的数据,可以满足手持终 

结 语 

本文详细介绍了基于STM32F103VET6的13. 

56MHz RFID手持终端的硬件设计方法。该读卡器具有 

处理速度快、功耗低、人机交互友好、与上位机通信方便等 

特点,适用于多种需要移动应用的场合。尤其适用于物流 

行业,具有广阔的应用前景。_墨 

参考文献 

[1]刘军.例说STM32[M]-北京:北京航空航天大学出版社, 

2O11:11—18. 

端对数据传输速率的要求。另外,由于SD卡可以很方 

便地从手持终端中取出,也可以使用上位机的通用读卡 

器对SD卡进行读写,实现手持终端和上位机的数据 

交换。 

2.5数据通信部分的设计 

RFID手持终端使用STM32F103VET6芯片内部集 

成的USB总线与上位机完成有线通信。USB总线支持即 

插即用和热插拔,使用方便。同时,USB 2.0全速总线支 

[23 STMicroeleetronies.High—density performance line ARM— 

based 32一bit MCU with 256 to 512KB Flash,USB,CAN, 

持480 Mbps的传输速率,可以快速将手持终端中的信息 

传输到上位机。为了满足手持终端的移动使用需求,采用 

了Simcom公司生产的GPRS模块SIM300,它的工作频 

11 timers,3 ADCs,13 communication interfaces[EB/OL]. 

[2o1I一11—25、.http:{}w .st.com/internet/mcu/prod— 

uct/164491.jsp. 

[3]NXP Semiconductors.Multiple protocol contactless reader IC 

(MIFARE/I—CODE1)(v.3.5)[EB/OL].[2011—11~253. 

http://www.nxp.corn/documents/data

sheet/CLRC632.pdf. 

率为GSM/GPRS 900/1800 MHz,可以在低功耗的条件 

下,完成手持终端数据的无线传输。在使用时,通过 

STM32F103VET6的USART串口与SIM300模块连接, 

通过AT指令实现网络连接、数据发送等功能。 

[4]Philips Semiconductors.AN Micore Reader IC Family;Di 

rectly Matched Antenna Design(v.2.05)[EB/OL].[2011— 

11—25].http://www.nxp.com/documents/application— 

3 系统测试 

设计了RFID手持终端的PCB板,其主板大小约为 

note/AN077925.pdf. 

r5]NXP Semiconductors.Directly matched Antenna Excel cal— 

culation(v 1.O)[EB/OL].[2011—11—25].http://www. 

nxp.com/documents/application

note/149l10.zip. 

16 cm×9 CITI,可以满足手持终端的便携需求。使用 

STM32F1o3VET6自带的ISP下载工具通过USART串 

[6]李新春,于永鑫.移动式13.56MHz RFID读卡器的设计EJ]. 

计算机系统应用,2011,20(8):229—232. 

口将程序下载后,使用本RFID手持终端对符合ISO/IEC 

】4443和ISO/IEC 15693标准的射频标签进行读写,操作 

距离均不小于8 cin,读卡及显示速度均满足使用需求。 

睬博《颈誊研鬻誊),研究雾街曲嵌入或技拳、射频识刺技术}翊开华 

t教授≥,研毙方向灞 射额识男Il理论与疫用≥数字馆号处理理论与应 

将读卡得到的数据存储到SD卡中,通过USB总线或 

GPRS模块发送到上位机,上位机可以接收到卡号、扇区、 

用 数字蛾藏 统技豢 

《责终编辑;灏避螂蛾稿日期:201I一1l一29) 

数据等信息以便进行进一步的数据处理。 

皿 参考文献 

[5]Joseph Yiu.The definitive guide to the ARM Cortex—M3 

[M].2th ed.Burlington:Newnes,2010:127 129. 

[1]Matt Gordon.Micrium makes,aC/OS—III source available 

[EB/OI ].[201 1—1 1].http://micrium.corn/page/press— 

room/news/id:65. 

[63方安平,蔡俊宇.Cortex—M3的异常处理机制研究[j].单片 

机与嵌入式系统应用,2009(2):15一l6. 

[2]Brian Nagel,Micrium.Advantages of the Cortex~M3[J]. 

In{ormation Quarterly,2008,7(4):27—32. 

[7]邵贝贝.浅谈uc/os任务调度算法的硬件实现[J].单片机 

与嵌入式系统应用,2010(9):5—7. 

[3]ARM中国.针对ARM Cortex—M3平台的代码移植[J]. 

Information Quarterly,2007(6):44—46. 

李承创《硕士研 生)’主要研究 向灏畿入戴搡谁系统。 

责任鞴麟 耪逡娜 收稿霹期:2011—1l一15) 

r4]Micrium.Download C/OS source code[EB/OL].[201 1—10 

23].http://micrium.corn/page/downloads/source—code. 

48 Miorocontrollers&Embedded Systems 2012年第4期 wwW.mesnet.com.cn 

2024年3月23日发(作者:桓玉宇)

_薯t 。 囊 囊 

ac/os—III在Cortex—M3处理器上的移植 

李承创。陈跃斌,房晓丽,王兵 

(云南民族大学电气信息工程学院,昆明650031) 

摘要:为了将uC/OS—III移植到Cortex—M3处理器上,选用RealView MDK作为软件开发平台,针对Cortex—M3处理器 

特性编写了移植所需的C语言和汇编语言源代码,并验证了移植的正确性。移植后的uc/os—III能够稳定运行于Cortex 

M3处理器上。该移植对大部分Cortex—M3处理器具有通用性,对其他架构处理器的uc/os—III移植具有参考作用。 

关键词:uC/OS—III;嵌入式操作系统;ARM;Cortex—M3;移植 

中图分类号:TP316.2 文献标识码:A 

Porting uc/os_—III to Cortex——M3 Processor 

Li Chengchuang,Chen Yuebin,Fang Xiaoli,Wang bing 

(School of Electrical and Information Technology,Yunnan University of Nationalities,Kunming 650031,China) 

Abstract:In order tO port uC/OS—III to Cortex—M3 processor,it uses RealView MDK as the software development platform.With 

Cortex—M3 processor’s features,it writes the required C and assembly source code for porting,and verifies the correctness of the por— 

ting.After porting,uC/OS—III can run on Cortex—M3 processor stably.The porting is universal for most Cortex—M3 processor, 

which is a reference for uc/os—III porting on processers of other architectures. 

Key words: ̄C/OS—III;embedded operating system;ARM;Cortex—M3;porting 

应用。Cortex—M3拥有固定的存储器映射,采用更高效 

引 言 

“c/Os—III是一款基于优先级调度的抢占式实时内 

核,Micrium公司于2011年8月公开了uc/os—III的源 

的NVIC(Nested Vectored Interrupt Controller)、更简单 

的堆栈以及更高性能的指令集,且NVIc(包括SysTick) 

的寄存器位置固定,极大地方便了uC/OS—III的移植及 

在基于Cortex—M3内核的处理器之间的迁移。 

码,其源码遵循ANSI C标准,因而具有良好的移植性,相 

信其将会被移植到越来越多的处理器体系上。本文主要 

完成基于Cortex—M3处理器的uC/OS—III移植,通过本 

次移植,加深对嵌入式操作系统原理的理解。此外,在 

uc/os—III移植成功的基础上进行嵌入式应用程序开 

发,可以把主要精力集中到应用程序上,而硬件资源交由 

C/OS—III管理,从而使得嵌入式应用程序更易开发和 

维护,在嵌入式软硬件结构变得越来越复杂的今天具有现 

实意义。 

2 移 植 

2.1 移植方案 

本文移植 C/OS—III内核的版本为V3.02.O0,其源 

代码下载地址见参考文献E4]。选用意法半导体(ST)公 

司生产的基于Cortex—M3内核的STM32F103RBT6微 

控制器作为硬件实验平台,而编译环境采用RealView 

MDK V3.5。 

1 uc/os—Ill和Cortex—M3特点 

相对以前的版本,uC/OS—III最大改进之处在于允 

Cortex—M3支持两种特权级别:特权级和用户级, 

uC/OS—III内核和用户代码都运行于特权级下。Cortex 

M3还支持两个栈指针MSP和PSP,uC/OS—III内核和 

ISR(Interrupt Service Routine)使用MSP,uc/os—III的 

许多个任务运行于同一优先级上,相同优先级的任务按时 

问片轮转调度,内核对象的数量不受限制,以及接近于零 

的中断禁用时钟周期。 

Cortex—M3是ARM公司推出的基于ARMy7一M 

任务则使用PSP。 

首先针对Cortex—M3处理器的特性编写与内核、 

CPU和BSP(Board Support Package)相关的源代码,然后 

创建若干个简单的用户任务,在具体的硬件平台上测试移 

架构的内核,主要针对高性能、低成本和低功耗的嵌人式 

4 2 Microcontrollers&Embedded Systems 20 12年第4期 WwW.mesnet.corn.CI] 

植后的uC/OS—III。 

LDR 

LDR 

R0,一0SPrioCur ;OSPrioCur=OSPrioHighRdy 

2.2内核相关 

2.2.1 编写OS—cpu.h 

OS

R1,=OSPrioHighRdy 

LDRB R2,[R1] 

STRB R2,rRO] 

LDR R0。_二OSTCBCurPtr 

cpu.h头文件主要是对上下文切换函数和时间戳 

获取函数进行宏定义。 ̄c/os—III的上下文切换包括两 

种类型:任务级上下文切换OS—TASK—SW()和中断级上 

下文切换OSIntCtxSw()。它们使用相同的代码置位 

ICSR.PENDSVSET以悬起PendSV异常,由PendSV的 

ISR“缓期执行”上下文切换。 

OS

TS

:OSTCBCurPtr=OSTCBHighRdyPtr 

LDR R1.一OSTCBHighRdyPtr 

LDR 

STR 

R2。[R1] 

R2,rRO] 

LDR R0,ER2] ;R0:0sTcBHighRdyPtr->StkPtr 

;恢复R4~Rll 

;恢复PSP 

;Return Stack选择PSP 

;开中断 

;异常返回 

GET()的作用是获取当前时间戳,若使能 

LDMFDR0 1,{R4一R11) 

MSR 

0RR 

uC/OS—III的时间戳功能,则将OS-TS—GET()宏定义为 

CPU

TS

——

PSP,R0 

LR,#Ox04 

TmrRd(),否则简单地宏定义为0。 

CPSIE I 

BX LR 

2.2.2编写OS—cpu

a.asm 

在OS—cpu—a.asm文件中需要用汇编指令实现OS— 

StartHighRdy()函数和PendSV的ISR。OSStartHighRdy() 

函数被内核用于调度第一个最高优先级的就绪任务,以开 

始多任务运行环境,汇编代码实现如下: 

OSStartHighRdy 

LDR R0,一NVICSYSPRI1 4 

_

2.2.3编写OS~cpu

C.c 

OS

cpu—C.C文件包含了OSTaskStkInit()函数和若干 

钩子函数。OSTaskStklnit()函数的作用是在创建任务时 

初始化任务栈,并返回新的栈顶位置。 C/OS—III基于 

Cortex—M3的任务栈结构如图1所示。其中PSR、PC、 

LR、R1、R0五个寄存器应赋予正确的初值,而其他11个 

寄存器的初值无关重要。 

Low Memory 

LDR R1,-二PRI

LOWEST;设置PendSV优先级为最低 

STRB R1,[RO] 

M0V R0,#0 

MSR PSP。R0 

;设置PSP为0 

LDR R0一NVIC

ICSR ;挂起PendSV异常 

LDR R1。一PENDSVSET 

STR R1,ERO] 

CPSIE I ;确保中断使能 

Cortex—M3支持PendSV异常,而PendSV异常的典 

型应用场合就是上下文切换。得益于Cortex—M3的中断 

. 

机制,uc/os—III上下文切换只需保存和恢复R1l~R4、 

∽ 

Stack Growth 

PSP,而PSR、PC、LR、R12、R3~R0由硬件自动保存和恢 

复。PendSV的ISR汇编代码如下: 

PendSV

Handler 

R0。PSP 

;确保此标识符与中断向量表中的一致 

;上下文切换期间禁用中断 CPSID I 

MRS 

CBZ R0,SkipSaving;如果PSP等于0,则跳过现场保存 

;保存R4~R11 STMFD R0 1,{R4一R11) 

LDR R1,一OSTCBCurPtr;保存PSP 

LDR R2'[R1] 

High Memory 

STR 

SkipSaving 

R0,[R2] 

图1 ̄c/os—III基于Cortex—M3的任务栈结构 

;调用OSTaskSwHook() 

OS

PUSH fLR) 

LDR 

BLX 

cpu—c.c文件中的钩子函数是 ̄c/os—III为了扩 

R0.一OSTaskSwHook 

RO 

展用户功能而定义的。进行uc/os—III移植时至少需要 

定义OSTaskSwHook()、OSInitHook()、OSTimeTick— 

Hook()、0SIdleTaskHook()、OSStatTaskHook()、0STa— 

POP (LR) 

paper@mesnet.corn.cR(投稿专用) 2012年第4期 平 机 嵌入式彖碗应冈43 

skCreateHook()、OSTaskDelHook()、OSTaskReturnHook() 

OSIntExit() 

八个钩子函数。为了简单起见,本次移植不对钩子函数作 

功能扩展。 

} 

uc/os—III新增了时间戳功能,用于测量中断禁用 

2.3 OPU相关 

2.3.1 编写cpu.h 

cpu.h头文件主要包括对标准数据类型、字长、栈、临 

时长、代码执行时长和确定事件发生时间等。时间戳定时 

器可以由DWT(Data Watchpoint and Trace)的时钟周期 

计数器CYCCNT充当,该计数器是一个自由运行的32位 

递增计数器,溢出时自动重载为0,周而复始。时间戳定 

时器初始化和读取函数源代码实现分别如下: 

void CPUTS

TmrInit(void){ 

界区的相关定义。标准数据类型与具体的编译器相关,需 

要查阅相应的编译器手册。Cortex—M3字长是32位,则 

CPU

DATA和CPU

ADDR皆定义为CPU—INT32U类 

CRITICALMETH一 

DEM

CR l—TRCENA; 

//置位DEM—CR.TRCENA 

型。Cortex—M3使用满降序栈,栈增长方向应为从高地 

址到低地址。临界区方法选用CPU

DWT

CYCCNT一0u; 

DWT

CTRL l—CYCCNTENA;//使能CYCCNT计数器 

0El_STATUS_LOCAL。 

2.3.2编写cpu

a.asm 

CPUTSTMR CPU

TS

TmrRd(void){ 

return(CPU

TS

TMR)DWT

CYCCNT; 

cpu—a.asm文件的最主要部分是临界区函数的实现。 

根据所选用的临界区方法,中断使能函数CP SI Save() 

和中断禁用函数CPU—SR

Restore()代码实现如下: 

此外,本移植过程的BSP还涉及RCC、GPIO、NVIC 

和LED/LCD等硬件的初始化函数和驱动程序。 

CPUSRSave 

——

MRS R0,PRIMASK ;保存PRIMASK的值 

;关中断 

3测 试 

首先不加任何用户任务来测试移植好的“c/os—II1 

内核自身运行情况,待验证内核正常运行之后,编写 

TaskLedl、TaskLed2、TaskLed3、TaskProfile四个任务,其 

中前3个任务被赋予相同的优先级(本移植是假设使能了 

vC/OS—III的轮转调度功能),实现对3盏LED灯不停地 

闪烁;而TaskProfile的功能是在液晶屏上显示上下文切 

换次数。 

运行结果如图2所示。 

CPSID I 

BX 

——

LR 

CPU

SRRestore 

MSR 

BX 

PRIMASK,R0 ;恢复PRIMASK的值 

LR 

Cortex—M3的指令集提供了CLZ指令,则可选地使 

用汇编指令实现CPU—CntLeadZeros()函数,以加快vC/ 

OS—III调度器查找最高优先级的就绪任务的速度,CPU— 

CntLeadZeros()函数汇编代码实现如下: 

CPU

CntLeadZer0s 

R0,R0 

I R 

图中3盏LED灯不停地闪 

烁,验证了uc/os—III的 

CI Z 

BX 

相同优先级任务轮转调度 

的特征;LCD上显示Ctx— 

2.4 BSP 

Cortex—M3内核包含了一个SysTiek定时器,可以 

SwCtr的值一直在增加,指 

示不断发生上下文切换。 

系统连续稳定运行5个小 

用来给vc/os—III提供系统时钟节拍。SysTiek初始化 

和ISR的源代码实现分别如下: 

void SysTick

Init(CPU

INT32U cnts){ 

时以上没出现任何问题,可 

见本移植是成功的。 

图2 运行结果 

SysTick一>LOAD=cnts; 

SysTick一>VAL一0; 

//重载值寄存器 

//当前计数值 

SysTick一>CTRL】=0x00000007;//控制寄存器 

} 

void SysTick

Handler(void)( 

结 语 

本文主要论述了基于Cortex—M3内核处理器上uc/ 

CPU

SR

ALLOC(); 

0s—III的移植过程并给出关键代码,移植后的uc/os— 

III能够稳定运行于STM32F103RBT6处理器上。本移植 

CPU

CRITICAL

ENTER(); 

OSlntEnter(); 

CPU

CRITICAL

EXIT(); 

能通用于大部分Cortex—M3内核的处理器,并对于将 

“c/os—III移植到其他体系结构的处理器上具有参考 

OSTimeTick(); 

价值。鬣 D 

44 Microcontrollers&Embedded Systems 20 12年第4期 WWW.mesnet.com.cn 

腿 

速率快,广泛应用于移动设备。本手持终端采用了SD 

卡存储汉字字库、界面图片和射频卡中读取的数据。SD 

卡通过SPI总线与STM32F103VET6进行通信,经实验 

证明每秒可以传输2 MB以上的数据,可以满足手持终 

结 语 

本文详细介绍了基于STM32F103VET6的13. 

56MHz RFID手持终端的硬件设计方法。该读卡器具有 

处理速度快、功耗低、人机交互友好、与上位机通信方便等 

特点,适用于多种需要移动应用的场合。尤其适用于物流 

行业,具有广阔的应用前景。_墨 

参考文献 

[1]刘军.例说STM32[M]-北京:北京航空航天大学出版社, 

2O11:11—18. 

端对数据传输速率的要求。另外,由于SD卡可以很方 

便地从手持终端中取出,也可以使用上位机的通用读卡 

器对SD卡进行读写,实现手持终端和上位机的数据 

交换。 

2.5数据通信部分的设计 

RFID手持终端使用STM32F103VET6芯片内部集 

成的USB总线与上位机完成有线通信。USB总线支持即 

插即用和热插拔,使用方便。同时,USB 2.0全速总线支 

[23 STMicroeleetronies.High—density performance line ARM— 

based 32一bit MCU with 256 to 512KB Flash,USB,CAN, 

持480 Mbps的传输速率,可以快速将手持终端中的信息 

传输到上位机。为了满足手持终端的移动使用需求,采用 

了Simcom公司生产的GPRS模块SIM300,它的工作频 

11 timers,3 ADCs,13 communication interfaces[EB/OL]. 

[2o1I一11—25、.http:{}w .st.com/internet/mcu/prod— 

uct/164491.jsp. 

[3]NXP Semiconductors.Multiple protocol contactless reader IC 

(MIFARE/I—CODE1)(v.3.5)[EB/OL].[2011—11~253. 

http://www.nxp.corn/documents/data

sheet/CLRC632.pdf. 

率为GSM/GPRS 900/1800 MHz,可以在低功耗的条件 

下,完成手持终端数据的无线传输。在使用时,通过 

STM32F103VET6的USART串口与SIM300模块连接, 

通过AT指令实现网络连接、数据发送等功能。 

[4]Philips Semiconductors.AN Micore Reader IC Family;Di 

rectly Matched Antenna Design(v.2.05)[EB/OL].[2011— 

11—25].http://www.nxp.com/documents/application— 

3 系统测试 

设计了RFID手持终端的PCB板,其主板大小约为 

note/AN077925.pdf. 

r5]NXP Semiconductors.Directly matched Antenna Excel cal— 

culation(v 1.O)[EB/OL].[2011—11—25].http://www. 

nxp.com/documents/application

note/149l10.zip. 

16 cm×9 CITI,可以满足手持终端的便携需求。使用 

STM32F1o3VET6自带的ISP下载工具通过USART串 

[6]李新春,于永鑫.移动式13.56MHz RFID读卡器的设计EJ]. 

计算机系统应用,2011,20(8):229—232. 

口将程序下载后,使用本RFID手持终端对符合ISO/IEC 

】4443和ISO/IEC 15693标准的射频标签进行读写,操作 

距离均不小于8 cin,读卡及显示速度均满足使用需求。 

睬博《颈誊研鬻誊),研究雾街曲嵌入或技拳、射频识刺技术}翊开华 

t教授≥,研毙方向灞 射额识男Il理论与疫用≥数字馆号处理理论与应 

将读卡得到的数据存储到SD卡中,通过USB总线或 

GPRS模块发送到上位机,上位机可以接收到卡号、扇区、 

用 数字蛾藏 统技豢 

《责终编辑;灏避螂蛾稿日期:201I一1l一29) 

数据等信息以便进行进一步的数据处理。 

皿 参考文献 

[5]Joseph Yiu.The definitive guide to the ARM Cortex—M3 

[M].2th ed.Burlington:Newnes,2010:127 129. 

[1]Matt Gordon.Micrium makes,aC/OS—III source available 

[EB/OI ].[201 1—1 1].http://micrium.corn/page/press— 

room/news/id:65. 

[63方安平,蔡俊宇.Cortex—M3的异常处理机制研究[j].单片 

机与嵌入式系统应用,2009(2):15一l6. 

[2]Brian Nagel,Micrium.Advantages of the Cortex~M3[J]. 

In{ormation Quarterly,2008,7(4):27—32. 

[7]邵贝贝.浅谈uc/os任务调度算法的硬件实现[J].单片机 

与嵌入式系统应用,2010(9):5—7. 

[3]ARM中国.针对ARM Cortex—M3平台的代码移植[J]. 

Information Quarterly,2007(6):44—46. 

李承创《硕士研 生)’主要研究 向灏畿入戴搡谁系统。 

责任鞴麟 耪逡娜 收稿霹期:2011—1l一15) 

r4]Micrium.Download C/OS source code[EB/OL].[201 1—10 

23].http://micrium.corn/page/downloads/source—code. 

48 Miorocontrollers&Embedded Systems 2012年第4期 wwW.mesnet.com.cn 

发布评论

评论列表 (0)

  1. 暂无评论