📄 《电子设计应用》.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0046)http://www.edw.com.cn/show.aspx?id=2537&cid=61 -->
<HTML lang=gb2312
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>《电子设计应用》</TITLE>
<META http-equiv=content-type content=text/html;charset=gb2312><LINK
href="favicon.ico" type=image/x-icon rel=icon><LINK href="favicon.ico"
type=image/x-icon rel="shortcut icon"><LINK href="《电子设计应用》.files/style.css"
type=text/css rel=stylesheet>
<SCRIPT src="《电子设计应用》.files/flash.js" type=text/javascript></SCRIPT>
<SCRIPT language=javaScript src="《电子设计应用》.files/scroll.js"
type=text/javascript></SCRIPT>
<SCRIPT language=javaScript src="《电子设计应用》.files/imgResize.js"
type=text/javascript></SCRIPT>
<META content="MSHTML 6.00.2719.2200" name=GENERATOR></HEAD>
<BODY><SPAN id=printScript>
<SCRIPT language=javascript type=text/javascript>
<!--
function ContentSize(size)
{
var obj=document.all.BodyLabel;
obj.style.fontSize=size+"px";
}
-->
</SCRIPT>
</SPAN>
<SCRIPT language=javascript src="《电子设计应用》.files/print.js"
type=text/javascript></SCRIPT>
<SCRIPT src="《电子设计应用》.files/checkform.js"></SCRIPT>
<TABLE class=twidth cellSpacing=0 cellPadding=0 width=775 align=center
border=0><TBODY>
<TR>
<TD class=sitehead-left></TD>
<TD class=sitehead>
<TABLE width="100%" align=center>
<TBODY>
<TR>
<TD width=200><IMG height=52 src="《电子设计应用》.files/cover.jpg"
width=248> </TD>
<TD align=middle>
<DIV style="DISPLAY: none; Z-INDEX: -100"></DIV><A
href="http://www.pansino.com.cn/"><IMG height=60
src="《电子设计应用》.files/nilogo.gif" width=468 border=0></A></TD>
<TD style="LINE-HEIGHT: 150%" align=middle
width=100><BR><BR></TD></TR></TBODY></TABLE></TD>
<TD class=sitehead-right></TD></TR></TBODY></TABLE>
<TABLE class=twidth height=26 cellSpacing=0 cellPadding=0 width=750 align=center
border=0>
<TBODY>
<TR>
<TD vAlign=center align=middle width=39 bgColor=#12016d height=13><A
href="http://www.eaw.com.cn/"><FONT color=#ffffff size=2>首页</FONT></A></TD>
<TD vAlign=center align=middle width=56 bgColor=#12016d height=13><A
href="http://www.edw.com.cn/list.aspx?cid=72"><FONT color=#ffffff
size=2>业界新闻</FONT></A></TD>
<TD vAlign=center align=middle width=63 bgColor=#12016d height=13><A
href="http://www.edw.com.cn/list.aspx?cid=73"><FONT color=#ffffff
size=2>新品速递</FONT></A></TD>
<TD vAlign=center align=middle width=49 bgColor=#000066 height=13><A
href="http://www.edw.com.cn/list.aspx?cid=58"><FONT color=#ffffff
size=2>IC设计</FONT></A></TD>
<TD vAlign=center align=middle width=80 bgColor=#12016d height=13><FONT
size=2><A href="http://www.edw.com.cn/list.aspx?cid=59"><FONT
color=#ffffff>通信与计算机</FONT></A></FONT></TD>
<TD vAlign=center align=middle width=81 bgColor=#12016d height=13><A
href="http://www.edw.com.cn/list.aspx?cid=57"><FONT color=#ffffff
size=2>日经电子专栏</FONT></A></TD>
<TD vAlign=center align=middle width=67 bgColor=#12016d><A
href="http://www.edw.com.cn/list.aspx?cid=60" target=_blank><FONT
color=#ffffff size=2>自控与测量</FONT></A></TD>
<TD vAlign=center align=middle width=72 bgColor=#12016d height=13><A
href="http://www.edw.com.cn/list.aspx?cid=61" target=_blank><FONT
color=#ffffff size=2>嵌入式系统</FONT></A></TD>
<TD vAlign=center align=middle width=58 bgColor=#12016d height=13><FONT
size=2><A href="http://www.edw.com.cn/list.aspx?cid=62"><FONT
color=#ffffff>电源技术</FONT></A></FONT></TD>
<TD vAlign=center align=middle width=57 bgColor=#12016d height=13><A
href="http://www.edw.com.cn/list.aspx?cid=63"><FONT color=#ffffff
size=2>芯片应用</FONT></A></TD>
<TD vAlign=center align=middle width=61 bgColor=#12016d height=13><FONT
size=2><A href="mailto:chengyu@eaw.com.cn"><FONT
color=#ffffff>主编信箱</FONT></A></FONT></TD>
<TD vAlign=center align=middle width=67 bgColor=#12016d height=13><FONT
face=Verdana color=#ffffff size=2>ENGLISH</FONT></TD></TR></TBODY></TABLE>
<DIV id=printBody>
<TABLE class=twidth style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all"
cellSpacing=0 align=center>
<TBODY>
<TR>
<TD class=summary-title></TD></TR>
<TR>
<FORM name=form1 onsubmit="return checkform();" action=verify.jsp
method=post><INPUT type=hidden value=no name=close>
<TD bgColor=#000080 height=30><B><FONT color=#ffffff> 文章登录</FONT></B>
<FONT color=#ffffff>用户名:</FONT> <INPUT class=abc size=7 name=memberName>
<FONT color=#ffffff>密 码: <INPUT class=abc type=password
size=7 name=memberpass> </FONT> <SELECT name=loginselect> <OPTION
value=2 selected>文章</OPTION> <OPTION value=1>论坛</OPTION></SELECT>
<INPUT class=p1 type=image height=16 width=45 src="《电子设计应用》.files/dl.jpg"
border=0 name=login> <A href="http://news.edw.com.cn/memberreg.aspx"
target=_blank><FONT color=#ffffff>注 册</FONT></A> <A
onclick="return getpass()"
href="javascript:window.location.href='http://news.edw.com.cn/memberLostpass.aspx';"
target=_blank><FONT color=#ffffff>忘记密码</FONT></A> <A
href="http://www.edw.com.cn/memberModify.aspx"><FONT
color=#ffffff>修改信息</FONT></A> </TD></FORM></TR>
<TR>
<TD class=tdbg vAlign=top><BR>
<DIV align=center>
<H1 class=aTitle>uCOS-II在ARM上的移植</H1></DIV>
<TABLE width="97%">
<TBODY>
<TR>
<TD align=right>作者:<SPAN
id=AuthorLabel>清华大学智能技术与系统国家重点实验室,李明</SPAN><BR></TD></TR></TBODY></TABLE>
<DIV class=content id=BodyLabel
style="PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px">摘要:本文介绍了_C/OS-II概况和ARM体系结构中与移植工作相关的一些概念,并在此基础上分析了基于ARM的移植工作。<BR>关键词:uC/OS-II;ARM;移植
<P></P>
<P>引言<BR>随着技术的进步,嵌入式系统设计及其应用在近年中,对人类生活产生了巨大影响,并将继续改变人们未来的生活方式。研究嵌入式系统,一个必不可少的基础工作就是实现嵌入式操作系统在相关处理器平台上的移植。本文基于目前应用非常广泛的ARM处理器体系结构,对uC/OS-II嵌入式实时操作系统内核的移植工作做了分析和介绍,并给出了在国内一个开源项目
SkyEye 仿真器上的移植实例。</P>
<P><BR><IMG onmousewheel="return bbimg(this)" onclick=ImgClick(this)
src="《电子设计应用》.files/040614001.jpg" onload=ImgLoad(this) border=0
resized="0"></P>
<P><IMG onmousewheel="return bbimg(this)" onclick=ImgClick(this)
src="《电子设计应用》.files/040614002.jpg" onload=ImgLoad(this) border=0
resized="0"><BR>表2 CSPR的模式位</P>
<P><IMG onmousewheel="return bbimg(this)" onclick=ImgClick(this)
src="《电子设计应用》.files/040614003.jpg" onload=ImgLoad(this) border=0
resized="0"><BR>表3 ARM寄存器的命名和含义</P>
<P>uC/OS-II 概述<BR>uC/OS-II 是一个简单、高效的嵌入式实时操作系统内核,被应用到各种嵌入式系统中。目前,它支持
x86、ARM、PowerPC、MIPS
等众多体系结构,并有上百个商业应用实例,其稳定性和可用性是经过实践验证的。同时,它的源代码公开,可以从www.ucos-ii.com网站上获得全部源码以及其在各种体系结构平台上的移植范例。<BR>最新的
uC/OS-II 2.0
版以上的内核都具有可抢占的实时多任务调度功能,另外它还提供了许多系统服务,例如信号量、消息队列、邮箱、内存管理、时间函数等,这些功能可以根据不同的需求进行裁减。可以说,uC/OS-II是一个具备现代操作系统特点的RTOS,同时它结构清晰、注解详尽,具有良好的可扩展性和可移植性,被广泛地应用于各种架构的微处理器上。</P>
<P>ARM
的体系结构<BR>ARM是目前嵌入式领域由应用最广泛的RISC微处理器结构,以其低成本、低功耗、高性能等优点占据了嵌入式系统应用领域的领先地位。ARM系列的处理器当前有ARM7、ARM9、ARM9E、ARM10等多个产品,此外,作为ARM公司合作伙伴的Intel,也提供基于XScale微体系结构的相关处理器产品。所有的ARM处理器都共享ARM通用的基础体系结构,开发者在不同的ARM处理器上做操作系统移植时,将大大节省工作量,降低软件开发成本。<BR>任何操作系统的移植都有相当一部分工作和所用处理器的体系结构密切相关,因此在做具体的移植工作之前,需要了解该处理器的体系结构和相应的汇编语言。下面将简要介绍ARM的体系结构,主要侧重于与移植相关的一些概念。<BR>处理器模式(CPU
Mode):<BR>ARM处理器可以工作在7种模式下,如表1所示。</P>
<P>除usr模式以外的其他模式都叫做特权模式,除 usr 和 sys
外的其他5种模式叫做异常模式。在usr模式下,对系统资源的访问是受限制的,也无法主动地改变处理器模式。异常模式通常都和硬件相关,例如中断或执行未定义指令等。与移植相关的处理器模式有两种:svc态和irq态,分别指操作系统的保护模式和通用中断处理模式。这两种模式之间的转换可以通过硬件方式或软件方式。uC/OS-II内核在执行过程中,大部分时间工作在svc态,当有硬件中断,例如时钟中断到来时,CPU硬件自动完成从svc态进入irq态,在中断程序结束处,则需要通过编程的方法使得CPU从irq态恢复到svc态。<BR>程序状态寄存器(
PSR:Program status register )在任意一种处理器模式中,都使用同一个寄存器来标识当前处理器的工作模式,这个寄存器叫做
CPSR ( Current Program Status Register ),它的 [0--4] 位用来表示CPU Mode,表2
为CSPR的模式位每一种处理器异常模式,都有一个对应的SPSR ( Saved Program Status Register
)寄存器,用来保存进入异常模式前的CPSR。SPSR的作用就是当CPU从异常模式退出时,通过一条简单的汇编指令就能够恢复进入异常模式前的CPSR,该值保存在当前异常模式的SPSR中。例如:当从usr态进入中断irq
态时,原先的 CPSR_all 将被保存在当前的 SPSR_irq中,类似的异常模式下的 SPSR 还有
SPSR_fiq、SPSR_svc、SPSR_abt、SPSR_und。非异常模式的 usr和sys模式下没有 SPSR,只有
CPSR。不能显式地指定把 CPSR 保存到某个异常模式下的 SPSR,比如 SPSR_irq,而必须是变更到 irq
态之后CPU自动完成,不能硬性赋值,因为SPSR_irq在其他状态下不可见。<BR>1、 ARM寄存器:( register
)<BR>ARM处理器共有37个寄存器,其中31个是通用寄存器,包括一个程序计数器
PC。另外6个就是上面提到的程序状态寄存器。<BR>·通用寄存器:<BR>i.
R0-R7:与所有处理器模式无关的寄存器,可以用作任何用途。<BR>ii.
R8-R14:与处理器模式有关的寄存器,在不同的模式下,对应到不同的物理寄存器。其中
R13又叫做SP,一般用于堆栈指针。R14又叫做lr,一般用于保存返回地址。这两个寄存器在每种异常模式下都对应到不同的物理寄存器上,例如LR_irq、LR_svc、LR_fiq
等。<BR>iii. R15:又叫做程序计数器,即PC,所有的模式下都使用同一个PC。<BR>·状态寄存器:<BR>iv.
CPSR:当前程序状态寄存器,所有的模式下都使用同一个 CPSR。<BR>v.
SPSR:保存的程序状态寄存器,每种异常模式下都有自己的SPSR,一共有5种SPSR,即
SPSR_irq、SPSR_fiq、SPSR_svc、SPSR_abt、SPSR_und。usr和sys 态下没有 SPSR
。<BR>所有的ARM寄存器的命名和含义,可以用表3来说明,其中相同命名的都是同一个物理寄存器,不同命名的寄存器都对应不同的物理寄存器。<BR>表3
ARM寄存器的命名和含义</P>
<P>移植工作介绍<BR>实际上uC/OS-II可以简单地看作是一个多任务调度器,在这个任务调度器上完善地添加了与多任务操作系统相关的一些系统服务,如信号量、邮箱等。其90%的代码是用C语言写的,可以直接移植到有C语言编译器的处理器上。移植工作主要都集中在多任务切换的实现上,因为这部分代码用来保存和恢复CPU现场(即写/读相关寄存器),不能用C语言,只能使用汇编语言完成。<BR>uC/OS-II的全部源代码量大约是6000-7000行,共15个文件。将
uC/OS-II
移植到ARM处理器上,需要修改三个与ARM体系结构相关的文件,代码量大约是500行。以下分别介绍这三个文件的移植工作。<BR>OS_CPU.H
文件</P>
<P><IMG onmousewheel="return bbimg(this)" onclick=ImgClick(this)
src="《电子设计应用》.files/040614004.jpg" onload=ImgLoad(this) border=0
resized="0"><BR>图1 ARM体系结构的寄存器位置</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -