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

📄 ucos51移植心得.htm

📁 网络上搜集的关于ucos51单片机移植心得,非常不错,值的下载.
💻 HTM
📖 第 1 页 / 共 4 页
字号:
      AT 
      000BH&nbsp;&nbsp;&nbsp;&nbsp;;OSTickISR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LJMP 
      OSTickISR&nbsp;&nbsp;&nbsp;;使用定时器0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RSEG 
      ?PR?OSTickISR?OS_CPU_A<BR><BR>OSTickISR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USING 
      0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSHALL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;TR0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;TH0,#70H&nbsp;&nbsp;&nbsp;&nbsp;;定义Tick=50次/秒(即0.02秒/次)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;TL0,#00H&nbsp;&nbsp;&nbsp;&nbsp;;OS_CPU_C.C&nbsp;&nbsp;和&nbsp;&nbsp;OS_TICKS_PER_SEC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SETB 
      TR0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL 
      _?OSIntEnter<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL 
      _?OSTimeTick<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL 
      _?OSIntExit<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POPALL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETI<BR>;-------------------------------------------------------------------------<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSEG 
      AT 
      0023H&nbsp;&nbsp;&nbsp;&nbsp;;串口中断<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LJMP 
      SerialISR&nbsp;&nbsp;&nbsp;;工作于系统态,无任务切换。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RSEG 
      ?PR?_?serial?OS_CPU_A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>SerialISR:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USING 
      0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSHALL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;EA<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL 
      _?serial&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SETB 
      EA<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POPALL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETI<BR>;-------------------------------------------------------------------------<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END<BR>;-------------------------------------------------------------------------<BR><BR>文件名 
      : OS_CPU_C.C<BR><BR>void *OSTaskStkInit (void (*task)(void *pd), void 
      *ppdata, void *ptos, INT16U opt) 
      reentrant<BR>{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;OS_STK 
      *stk;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;ppdata = 
      ppdata;<BR>&nbsp;&nbsp;&nbsp;&nbsp;opt&nbsp;&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;&nbsp;//opt没被用到,保留此语句防止告警产生&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;stk&nbsp;&nbsp;&nbsp;&nbsp;= 
      (OS_STK 
      *)ptos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用户堆栈最低有效地址<BR>&nbsp;&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;&nbsp;//用户堆栈长度<BR>&nbsp;&nbsp;&nbsp;&nbsp;*stk++ 
      = (INT16U)task &amp; 
      0xFF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//任务地址低8位<BR>&nbsp;&nbsp;&nbsp;&nbsp;*stk++ 
      = (INT16U)task &gt;&gt; 
      8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//任务地址高8位&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&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;&nbsp;//PSW<BR>&nbsp;&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;&nbsp;//ACC<BR>&nbsp;&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;&nbsp;//B<BR>&nbsp;&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;&nbsp;//DPL<BR>&nbsp;&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;&nbsp;//DPH<BR>&nbsp;&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;&nbsp;//R0<BR>&nbsp;&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;&nbsp;//R1<BR>&nbsp;&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;&nbsp;//R2<BR>&nbsp;&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;&nbsp;//R3<BR>&nbsp;&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;&nbsp;//R4<BR>&nbsp;&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;&nbsp;//R5<BR>&nbsp;&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;&nbsp;//R6<BR>&nbsp;&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;&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;&nbsp;//不用保存SP,任务切换时根据用户堆栈长度计算得出。&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 
      ((void *)ptos);<BR>}<BR><BR>#if OS_CPU_HOOKS_EN<BR>void OSTaskCreateHook 
      (OS_TCB *ptcb) reentrant<BR>{<BR>&nbsp;&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;&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;&nbsp;*/<BR>}<BR><BR>void 
      OSTaskDelHook (OS_TCB *ptcb) 
      reentrant<BR>{<BR>&nbsp;&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;&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;&nbsp;*/<BR>}<BR><BR>void 
      OSTimeTickHook (void) 
      reentrant<BR>{<BR>}<BR>#endif<BR><BR>//初始化定时器0<BR>void InitTimer0(void) 
      reentrant<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;TMOD=TMOD&amp;0xF0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;TMOD=TMOD|0x01;&nbsp;&nbsp;&nbsp;&nbsp;//模式1(16位定时器),仅受TR0控制<BR>&nbsp;&nbsp;&nbsp;&nbsp;TH0=0x70;&nbsp;&nbsp;&nbsp;&nbsp;//定义Tick=50次/秒(即0.02秒/次)<BR>&nbsp;&nbsp;&nbsp;&nbsp;TL0=0x00;&nbsp;&nbsp;&nbsp;&nbsp;//OS_CPU_A.ASM&nbsp;&nbsp;和&nbsp;&nbsp;OS_TICKS_PER_SEC<BR>&nbsp;&nbsp;&nbsp;&nbsp;ET0=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//允许T0中断<BR>&nbsp;&nbsp;&nbsp;&nbsp;TR0=1;&nbsp;&nbsp;&nbsp;<BR>}<BR><BR>文件名 
      : YY.C<BR><BR>#include &lt;includes.h&gt;<BR><BR>#define MAX_STK_SIZE 
      64<BR><BR>void TaskStartyya(void *yydata) reentrant;<BR>void 
      TaskStartyyb(void *yydata) reentrant;<BR>void TaskStartyyc(void *yydata) 
      reentrant;<BR><BR>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];<BR><BR>void 
      main(void)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;OSInit();<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;InitTimer0();<BR>&nbsp;&nbsp;&nbsp;&nbsp;InitSerial();<BR>&nbsp;&nbsp;&nbsp;&nbsp;InitSerialBuffer();<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate(TaskStartyya, 
      (void *)0, 
      &amp;TaskStartStkyya[0],2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate(TaskStartyyb, 
      (void *)0, 

⌨️ 快捷键说明

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