⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 21ic μc-os-ii在80196kc单片机上的移植.htm

📁 网上收集的关于嵌入式开发的文档。拿来共享!
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0061)http://www.21ic.com/new_info/news/files/news/200426125757.asp -->
<HTML><HEAD><TITLE>21IC: μC/OS-II在80196KC单片机上的移植</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TD {
	FONT-SIZE: 12px
}
INPUT {
	FONT-SIZE: 12px; font-fammily: verdana,宋体
}
A:link {
	FONT-SIZE: 12px; COLOR: #0000ff; LINE-HEIGHT: 16px; TEXT-DECORATION: underline
}
A:visited {
	FONT-SIZE: 12px; COLOR: #660066; LINE-HEIGHT: 16px; TEXT-DECORATION: underline
}
A:hover {
	FONT-SIZE: 12px; COLOR: #ff0000; TEXT-DECORATION: underline
}
.unnamed1 {
	FONT-SIZE: 12px; FONT-FAMILY: "Arial", "Helvetica", "sans-serif"
}
.white {
	FONT-SIZE: 12px; COLOR: #ffffff; LINE-HEIGHT: 16px
}
.b:link {
	FONT-SIZE: 12px; COLOR: #3366cc; LINE-HEIGHT: 18px; TEXT-DECORATION: underline
}
.b:visited {
	FONT-SIZE: 12px; COLOR: #813f1b; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
.b:hover {
	FONT-SIZE: 12px; COLOR: #ffa037; LINE-HEIGHT: 18px; TEXT-DECORATION: underline
}
.148xg {
	FONT-SIZE: 14px; COLOR: #0000ff; LINE-HEIGHT: 14pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: underline
}
.128dt {
	FONT-SIZE: 14px; COLOR: #9999cc; LINE-HEIGHT: 14pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.heigh150 {
	LINE-HEIGHT: 150%
}
</STYLE>

<META content="MSHTML 6.00.2734.1600" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff leftMargin=0 topMargin=5>
<TABLE cellSpacing=0 cellPadding=0 width=768 align=center border=0>
  <TBODY>
  <TR>
    <TD align=middle width=168 height=80><IMG 
      src="21IC μC-OS-II在80196KC单片机上的移植.files/21ic.gif"></TD>
    <TD width=472>
      <SCRIPT language=javascript 
      src="21IC μC-OS-II在80196KC单片机上的移植.files/ads.htm"></SCRIPT>
    </TD>
    <TD height=80>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD class=b12 align=middle height=30><FONT 
            face="Arial, Helvetica, sans-serif" color=#000000>
            <SCRIPT language=JavaScript 
            src="21IC μC-OS-II在80196KC单片机上的移植.files/date.js"></SCRIPT>
            </FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=1 width=768 align=center border=0>
  <TBODY>
  <TR>
    <TD>
      <TABLE cellSpacing=0 cellPadding=3 width=766 align=left border=0>
        <TBODY>
        <TR bgColor=#d8d6ba>
          <TD width=3 height=20></TD>
          <DIV id=Position></DIV>
          <TD width=378>
            <FORM name=email 
            action=http://www.21icsearch.com/buzi/mail2/chkemail.asp method=post 
            target=_blank><B>电子工程周刊:</B> <INPUT class=main 
            style="BORDER-RIGHT: #0097cf 1px solid; BORDER-TOP: #0097cf 1px solid; BORDER-LEFT: #0097cf 1px solid; BORDER-BOTTOM: #0097cf 1px solid; BACKGROUND-COLOR: #ffffff" 
            maxLength=255 size=30 value=输入您的Email name=email> <INPUT class=jbutton type=submit value=订阅> </TD></FORM>
          <DIV></DIV>
          <DIV id=Time></DIV>
          <DIV id=Image></DIV>
          <DIV id=Title></DIV>
          <TD width=418>
            <MARQUEE onmouseover=this.scrollDelay=99000 
            onmouseout=this.scrollDelay=80 scrollAmount=2 scrollDelay=80 
            width="80%"><FONT color=#cc0000><IMG height=12 
            src="21IC μC-OS-II在80196KC单片机上的移植.files/xilan_arrow.gif" 
            width=16>每周自动接收行业新闻,技术资料,设计文章</FONT></MARQUEE></TD>
          <DIV></DIV>
          <TD width=9></TD></TR></TBODY></TABLE>
      <DIV></DIV>
      <DIV id=Time></DIV>
      <DIV id=Image></DIV>
      <DIV id=Title><TD< td></DIV></TD></TR></TBODY></TABLE></TD></TR></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=0 width=768 align=center border=0>
  <TBODY>
  <TR>
    <TD vAlign=top width=617 height=2>
      <TABLE cellSpacing=0 cellPadding=0 width=583 align=center border=0>
        <TBODY>
        <TR>
          <TD align=middle height=31><FONT size=4><B>μC/OS-II在80196KC单片机上的移植 
            </B></FONT></TD></TR>
        <TR>
          <TD align=middle height=15>文章作者:西安交通大学电器教研室 王 巍 南京因泰莱电器股份有限公司 刘 
            唯<BR>文章类型:设计应用 文章加入时间:2004年2月6日12:57</TD></TR>
        <TR>
          <TD align=right><FONT color=#cc0000>文章出处:国外电子元器件</FONT> </TD></TR>
        <TR>
          <TD height=15>
            <HR width="100%" noShade SIZE=1>
          </TD></TR>
        <TR>
          <TD height=15>
            <TABLE cellSpacing=0 cellPadding=0 align=center border=0>
              <TBODY>
              <TR>
                <TD></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width=530 align=center border=0>
        <TBODY>
        <TR>
          <TD class=heigh150 height=15>
            <DIV id=Content><FONT face=宋体>&nbsp;&nbsp; 
            <B>摘要:</B></FONT>主要讨论了将μC/OS-II实时操作系统在8019KC单片机上进行移植的原理和方法,给出了一个以Tasking 
            C为编译器、以8019KC为处理器,对μC/OS-II实时操作系统进行移植的具体实例。 
            <P class=MsoNormal><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp; 
            <B>关键词:</B></SPAN>80196KC; uC/OS-II;Tasking C;移植</P>
            <P 
            style="TEXT-INDENT: 30px">Intel的80196KC系列单片机在中国国内有很大一批用户。支持80196KC的C编译器生产厂商主要有Tasking和IAR。但国内使用Tasking公司C编译器的用户较多。由于<FONT 
            face=Arial>μ</FONT>C/OS-Ⅱ系统为源码公开的实时操作系统,因此是当前嵌入式系统开发的主要方法。但是,在<FONT 
            face=Arial>μ</FONT>C/OS-Ⅱ网站上没有现成的移植实例。因此,有必要进行一次移植以使操作系统成为<FONT 
            face=Arial>μ</FONT>C/OS-Ⅱ,这种移植采用的处理器为80196KC,而其编译器为Tasking c 
            196。<BR><BR><B>1 <FONT face=Arial>μ</FONT>C/OS-Ⅱ的工作原理</B></P>
            <P style="TEXT-INDENT: 30px"><FONT 
            face=Arial>μ</FONT>C/OS-Ⅱ是一个源码公开的实时多任务操作系统,其工作流程如图1所示。图中,任务切换的核心是利用出栈指令将各个任务的工作现场再现,并利用子程序返回指令改变PC指针以完成任务的切换。移植的关键是如何构造任务堆栈及任务切换时的出栈顺序。任务区堆栈初始化主要是模拟任务被中断后的堆栈内容。<BR><IMG 
            height=308 hspace=10 
            src="21IC μC-OS-II在80196KC单片机上的移植.files/10a.gif" width=549 vspace=10 
            border=0><BR><B>2 80196KC的工作状态</B></P>
            <P 
            style="TEXT-INDENT: 30px">80196KC是Intel公司的16位单片机,和程序运行密切相关的寄存器有指令计数器PC、堆栈指针sp、程序状态寄存器PSW、中断屏蔽寄存器INTMASK和INTMASK1以及窗口寄存器WSR(以下将程序状态寄存器PSW、中断屏蔽寄存器INTMASK和INTMASK1、窗口寄存器WSR统称为程序状态字)。它们可在执行子程序调用call指令时自动将pc进栈,并在子程序返回调用RET指令时自动将pc出栈。由于80196KC有16位的寻址能力,故这一动作有2个字节进(出)栈,其中push 
            a指令将程序状态字进栈,pop a指令将程序状态字出栈。这一动作共有4个字节进(出)栈。另外push 
            a动作会将PSW中的中断允许位清零,故通常用push a关闭中断,而用pop 
            a恢复中断允许。由于80196KC的时钟节拍是特定的周期性中断,当每个时钟节拍到来时,系统将对任务延时做一次裁决。因此,在这个时钟节拍可采用80196KC中的软件定时器中断。</P>
            <P><B>3 Tasking c编译器的工作细节</B></P>
            <P 
            style="TEXT-INDENT: 30px">带参数的函数调用编译后的主要操作是先将参数进栈,然后执行call指令。在函数入口处将堆栈中的参数倒入寄存器tmp0、tmp2、<IMG 
            height=310 hspace=1 src="21IC μC-OS-II在80196KC单片机上的移植.files/10b.gif" 
            width=214 align=right vspace=1 
            border=0>tmp4和tmp6以进行操作(以下称临时寄存器)的原因主要是,堆栈一般位于RAM区,而对RAM区操作不如对寄存器操作快。如果该函数有局部变量,局部变量也是分配在堆栈中。Tasking 
            c编译器一般用一寄存器frame01(以下称框架寄存器)对局部变量进行访问,在函数返回时执行ret操作,并对SP指针进行调整,以跳过函数参数在堆栈中的位置。中断调用和函数调用类似,中断本身虽没有参数,但进中断后要对临时寄存器进行保护。因此,应在进中断后执行push 
            a操作,并在中断返回时使临时寄存器出栈(注意出栈顺序),然后再次执行pop 
            a和ret操作。图2所示为堆栈区的一般结构。<BR><BR><B>4 移植的细节</B></P>
            <P 
            style="TEXT-INDENT: 30px">在OSTaskStkInit()中,任务堆栈区的构造特点是80196KC的堆栈区由高向低增长,最高处是任务的入口参数,接着是PC指针和程序状态字。如前所述,任务切换时要对临时寄存器和框架寄存器进行保护。明确了任务堆栈的构造后,编写任务启动函数(指OSStaart函数)和任务切换函数(指OS_TAASK_SW和OSIntCtxSw函数)的关键是,在得到了最高优先级的任务堆栈指针后,如何按正确的顺序出栈,直到PC指针。其中OS_TASK_SW,函数在切换任务之前还要编写对当前任务的现场进行保护的程序,而OSIntCtxSw,不用,因为中断函数用C写成,而OSIntCtxSw,是在中断中调用的,因此,Tasking 
            C编译器在进中断时已自动对其保护。同时还应注意,由于在中断服务程序中没有定义局部变量,这使得Tasking 
            C编译器不能对框架寄存器进行保护,因此,对这一寄存器的保护应在设计时自己加上。</P>
            <P style="TEXT-INDENT: 30px">#pragma interrupt</P>
            <P style="TEXT-INDENT: 30px">(OSTickISR=OS TICK ISR VECTOR)</P>
            <P style="TEXT-INDENT: 30px">void OSTickISR(void)</P>
            <P style="TEXT-INDENT: 30px">{</P>
            <P style="TEXT-INDENT: 30px">asm push ?frame01;</P>
            <P style="TEXT-INDENT: 30px">OSIntNesting++;</P>
            <P style="TEXT-INDENT: 30px">hso command=0x19;</P>
            <P style="TEXT-INDENT: 30px">AD Timer Count+=5000;</P>
            <P style="TEXT-INDENT: 30px">hso time = AD Timer Count;</P>
            <P style="TEXT-INDENT: 30px">OSTimeTick();</P>
            <P style="TEXT-INDENT: 30px">OSIntExit();</P>
            <P style="TEXT-INDENT: 30px">asm pop

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -