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

📄 改进uc-os ii,减少内存使用量--armstrong.htm

📁 ucos的资料以及单片机dsp的经典移植程序
💻 HTM
📖 第 1 页 / 共 4 页
字号:
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD class=orange-bar>博客文章</TD></TR></TBODY></TABLE>
            <TABLE class=space-4 cellSpacing=0 cellPadding=0 width="100%" 
            border=0>
              <TBODY>
              <TR>
                <TD vAlign=top align=middle>
                  <TABLE cellSpacing=0 cellPadding=3 width="100%" border=0>
                    <TBODY>
                    <TR>
                      <TD class="S word-break lh15" align=left>
                        <P align=left>&nbsp; 
                        <TABLE 
                        style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" 
                        cellSpacing=0 cellPadding=0 width="100%" border=0>
                          <TBODY>
                          <TR>
                            <TD class=oblog_t_4 borderColor=#999999 
                            bgColor=#cccccc><SPAN class=style1><FONT 
                              size=3><STRONG>改进uC/OS&nbsp;II,减少内存使用量</STRONG></FONT></SPAN></TD></TR>
                          <TR>
                            <TD>
                              <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                              border=0>
                                <TBODY>
                                <TR>
                                <TD>
                                <DIV align=right>流星 发表于 2005-8-16 
                                14:06:10</DIV></TD></TR></TBODY></TABLE><BR><SPAN 
                              id=ob_logd2191></SPAN>
                              <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><BR></TD></TR>
                          <TR>
                            <TD class=oblog_t_4></TD></TR>
                          <TR>
                            <TD class=oblog_t_4>&nbsp;</TD></TR>
                          <TR>
                            <TD class=oblog_t_4><A 
                              href="http://www.mcublog.com/blog/user1/2268/archives/2005/2191.html#">阅读全文<SPAN 
                              id=ob_logreaded></SPAN></A> | <A 
                              href="http://www.mcublog.com/blog/user1/2268/archives/2005/2191.html#cmt">回复(0)</A> 
                              <SPAN id=ob_logm2191></SPAN>| <A 
                              href="http://www.mcublog.com/blog/showtb.asp?id=2191" 
                              target=_blank>引用通告<SPAN id=ob_tbnum></SPAN></A> | 
                              <A 
                              href="http://www.mcublog.com/blog/user_post.asp?logid=2191" 
                              target=_blank>编辑</A></TD></TR>
                          <TR>
                            <TD class=oblog_t_4>&nbsp;</TD></TR>
                          <SCRIPT language=javascript>
function click() {
 }
function click1() {
if (event.button==2) {alert('想要资料吗?联系我吧') }}
function CtrlKeyDown(){
if (event.ctrlKey) {alert('不许动!举起手来,缴枪不杀') }}
document.onkeydown=CtrlKeyDown;
document.onselectstart=click;
document.onmousedown=click1;
</SCRIPT>
                          </TBODY></TABLE>
                        <DIV id=morelog>
                        <UL>
                          <LI>上一篇:<A 
                          href="http://www.mcublog.com/blog/user1/2268/archives/2005/2190.html">Linux命令使用技巧集锦</A> 

                          <LI>下一篇:<A 
                          href="http://www.mcublog.com/blog/user1/2268/archives/2005/2197.html">关于VxWorks下的中断和异常</A> 
                          </LI></UL></DIV>
                        <DIV id=form_comment>
                        <DIV id=gg_usercomment></DIV><A name=cmt></A>
                        <DIV class=title>发表评论:</DIV>
                        <FORM id=commentform name=commentform 
                        onsubmit="return Verifycomment()" 
                        action=/blog/savecomment.asp?logid=2191 method=post>
                        <DIV class=d1><LABEL>昵称:<INPUT id=UserName maxLength=20 
                        name=UserName></LABEL></DIV>
                        <DIV class=d2><LABEL>密码:<INPUT id=Password type=password 
                        maxLength=20 name=Password> (游客无须输入密码)</LABEL></DIV>
                        <DIV class=d3><LABEL>主页:<INPUT id=homepage maxLength=50 
                        size=42 value=http:// name=homepage></LABEL></DIV>
                        <DIV class=d4><LABEL>标题:<INPUT id=commenttopic 
                        maxLength=50 size=42 value=Re:改进uC/OS&nbsp;II,减少内存使用量 
                        name=commenttopic></LABEL></DIV>
                        <DIV class=d5><INPUT id=edit type=hidden name=edit> 
                        <DIV id=oblog_edit>MCU博客数据载入中, 请稍候...</DIV></DIV>
                        <DIV class=d6><SPAN id=ob_code></SPAN><INPUT onclick='oblog_edittext.createTextRange().execCommand("Copy");' type=submit value=&nbsp;提&nbsp;交&nbsp;></DIV></FORM></DIV>
                        <P></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></CENTER>
