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