论文部分内容阅读
摘要:本文主要介绍了€%eC/OS-II嵌入式实时操作系统以及它在意法半导体STM32处理器上的移植。
关键词:嵌入式操作系统;€%eC/OS-II;Cortex-M3;STM32 ;ARM
一、前言
进入21世纪,随着计算机及电子技术的高速发展;嵌入式系统已深入到我们生活当中的方方面面。而嵌入式操作系统又是嵌入式系统的基石。它广泛的应用到了各种嵌入式设备当中。本文主要研究了€%eC/OS-II嵌入式操作系统在以最新ARM内核:Cortex-M3微处理器 STM32上的移植。
本文首先介绍了€%eC/OS-II嵌入式操作系统及其内核结构,随后介绍了€%eC/OS-II嵌入式操作系统在基于Cortex-M3内核的微处理器STM32上的移植。
二 、€%eC/OS-II简介
€%eC/OS-II是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。
€%eC/OS-II 的前身是€%eC/OS,最早出自于1992 年美国嵌入式系统专家Jean J.Labrosse在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把€%eC/OS 的源码发布在该杂志的B B S 上。
€%eC/OS 和€%eC/OS-II 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将€%eC/OS-II嵌人到开发的产品中。€%eC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2KB 。€%eC/OS-II 已经移植到了几乎所有知名的CPU 上。
三、€%eC/OS-II内核结构及组成
€%eC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。
1)核心部分(OSCore.c)
是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都在这里。
2) 任务处理部分(OSTask.c)
任务处理部分中的内容都是与任务的操作密切相关的。包 括任务的建立、删除、挂起、恢复等等。因为€%eC/OS-II是以任务为基本单位调度的,所以这部分内容也相当重要。
3) 时钟部分(OSTime.c)
€%eC/OS-II中的最小时钟单位是timetick(时钟节拍)。任务延时等操作是在这里完成的。
4) 任务同步和通信部分
为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。
5) 与CPU的接口部分
是指€%eC/OS-II针对所使用的CPU的移植部分。由于€%eC/OS-II是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体CPU的具体内容和要求作相应的移植。这部分内容由于牵涉到SP等系统指针,所以通常用汇编语言编写。
四、STM32介绍
STM32是意法半导体在2007年推出的以最新ARM V7CORTEX-ME为内核的高性能微处理器。STM32系列专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。
五、€%eC/OS-II在STM32上的移植
€%eC/OS-II在处理器上的移植只需修改三个文件。它们是OS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.C。
a)数据类型
经查RealView MDK编译器和STM32手册,SHORT类型为16位长,而INT为32位长度。这与CORTEX-M3内核数据类型一致;因而不需要更改此部分代码。同时状态寄存器和堆栈指针都为32位。
b)临界代码段
€%eC/OS-II为保证某段代码的完整执行,需要临时关闭中断,在这段代码执行完成后,再次开启中断。这样的代码段称为临界代码段。€%eC/OS-II通过OS_ENTER_CRITICAL()和OS_EX IT_CRITICAL()两件宏来实现中断的打开与关闭。
对于CORTEX-M3的内核来讲,它只支持向下增长的满栈。因而需要修改€%eC/OS-II中堆栈的增长方式为1
#DEFINEOS_TASK_GROWTH 1
c)与处理器相关的代码
OS_CPU_A.ASM中与处理器相关代码修改
(1)OS_CPU_SR_Save修改
MRSR0, PRIMASK
CPSID I
BXLR
(2)OS_CPU_SR_Restore修改
MSR PRIMASK, R0
BXLR
(3)OSStartHighRdy修改
LDR R0, =NVIC_SYSPRI14
LDR R1, =NVIC_PENDSV_PRI
STRBR1, [R0]
MOVS R0,#0;
MSR PSP, R0
LDR R0, OSRunning;OSRunning = TRUE
MOVSR1, #1
STRBR1, [R0]
LDR R0, NVIC_INT_CTRL; LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
CPSIE 1
(4)OSCtxSW修改
DRR0, =NVIC_INT_CTRL
STR R1, [R0]
BXLR
(5)osintTxSW修改
LDR R0, =NVIC_INT_CTRL
LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
BXLR
六、结束语
€%eC/OS-II实时操作系统在嵌入工式项目中得到了广泛应用,很好的掌握此操作系统可以使您的项目更快的推向市场;同时也能使您的项目更安全、可靠。
作者简介:张新英(1982.3-),女,河北承德人,本科学历,现任教于承德广播电视大学计算机系,助教;顾丽爱(1983.9-),女,河北承德人,本科学历,现任教于承德广播电视大学计算机系,助教。
关键词:嵌入式操作系统;€%eC/OS-II;Cortex-M3;STM32 ;ARM
一、前言
进入21世纪,随着计算机及电子技术的高速发展;嵌入式系统已深入到我们生活当中的方方面面。而嵌入式操作系统又是嵌入式系统的基石。它广泛的应用到了各种嵌入式设备当中。本文主要研究了€%eC/OS-II嵌入式操作系统在以最新ARM内核:Cortex-M3微处理器 STM32上的移植。
本文首先介绍了€%eC/OS-II嵌入式操作系统及其内核结构,随后介绍了€%eC/OS-II嵌入式操作系统在基于Cortex-M3内核的微处理器STM32上的移植。
二 、€%eC/OS-II简介
€%eC/OS-II是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。
€%eC/OS-II 的前身是€%eC/OS,最早出自于1992 年美国嵌入式系统专家Jean J.Labrosse在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把€%eC/OS 的源码发布在该杂志的B B S 上。
€%eC/OS 和€%eC/OS-II 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将€%eC/OS-II嵌人到开发的产品中。€%eC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2KB 。€%eC/OS-II 已经移植到了几乎所有知名的CPU 上。
三、€%eC/OS-II内核结构及组成
€%eC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。
1)核心部分(OSCore.c)
是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都在这里。
2) 任务处理部分(OSTask.c)
任务处理部分中的内容都是与任务的操作密切相关的。包 括任务的建立、删除、挂起、恢复等等。因为€%eC/OS-II是以任务为基本单位调度的,所以这部分内容也相当重要。
3) 时钟部分(OSTime.c)
€%eC/OS-II中的最小时钟单位是timetick(时钟节拍)。任务延时等操作是在这里完成的。
4) 任务同步和通信部分
为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。
5) 与CPU的接口部分
是指€%eC/OS-II针对所使用的CPU的移植部分。由于€%eC/OS-II是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体CPU的具体内容和要求作相应的移植。这部分内容由于牵涉到SP等系统指针,所以通常用汇编语言编写。
四、STM32介绍
STM32是意法半导体在2007年推出的以最新ARM V7CORTEX-ME为内核的高性能微处理器。STM32系列专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。
五、€%eC/OS-II在STM32上的移植
€%eC/OS-II在处理器上的移植只需修改三个文件。它们是OS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.C。
a)数据类型
经查RealView MDK编译器和STM32手册,SHORT类型为16位长,而INT为32位长度。这与CORTEX-M3内核数据类型一致;因而不需要更改此部分代码。同时状态寄存器和堆栈指针都为32位。
b)临界代码段
€%eC/OS-II为保证某段代码的完整执行,需要临时关闭中断,在这段代码执行完成后,再次开启中断。这样的代码段称为临界代码段。€%eC/OS-II通过OS_ENTER_CRITICAL()和OS_EX IT_CRITICAL()两件宏来实现中断的打开与关闭。
对于CORTEX-M3的内核来讲,它只支持向下增长的满栈。因而需要修改€%eC/OS-II中堆栈的增长方式为1
#DEFINEOS_TASK_GROWTH 1
c)与处理器相关的代码
OS_CPU_A.ASM中与处理器相关代码修改
(1)OS_CPU_SR_Save修改
MRSR0, PRIMASK
CPSID I
BXLR
(2)OS_CPU_SR_Restore修改
MSR PRIMASK, R0
BXLR
(3)OSStartHighRdy修改
LDR R0, =NVIC_SYSPRI14
LDR R1, =NVIC_PENDSV_PRI
STRBR1, [R0]
MOVS R0,#0;
MSR PSP, R0
LDR R0, OSRunning;OSRunning = TRUE
MOVSR1, #1
STRBR1, [R0]
LDR R0, NVIC_INT_CTRL; LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
CPSIE 1
(4)OSCtxSW修改
DRR0, =NVIC_INT_CTRL
STR R1, [R0]
BXLR
(5)osintTxSW修改
LDR R0, =NVIC_INT_CTRL
LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
BXLR
六、结束语
€%eC/OS-II实时操作系统在嵌入工式项目中得到了广泛应用,很好的掌握此操作系统可以使您的项目更快的推向市场;同时也能使您的项目更安全、可靠。
作者简介:张新英(1982.3-),女,河北承德人,本科学历,现任教于承德广播电视大学计算机系,助教;顾丽爱(1983.9-),女,河北承德人,本科学历,现任教于承德广播电视大学计算机系,助教。