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

📄 自由风os梦工厂--改进uc-os ii,减少内存使用量.htm

📁 网上下载的一些心得集 网友交流之经验谈 uCOS51移植心得 uCOS-II 在 ARM7 上的移植
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0049)http://half.nease.net/ucos/article/decmemucos.htm -->
<HTML><HEAD><TITLE>自由风OS梦工厂--改进uC/OS II,减少内存使用量</TITLE><!-- InstanceBegin template="/%C4%A3%B0%E5/Document.dwt" codeOutsideHTMLIsLocked="false" -->
<META 
content="嵌入式系统,ucos,ucos ii,uc/os,vxworks,linux,os,arm,ppc,x86,embed,操作系统,单片机,实时操作系统,驱动,文件系统,网络,计算机,tcpip,总线,通信,郭景峰,崔卿,自动控制" 
name=Keywords>
<SCRIPT language=JavaScript type=text/JavaScript><!--function MM_reloadPage(init) {  //reloads the window if Nav4 resized  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();}MM_reloadPage(true);//--></SCRIPT>
<!-- InstanceBeginEditable name="doctitle" --><!-- InstanceEndEditable -->
<META http-equiv=Content-Type content="text/html; charset=gb2312"><!-- InstanceParam name="OptionalRegion1" type="boolean" value="true" --><LINK 
href="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/format.css" type=text/css 
rel=stylesheet>
<META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD>
<BODY>
<TABLE cellSpacing=0 cellPadding=0 width=750 align=center border=0>
  <TBODY>
  <TR>
    <TD align=middle width=150 height=55><A 
      href="http://www.textclick.com/viewmain.asp?name=guojingfen"><IMG 
      height=50 src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/logo.gif" width=150 
      border=0></A></TD>
    <TD colSpan=2 height=55>
      <DIV align=right>
      <OBJECT 
      codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0 
      height=50 width=595 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="movie" VALUE="/flash/Head.swf"><PARAM NAME="quality" VALUE="high">
                                    <embed src="/flash/Head.swf" quality="high" 
      pluginspage="http://www.macromedia.com/go/getflashplayer" 
      type="application/x-shockwave-flash" width="595" 
      height="50"></embed></OBJECT></DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=750 align=center border=0>
  <TBODY>
  <TR>
    <TD bgColor=#f7f7f7>
      <TABLE cellSpacing=0 cellPadding=0 width=750 align=center border=0>
        <TBODY>
        <TR>
          <TD colSpan=2 height=30>当前位置<IMG height=8 
            src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/arrow.gif" width=12><A 
            href="http://half.nease.net/main.htm">首页</A><IMG height=8 
            src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/arrow.gif" width=12><!-- InstanceBeginEditable name="navigate" --><A 
            href="http://half.nease.net/ucos/index.htm">uC/OS-II</A><IMG 
            height=8 src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/arrow.gif" 
            width=12><A href="http://half.nease.net/ucos/article.htm">技术应用</A><!-- InstanceEndEditable --></TD>
          <TD width=160 height=30>
            <DIV align=center><IMG height=14 
            src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/home.gif" width=14 
            align=absMiddle> <A 
            onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://half.nease.net')" 
            href="http://half.nease.net/ucos/article/decmemucos.htm#" 
            target=_self>设为首页</A> <IMG height=13 
            src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/fav.gif" width=15 
            align=absMiddle> <A 
            href="javascript:window.external.addfavorite('http://half.nease.net','自由风OS梦工厂--嵌入式系统开发')">收藏本站</A></DIV></TD></TR>
        <TR>
          <TD width=150 bgColor=#000000 height=1></TD>
          <TD width=450 bgColor=#000000 height=1></TD>
          <TD width=150 bgColor=#000000 height=1></TD></TR>
        <TR>
          <TD vAlign=top align=middle colSpan=3>
            <P>&nbsp;</P>
            <TABLE cellSpacing=0 cellPadding=0 width=700 border=0>
              <TBODY>
              <TR>
                <TD bgColor=#cccccc height=25>
                  <DIV align=center><FONT size=4><!-- InstanceBeginEditable name="title" --><FONT 
                  size=4><STRONG>改进uC/OS II,减少内存使用量</STRONG></FONT><!-- InstanceEndEditable --></FONT></DIV></TD></TR>
              <TR>
                <TD bgColor=#ebebeb height=30>
                  <DIV align=center><!-- InstanceBeginEditable name="smalltitle" -->2003-08-08[中][摘] 
                  John_Lee <A href="http://www.driverdevelop.com/index.php" 
                  target=_blank>驱动程序开发论坛</A>[文]<FONT color=#0000ff></FONT><!-- InstanceEndEditable --></DIV></TD></TR>
              <TR>
                <TD height=40>声明:<FONT 
                  color=#c60d0d>本网站资源来自本站原创、网友来稿和摘自别处等途径,在此敬告各位网友,下载和使用时要充分尊重作品版权,对来自不同途径的资源请分别参照<A 
                  href="http://half.nease.net/info/declare.htm" 
                  target=_blank>相关声明</A>严格执行。本站拒绝一切具有商业化色彩的使用与下载。万望注意,特此声明!</FONT></TD></TR></TBODY></TABLE>
            <TABLE borderColor=#000000 cellSpacing=0 cellPadding=0 width=700 
            border=1>
              <TBODY>
              <TR>
                <TD borderColor=#ffffff bgColor=#666666 height=20>
                  <TABLE cellSpacing=0 cellPadding=0 width=700 border=0>
                    <TBODY>
                    <TR>
                      <TD width=25>
                        <DIV align=center><FONT face=Wingdings 
                        color=#ffffff>1</FONT></DIV></TD>
                      <TD width=652>&nbsp;</TD>
                      <TD width=23>
                        <DIV align=center><A 
                        href="javascript:window.close()"><FONT face=Wingdings 
                        color=#ffffff>x</FONT></A></DIV></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD vAlign=top borderColor=#ffffff align=middle 
height=120><BR><!-- InstanceBeginEditable name="EditRegion1" -->
                  <TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
                    <TBODY>
                    <TR>
                      <TD>
                        <P 
                        class=p4>在以uC/OS为操作系统的项目中,系统可能要处理各种不同的中断请求,如果某个中断处理程序需要调用uC/OS的各种Post函数向任务发出消息,那么uC/OS建议中断服务程序的写法是:<BR>1、保存全部CPU寄存器<BR>2、调用OSIntEnter或OSIntNesting直接加1<BR>3、执行用户代码做中断服务<BR>4、调用OSIntExit<BR>5、恢复所有CPU寄存器<BR>6、执行中断返回指令<BR>暂且称为“标准中断”方式,这种方式实际上是将这个中断处理加入了任务调度系统,也就是说这个中断可以引起任务的切换。</P>
                        <P 
                        class=p4>如果在中断处理中没有调用各种Post函数的话,则可以用一般的、象原来没有操作系统时的写法:<BR>1、保存中断处理程序需要用到的CPU寄存器<BR>2、执行中断处理<BR>3、恢复保存了的CPU寄存器<BR>4、执行中断返回指令<BR>暂且称为“快中断”方式,按照这种方法定义的中断永远不会引起任务切换。</P>
                        <P 
                        class=p4>在uC/OS系统中,每个任务都要定义独立的栈空间,一个栈空间的使用包括5个部分:<BR>1、任务包括的各个函数的调用返回地址<BR>2、任务包括的各个函数中可能在栈上分配的局部变量<BR>3、发生了“标准中断”方式定义的中断或任务被挂起时,所要保存的任务上下文<BR>4、发生了“快中断”方式定义的中断时,中断处理程序所需要的栈空间<BR>5、中断嵌套时,所要保存的中断嵌套上下文</P>
                        <P 
                        class=p4>在这些使用的部分中,1,2,3,4的内存占用量是比较容易估算的,最精确和保险的确定方法是:查看由C生成的asm文件,并计算各个函数的栈使用量。但是第5部分的栈空间使用量是随中断嵌套的深度而不断增加的,是不确定的,一般的方法只能定义一个充分大的栈空间,使之不会溢出。</P>
                        <P 
                        class=p4>为每个任务都定义一个充分大的栈空间,这在某些内存稀缺的小项目中是非常痛苦的,有时不得不增扩内存,这就会使成本增加。</P>
                        <P 
                        class=p4>我深入研究了uC/OS后,认为,可以将所有任务栈空间使用的第5部分合并,这样将会大大的降低整个系统对内存的需求。</P>
                        <P 
                        class=p4>uC/OS的任务调度是靠OS_Sched和OSIntExit来完成的,这两个函数中都要先判断一个叫OSIntNesting的系统变量,如果OSIntNesting不为0,则不进行任务切换。也就是说:在OSIntNesting为1(当前只有一个中断在处理中,并且没有嵌套的中断)时起,如果发生了嵌套的中断(不管嵌套的层数有深),那么在所有嵌套的中断一层一层地都返回直到OSIntNesting再次为1时止,任务栈是不会切换的(栈指针都在一个任务的栈空间中变化)。</P>
                        <P 
                        class=p4>据此,我们可以这样改动:设置一个缓冲区OSInterruptStk,作为嵌套中断的栈空间,由所有任务共享,中断服务程序改为:<BR>1、保存全部CPU寄存器<BR>2、调用OSIntEnter或OSIntNesting直接加1<BR>增加:2.1、判断OSIntNesting是否等于1,如果不是则转到3<BR>增加:2.2、将栈指针SP保存到OSTCBCur-&gt;OSTCBStkPtr<BR>增加:2.3、将SP指向OSInterruptStk的栈顶(注意栈增长的方向)。<BR>3、执行用户代码做中断服务<BR>4、调用OSIntExit<BR>增加:4.1、判断OSIntNesting是否等于0,如果不是则转到5<BR>增加:4.2、从OSTCBCur-&gt;OSTCBStkPtr中恢复栈指针SP<BR>5、恢复所有CPU寄存器<BR>6、执行中断返回指令</P>
                        <P 
                        class=p4>并且要修改OSIntCtxSw函数,原始的OSIntCtxSw函数的写法是:<BR>1、调整栈指针来去掉在调用:OSIntExit,OSIntCtxSw过程中入栈的多余内容<BR>2、将当前任务栈指针保存到OSTCBCur中(OSTCBCur-&gt;OSTCBStkPtr 
                        = __SP__)<BR>3、如果需要则调用OSTaskSwHook<BR>4、OSTCBCur = 
                        OSTCBHighRdy<BR>5、OSPrio = 
                        OSPrioHighRdy<BR>6、从OSTCBCur中恢复栈指针(__SP__ = 
                        OSTCBCur-&gt;OSTCBStkPtr)<BR>7、恢复保存了的CPU寄存器<BR>8、执行中断返回指令</P>
                        <P 
                        class=p4>新的写法只需将原写法中的1,2去掉即可,因为1,2步只是保存旧任务的栈指针,而新的写法中,这些步被移到了“中断服务程序”中的2.2。</P>
                        <P class=p4>以上的修改已在我的项目中验证通过了。</P></TD></TR></TBODY></TABLE>
                  <P 
              class=p4>&nbsp;</P><!-- InstanceEndEditable --><BR></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=750 align=center border=0>
  <TBODY>
  <TR>
    <TD background="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/bot.gif" height=40>
      <DIV align=center><A href="http://half.nease.net/info/about.htm"><FONT 
      color=#666666>◇</FONT> 关于本站</A> <FONT color=#666666>◇</FONT> <A 
      href="http://half.nease.net/info/server.htm">网站服务</A> <FONT 
      color=#666666>◇ </FONT><A 
      href="http://half.nease.net/info/declare.htm">网站声明</A> <FONT 
      color=#666666>◇ </FONT><A 
      href="http://half.nease.net/info/help.htm">帮助信息</A> <FONT 
      color=#666666>◇</FONT><A 
      href="http://gb.go98.com:81/gbbs.cgi?user=freewind" target=_blank> 留 言 
      簿</A> <FONT color=#666666>◇</FONT> <A 
      href="mailto:freewindos@sina.com">给我写信</A> <FONT 
      color=#666666>◇</FONT></DIV></TD></TR>
  <TR bgColor=#cccccc>
    <TD bgColor=#ffffff height=100>
      <DIV align=center>
      <P class=p7 align=center><FONT color=#666666>★ Copyright &copy; 2003 FreeWind 
      Studio All Rights Reserved ★<BR><IMG height=20 
      src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/vline.gif" width=1><IMG height=20 
      src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/hline.gif" width=102> 
      自由风工作室版权所有<FONT color=#ffffff> </FONT></FONT><FONT color=#666666><IMG 
      height=20 src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/hline.gif" 
      width=102><IMG height=20 
      src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/vline.gif" width=1></FONT></P>
      <P class=p7 align=center><FONT class=p2 color=#666666><IMG 
      src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/count.png" 
      align=absMiddle></FONT></P></DIV></TD></TR></TBODY></TABLE>
<DIV id=Layer1 
style="Z-INDEX: 1; LEFT: 221px; VISIBILITY: hidden; WIDTH: 49px; POSITION: absolute; TOP: 289px; HEIGHT: 45px"><FONT 
class=p2 color=#666666>
<SCRIPT>var tc_user="guojingfen";var tc_class="2";</SCRIPT>

<SCRIPT src="自由风OS梦工厂--改进uC-OS II,减少内存使用量.files/stat.js"></SCRIPT>
</FONT></DIV>
<P align=center><SPAN class=p7><FONT class=p2 color=#666666></FONT></SPAN></P><!-- InstanceEnd --></BODY></HTML>

⌨️ 快捷键说明

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