<CENTER>
<TABLE height=60 cellSpacing=0 cellPadding=0 width=950 align=center border=0>
  <TBODY>
  <TR>
    <TD align=middle height=60><A 
      href="http://www.chanet.com.cn/click.cgi?a=1320&amp;d=249&amp;u=" 
      target=_blank><IMG height=60 
      src="改进uC-OS II,减少内存使用量--ARMStrong.files/s_image.htm" width=468 
      border=0></A></TD></TR></TBODY></TABLE></CENTER><!-- tangtang -->
<CENTER class=space-10>
<DIV class=space-10>
<DIV class=space-10></DIV>
<TABLE class=gray-bar-border cellSpacing=0 cellPadding=0 width=950 border=0>
  <TBODY>
  <TR>
    <TD class=M>图片链接</TD></TR></TBODY></TABLE>
<TABLE class=gray-border cellSpacing=0 cellPadding=3 width=950 border=0>
  <TBODY>
  <TR>
    <TD colSpan=2>
      <TABLE borderColor=#efefef cellSpacing=1 cellPadding=1 width="100%" 
      border=0>
        <TBODY>
        <TR vAlign=center align=middle>
          <TD height=31>&nbsp;</TD>
          <TD width=88 height=31><A href="http://www.datasheet.cn/" 
            target=_blank><IMG height=31 alt=中国手册网 src="" width=88 
          border=0></A></TD>
          <TD width=88 height=31><A href="http://www.ispdown.com/" 
            target=_blank><IMG height=31 alt=电子在线编程www.ispdown.com src="" 
            width=88 border=0></A></TD>
          <TD width=88 height=31><A href="http://cardmcu.vicp.net/" 
            target=_blank><IMG height=31 alt=单片机与智能卡 src="" width=88 border=0 
            heigh="31"></A></TD>
          <TD width=88 height=31><A href="http://www.61ic.com/" 
            target=_blank><IMG height=31 alt=中国电子在线www.61ic.com src="" width=88 
            border=0></A></TD>
          <TD width=88 height=31><A href="http://www.xiao-qi.com/" 
            target=_blank><IMG height=31 alt=晓奇工作室 src="" width=88 
          border=0></A></TD>
          <TD width=88 height=31><A href="http://www.51eda.com/" 
            target=_blank><IMG height=31 alt=中国EDA技术网 src="" width=88 
            border=0></A></TD>
          <TD width=88 height=31><A href="http://www.fjmcu.com/" 
            target=_blank><IMG height=31 alt=精诚电子设计 src="" width=88 
          border=0></A></TD>
          <TD width=88 height=31><A href="http://www.1bei9.com/" 
            target=_blank><IMG height=31 alt=一杯酒软件站 src="" width=88 
          border=0></A></TD>
          <TD width=88 height=31><A href="http://www.mcu99.com/" 
            target=_blank><IMG height=31 alt=单片机启点网 src="" width=88 
          border=0></A></TD>
          <TD width=88 height=31><A href="http://www.iamrobot.net/" 
            target=_blank><IMG height=31 alt=机器人天地 src="" width=88 
          border=0></A></TD>
          <TD width=88 height=31>&nbsp;</TD></TR>
        <TBODY>
        <TR vAlign=center align=middle>
          <TD height=31>&nbsp;</TD>
          <TD height=31><A href="http://www.pic16.com/" target=_blank><IMG 
            height=31 src="" width=88 border=0></A></TD>
          <TD height=31><A href="http://77169.com/" target=_blank><IMG 
            height=31 src="" width=88 border=0></A></TD>
          <TD height=31><A href="http://www.dz013.com/" target=_blank><IMG 
            height=31 src="" width=88 border=0></A></TD>
          <TD height=31><A href="http://www.chinamcu.net/" target=_blank><IMG 
            height=31 src="" width=88 border=0></A></TD>
          <TD height=31><A href="http://www.ic00.com/" target=_blank><IMG 
            height=31 src="" width=88 border=0></A></TD>
          <TD height=31><A href="http://www.51dzrc.com/" target=_blank><IMG 
            height=31 src="" width=88 border=0></A></TD>
          <TD height=31><A href="http://www.embedworld.com/" 
            target=_blank><IMG height=31 src="" width=88 border=0></A></TD>
          <TD height=31><A href="http://www.86et.com/" target=_blank><IMG 
            height=31 src="" width=88 border=0></A></TD>
          <TD><A href="http://www.zychina.com.cn/" target=_blank><IMG 
            height=31 src="" width=88 border=0></A></TD>
          <TD><A href="http://www.allbiz.cn/" target=_blank><IMG height=31 
            alt=上海注册信息网≡注册上海公司/上海公司注册 src="" width=88 border=0></A></TD>
          <TD height=31>&nbsp;</TD></TR>
        <TR vAlign=center align=middle>
          <TD width=88 height=31>&nbsp;</TD>
          <TD width=88 height=31><A href="http://www.51kaifa.com/" 
            target=_blank><IMG height=31 alt=无忧电子开发网 
            src="改进uC-OS II,减少内存使用量--ARMStrong.files/logo2.jpg" width=88 
            border=0></A></TD>
          <TD width=88 height=31><A href="http://www.genphoal.net/" 
            target=_blank><IMG height=31 alt=LED专业论坛 src="" width=88 
            border=0></A></TD>
          <TD width=88 height=31><A href="http://www.mculab.com/" 
            target=_blank><IMG height=31 alt=芯片实验室 
            src="改进uC-OS II,减少内存使用量--ARMStrong.files/nologo.gif" width=88 
            border=0></A></TD>
          <TD width=88 height=31><A href="http://www.arm9.net/" 
            target=_blank><IMG height=31 alt=友善之臂 
            src="改进uC-OS II,减少内存使用量--ARMStrong.files/arm9logo.gif" width=88 
            border=0></A></TD>
          <TD width=88 height=31><A href="http://www.funtek.cn/" 
            target=_blank><IMG height=31 alt=方技电子 
            src="改进uC-OS II,减少内存使用量--ARMStrong.files/invalid.jpg" width=88 
            border=0></A></TD>
          <TD width=88 height=31><A href="http://www.dykf.com/" 
            target=_blank><IMG height=31 alt=电源开发网 
            src="改进uC-OS II,减少内存使用量--ARMStrong.files/logo.gif" width=88 
            border=0></A></TD>
          <TD width=88 height=31><A href="http://www.study-kit.com/index.asp" 
            target=_blank><IMG height=31 alt=开发板之家www.study-kit.com src="" 
            width=88 border=0></A></TD>
          <TD width=88 height=31><A href="http://www.ednchina.com/" 
            target=_blank><IMG height=31 alt=EDN 
            src="改进uC-OS II,减少内存使用量--ARMStrong.files/edn88X31.gif" width=88 
            border=0 China 电子设计技术></A></TD>
          <TD align=middle width=88 height=31><SPAN class=style1><A 
            href="http://guestbook.activepower.net/script/user/list.asp?userid=32665" 
            target=_blank>您的位置</A></SPAN></TD>
          <TD width=88 height=31><A 
            href="http://www.mcublog.com/blog/user1/2268/archives/2005/" 
            target=_blank><IMG height=31 alt=MCU博客-中国电子工程师博客网 
            src="改进uC-OS II,减少内存使用量--ARMStrong.files/mcublogo.gif" width=88 
            border=0></A></TD>
          <TD width=88 
height=31>&nbsp;</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<DIV class=space-10></DIV>
<TABLE class=gray-bar-border cellSpacing=0 cellPadding=0 width=950 border=0>
  <TBODY>
  <TR>
    <TD class=M>文字链接-<A 
      href="http://www.mcublog.com/blog.asp?name=zhlyp">嵌入式之家</A></TD></TR></TBODY></TABLE>
<TABLE class=gray-border cellSpacing=0 cellPadding=3 width=950 border=0>
  <TBODY>
  <TR>
    <TD colSpan=2>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD class=S style="PADDING-LEFT: 15px; PADDING-TOP: 5px" vAlign=bottom 
          align=middle><A href="http://www.cpubbs.com/" 
            target=_blank>CPUBBS</A> | <A href="http://www.embyte.com/" 
            target=_blank>微码科技</A> | <A href="http://www.c51bbs.com/" 
            target=_blank>C51BBS</A> | <A href="http://www.21ic.com/" 

⌨️ 快捷键说明

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