摘要:为了将μC/OS-III移植到Cortex-M3处理器上,选用RealView MDK作为软件开发平台,针对Cortex-M3处理器特性编写了移植所需的C语言和汇编语言源代码,并验证了移植的正确性。移植后的μC/OS-III能够稳定运行于Cortex-M3处理器上。该移植对大部分Cortex-M3处理器具有通用性,对其他架构处理器的μC/OS-III移植具有参考作用。
关键词:μC/OS-III;嵌入式操作系统;ARM;Cortex-M3;移植
引言
μC/OS-III是一款基于优先级调度的抢占式实时内核,Micrium公司于2011年8月公开了μC/OS-III的源码,其源码遵循ANSIC标准,因而具有良好的移植性,相信其将会被移植到越来越多的处理器体系上。本文主要完成基于Cortex-M3处理器的μC/OS-III移植,通过本次移植,加深对嵌入式操作系统原理的理解。此外,在μC/OS-III移植成功的基础上进行嵌入式应用程序开发,可以把主要精力集中到应用程序上,而硬件资源交由μC/OS-III管理,从而使得嵌入式应用程序更易开发和维护,在嵌入式软硬件结构变得越来越复杂的今天具有现实意义。
1 μC/OS-III和Cortex-M3特点
相对以前的版本,μC/OS-III最大改进之处在于允许多个任务运行于同一优先级上,相同优先级的任务按时间片轮转调度,内核对象的数量不受限制,以及接近于零的中断禁用时钟周期。
Cortex-M3是ARM公司推出的基于ARMv7-M架构的内核,主要针对高性能、低成本和低功耗的嵌入式应用。Cortex-M3拥有固定的存储器映射,采用更高效的NVIC(Nested Vectored I差模电感nterrupt Controller)、更简单的堆栈以及更高性能的指令集,且NVIC(包括SysTick)的寄存器位置固定,极大地方便了μC/OS-III的移植及在基丁Cortex-M3内核的处理器之间的迁移。
2 移植
2.1 移植方案
本文移植μC/OS-III内核的版本为V3.02.00,其源代码下载地址见参考文献。选用意法半导体(ST)公司生产的基于Cortex-M3内核的S绕行电感器TM32F103RBT6微控制器作为硬件实验平台,而编译环境采用RealViewMDK V3.5。
Cortex-M3支持两种特权级别:特权级和用户级,μC/OS-III内核和用户代码都运行于特权级下。Cortex-M3还支持两个栈指针MSP和PSP,μC/OS-III内核和ISR(Interrupt Service Routine)使用MSP,μC/OS-III的任务则使用PSP。
首先针对Conex-M3处理器的特性编写与内核、CPU和BSP(Board Support Package)相关的源代码,然后创建若干个简单的用户任务,在具体的硬件平台上测试移植后的μC/OS-III。
2.2 内核相关
2.2.1 编写os_cpu.h
os_cpu.h头文件主要是对上下文切换函数和时间戳获取函数进行宏定义。μC/OS-III的上下文切换包括两种类型:任务级上下文切换OS_TASK_S高频电感器W()和中断级上下文切换OSIntCtxSw()。它们使用相同的代码置位ICSR.PENDSVSET以悬起PendSV异常,由PendSV的ISR“缓期执行”上下文切换。
OS_TS_GET()的作用是获取当前时间戳,若使能μC/OS-III的时间戳功能,则将OS_TS_GET()宏定义为CPU_TS_TmrRd(),否则简单地宏定义为0。
2.2.2 编写os_cpu_a.asm
在os_cpu_a.asm文件中需要用汇编指令实现OSStartHighRdy()函数和PendSV的ISR。OSStartHighRdy()函数被内核用于调度第一个最高优先级的就绪任务,以开始多任务运行环境,汇编代码实现如下:
Cortex-M3支持PendSV异常,而PendSV异常的典型应用场合就是上下文切换。得益于Cortex-M3的中断机制,μC/OS-III上下文切换只需保存和恢复R11~R4、PSP,而PSR、PC、LR、R12、R3~R0由硬件自动保存和恢复。PendSV的ISR汇编代码如下:
2.2.3 编写os_cpu_c.c
os_cpu_c.c文件包含了OSTaskStkInit()函数和若干钩子函数。OSTaskStkInit()函数的作用是在创建任务时初始化任务栈,并返回新的栈顶位置。μC/OS-III基于Cortex-M3的任务栈结构如图1所示。其中PSR、PC、LR、R1、R0五个寄存器应赋予正确的初值,而其他11个寄存器的初值无关重要。
[变压器]场效应管驱动变压器各位大神帮忙看下这个电路,纠结了一段时间了。
图中是左侧是单片机发的3.3v的21khz的方波,经过TLP521隔离到5v。
然后经过IRF630场效应管(这个是场效应管!),然后经过变压器出去。
怎样为自动化测试系统选择合适的直流电源 用于测试电路板、模块或设备的每个自动化测试系统都需要一个或多个直流电源,用于给待测设备提供电源并提供测试激励。在有些情况下,电源不仅要向待测设备提供电源,而且要通过模拟工作环境提供测试激励源。举例来
基于DSP+LabVIEW的特高压验电器设计方案 随着电力工业的发展和电网负荷需求的提高,我国正在大力发展特高压、长距离输电技术。高电压导致强电场、电气设备绝缘中的某些薄弱部分在强电场的作用下发生局部放电,同时当架空输电线路表面的电场强度超过空气分