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

📄 ucos51移植心得.htm

📁 ucos的资料以及单片机dsp的经典移植程序
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USING 
                  0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  PUSHALL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  CLR&nbsp; EA<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  LCALL _?serial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SETB 
                  EA<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POPALL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  RETI<BR>;-------------------------------------------------------------------------<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  END<BR>;-------------------------------------------------------------------------</P>
                  <P>文件名 : OS_CPU_C.C</P>
                  <P>void *OSTaskStkInit (void (*task)(void *pd), void *ppdata, 
                  void *ptos, INT16U opt) reentrant<BR>{&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; OS_STK *stk;</P>
                  <P>&nbsp;&nbsp;&nbsp; ppdata = ppdata;<BR>&nbsp;&nbsp;&nbsp; 
                  opt&nbsp;&nbsp;&nbsp; = 
                  opt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //opt没被用到,保留此语句防止告警产生&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
                  stk&nbsp;&nbsp;&nbsp; = (OS_STK 
                  *)ptos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //用户堆栈最低有效地址<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  15;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //用户堆栈长度<BR>&nbsp;&nbsp;&nbsp; *stk++ = (INT16U)task &amp; 
                  0xFF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //任务地址低8位<BR>&nbsp;&nbsp;&nbsp; *stk++ = (INT16U)task &gt;&gt; 
                  8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //任务地址高8位&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //PSW<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x0A;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //ACC<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x0B;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //B<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //DPL<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //DPH<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //R0<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //R1<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //R2<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //R3<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //R4<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x05;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //R5<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x06;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //R6<BR>&nbsp;&nbsp;&nbsp; *stk++ = 
                  0x07;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //R7<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //不用保存SP,任务切换时根据用户堆栈长度计算得出。&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; return ((void *)ptos);<BR>}</P>
                  <P>#if OS_CPU_HOOKS_EN<BR>void OSTaskCreateHook (OS_TCB *ptcb) 
                  reentrant<BR>{<BR>&nbsp;&nbsp;&nbsp; ptcb = 
                  ptcb;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  /* Prevent compiler 
                  warning&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  */<BR>}</P>
                  <P>void OSTaskDelHook (OS_TCB *ptcb) 
                  reentrant<BR>{<BR>&nbsp;&nbsp;&nbsp; ptcb = 
                  ptcb;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  /* Prevent compiler 
                  warning&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  */<BR>}</P>
                  <P>void OSTimeTickHook (void) 
reentrant<BR>{<BR>}<BR>#endif</P>
                  <P>//初始化定时器0<BR>void InitTimer0(void) 
                  reentrant<BR>{<BR>&nbsp;&nbsp;&nbsp; 
                  TMOD=TMOD&amp;0xF0;<BR>&nbsp;&nbsp;&nbsp; 
                  TMOD=TMOD|0x01;&nbsp;&nbsp;&nbsp; 
                  //模式1(16位定时器),仅受TR0控制<BR>&nbsp;&nbsp;&nbsp; 
                  TH0=0x70;&nbsp;&nbsp;&nbsp; 
                  //定义Tick=50次/秒(即0.02秒/次)<BR>&nbsp;&nbsp;&nbsp; 
                  TL0=0x00;&nbsp;&nbsp;&nbsp; //OS_CPU_A.ASM&nbsp; 和&nbsp; 
                  OS_TICKS_PER_SEC<BR>&nbsp;&nbsp;&nbsp; 
                  ET0=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  //允许T0中断<BR>&nbsp;&nbsp;&nbsp; TR0=1;&nbsp;&nbsp; <BR>}</P>
                  <P>文件名 : YY.C</P>
                  <P>#include &lt;includes.h&gt;</P>
                  <P>#define MAX_STK_SIZE 64</P>
                  <P>void TaskStartyya(void *yydata) reentrant;<BR>void 
                  TaskStartyyb(void *yydata) reentrant;<BR>void 
                  TaskStartyyc(void *yydata) reentrant;</P>
                  <P>OS_STK 
                  TaskStartStkyya[MAX_STK_SIZE+1];//注意:我在ASM文件中设置?STACK空间为40H即64,不要超出范围。<BR>OS_STK 
                  TaskStartStkyyb[MAX_STK_SIZE+1];//用户栈多一个字节存长度<BR>OS_STK 
                  TaskStartStkyyc[MAX_STK_SIZE+1];</P>
                  <P>void main(void)<BR>{<BR>&nbsp;&nbsp;&nbsp; 
                  OSInit();<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
                  InitTimer0();<BR>&nbsp;&nbsp;&nbsp; 
                  InitSerial();<BR>&nbsp;&nbsp;&nbsp; 
                  InitSerialBuffer();<BR>&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; OSTaskCreate(TaskStartyya, (void *)0, 
                  &amp;TaskStartStkyya[0],2);<BR>&nbsp;&nbsp;&nbsp; 
                  OSTaskCreate(TaskStartyyb, (void *)0, 
                  &amp;TaskStartStkyyb[0],3);<BR>&nbsp;&nbsp;&nbsp; 
                  OSTaskCreate(TaskStartyyc, (void *)0, 
                  &amp;TaskStartStkyyc[0],4);<BR>&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; OSStart();<BR>}</P>
                  <P><BR>void TaskStartyya(void *yydata) 
                  reentrant<BR>{<BR>&nbsp;&nbsp;&nbsp; 
                  yydata=yydata;<BR>&nbsp;&nbsp;&nbsp; 
                  clrscr();<BR>&nbsp;&nbsp;&nbsp; 
                  PrintStr("\n\t\t*******************************\n");<BR>&nbsp;&nbsp;&nbsp; 
                  PrintStr("\t\t*&nbsp;&nbsp;&nbsp;&nbsp; Hello! The 
                  world.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  *\n");<BR>&nbsp;&nbsp;&nbsp; 
                  PrintStr("\t\t*******************************\n\n\n");<BR>&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; 
                  for(;;){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  PrintStr("\tAAAAAA111111 is 
                  active.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  OSTimeDly(OS_TICKS_PER_SEC);&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <BR>}</P>
                  <P>void TaskStartyyb(void *yydata) 
                  reentrant<BR>{<BR>&nbsp;&nbsp;&nbsp; yydata=yydata; 
                  <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
                  for(;;){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  PrintStr("\tBBBBBB333333 is 
                  active.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  OSTimeDly(3*OS_TICKS_PER_SEC);&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <BR>}</P>
                  <P>void TaskStartyyc(void *yydata) 
                  reentrant<BR>{<BR>&nbsp;&nbsp;&nbsp; yydata=yydata; 
                  <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
                  for(;;){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  PrintStr("\tCCCCCC666666 is 
                  active.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  OSTimeDly(6*OS_TICKS_PER_SEC);&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <BR>} </P><SPAN 
                  class=style1>(<A class=link3 href="http://www.avrw.com/" 
                  target=_parent>综合电子论坛</A>)</SPAN></TD></TR></TBODY></TABLE>
            <P 
            align=center>&nbsp;*注:部份文章为网上收录供大家共同学习参考之用,并不代表本站意见。如存在版权问题请马上通知我们,我们将马上删除。</P></TD></TR></TBODY></TABLE></P></TD></TR></TBODY></TABLE>
<SCRIPT src="uCOS51移植心得.files/floor.htm"></SCRIPT>

<SCRIPT src="uCOS51移植心得.files/homeright.js"></SCRIPT>

<SCRIPT language=javascript src="uCOS51移植心得.files/339405.js" 
type=text/javascript></SCRIPT>
<NOSCRIPT><A href="http://www.51.la/?339405" target=_blank><IMG 
style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" 
alt=我要啦免费统计 src="uCOS51移植心得.files/go.htm"></A></NOSCRIPT>
<SCRIPT language=JavaScript src="uCOS51移植心得.files/stat.htm" 
charset=gb2312></SCRIPT>

<SCRIPT src="uCOS51移植心得.files/shownum.htm"></SCRIPT>
 </BODY></HTML>

⌨️ 快捷键说明

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