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

📄 ucos51移植心得.htm

📁 ucos的资料以及单片机dsp的经典移植程序
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  is active<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AAAAAA111111 
                  is active<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AAAAAA111111 
                  is active<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BBBBBB333333 
                  is active<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CCCCCC666666 
                  is active<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  Demo程序经Keil701编译后,代码量为7-8K,可直接在KeilC51上仿真运行。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  编译时要将OS_CPU_C.C、UCOS_II.C、OS_CPU_A.ASM、YY.C加入项目<BR>&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; 
                  以上是我这次移植uCOS51的一些心得,写出来只是让准备在51上运行操作系统的同行们少走弯路并增强使用信心。我强烈推荐大家在自己的51系统中使用uCOS这个简单实用的自己的操作系统。它的大小应该不是问题,性能上的提高却是显著的。但愿此文能对朋友们有所帮助,错误在所难免,希望各位大虾指正,诸位高手们见笑了!<BR>&nbsp;&nbsp;&nbsp; 
                  <BR>注:全部源码可来信索要(<A href="mailto:asdjf@163.com"><FONT 
                  color=#0000ff>asdjf@163.com</FONT></A>),以下仅为关键代码部分。&nbsp;&nbsp;&nbsp;&nbsp; 
                  </P>
                  <P>文件名 : OS_CPU_A.ASM</P>
                  <P>$NOMOD51<BR>EA&nbsp;&nbsp;&nbsp; BIT&nbsp;&nbsp;&nbsp; 
                  0A8H.7<BR>SP&nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; 
                  081H<BR>B&nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; 
                  0F0H<BR>ACC&nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; 
                  0E0H<BR>DPH&nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; 
                  083H<BR>DPL&nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; 
                  082H<BR>PSW&nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; 
                  0D0H<BR>TR0&nbsp;&nbsp;&nbsp; BIT&nbsp;&nbsp;&nbsp; 
                  088H.4<BR>TH0&nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; 
                  08CH<BR>TL0&nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; 08AH</P>
                  <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NAME 
                  OS_CPU_A&nbsp;&nbsp;&nbsp; 
                  ;模块名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  <BR>;定义重定位段<BR>?PR?OSStartHighRdy?OS_CPU_A&nbsp;&nbsp;&nbsp; 
                  SEGMENT 
                  CODE<BR>?PR?OSCtxSw?OS_CPU_A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  SEGMENT 
                  CODE<BR>?PR?OSIntCtxSw?OS_CPU_A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  SEGMENT 
                  CODE<BR>?PR?OSTickISR?OS_CPU_A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  SEGMENT CODE</P>
                  <P>?PR?_?serial?OS_CPU_A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  SEGMENT CODE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  <BR>;声明引用全局变量和外部子程序<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  EXTRN IDATA 
                  (OSTCBCur)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXTRN 
                  IDATA 
                  (OSTCBHighRdy)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  EXTRN IDATA 
                  (OSRunning)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  EXTRN IDATA 
                  (OSPrioCur)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  EXTRN IDATA (OSPrioHighRdy)<BR>&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXTRN 
                  CODE&nbsp; 
                  (_?OSTaskSwHook)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  EXTRN CODE&nbsp; 
                  (_?serial)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXTRN 
                  CODE&nbsp; 
                  (_?OSIntEnter)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  EXTRN CODE&nbsp; 
                  (_?OSIntExit)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  EXTRN CODE&nbsp; 
                  (_?OSTimeTick)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  <BR>;对外声明4个不可重入函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  PUBLIC 
                  OSStartHighRdy<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  PUBLIC OSCtxSw<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  PUBLIC 
                  OSIntCtxSw<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  PUBLIC OSTickISR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;PUBLIC 
                  SerialISR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp; 
                  <BR>;分配堆栈空间。只关心大小,堆栈起点由keil决定,通过标号可以获得keil分配的SP起点。<BR>?STACK 
                  SEGMENT IDATA<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  RSEG 
                  ?STACK<BR>OSStack:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  DS 40H<BR>OSStkStart IDATA OSStack-1</P>
                  <P>;定义压栈出栈宏<BR>PUSHALL&nbsp;&nbsp;&nbsp; 
                  MACRO<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  PSW<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  B<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  DPL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  DPH<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; 
                  A,R0&nbsp;&nbsp; 
                  ;R0-R7入栈<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; 
                  A,R1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; 
                  A,R2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; 
                  A,R3<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; 
                  A,R4<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; 
                  A,R5<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; 
                  A,R6<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; 
                  A,R7<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH 
                  ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;PUSH 
                  SP&nbsp;&nbsp;&nbsp; 
                  ;不必保存SP,任务切换时由相应程序调整<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ENDM<BR>&nbsp;&nbsp;&nbsp; <BR>POPALL&nbsp;&nbsp;&nbsp; 
                  MACRO<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;POP&nbsp; 
                  ACC&nbsp;&nbsp; 
                  ;不必保存SP,任务切换时由相应程序调整<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; ACC&nbsp;&nbsp;&nbsp; 
                  ;R0-R7出栈<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R7,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R6,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R5,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R4,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R3,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R2,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R1,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R0,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; DPH<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; DPL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; B<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; ACC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  POP&nbsp; PSW<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ENDM<BR>&nbsp;&nbsp;&nbsp; 
                  <BR>;子程序<BR>;-------------------------------------------------------------------------<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  RSEG 
                  ?PR?OSStartHighRdy?OS_CPU_A<BR>OSStartHighRdy:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  USING 0&nbsp;&nbsp;&nbsp; ;上电后51自动关中断,此处不必用CLR 
                  EA指令,因为到此处还未开中断,本程序退出后,开中断。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  LCALL _?OSTaskSwHook</P>
                  <P>OSCtxSw_in:<BR>&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;OSTCBCur 
                  ===&gt; DPTR&nbsp; 
                  获得当前TCB指针,详见C51.PDF第178页<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R0,#LOW (OSTCBCur) 
                  ;获得OSTCBCur指针低地址,指针占3字节。+0类型+1高8位数据+2低8位数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  INC&nbsp; R0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; DPH,@R0&nbsp;&nbsp;&nbsp; 
                  ;全局变量OSTCBCur在IDATA中<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  INC&nbsp; R0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; DPL,@R0<BR>&nbsp;&nbsp;&nbsp; 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;OSTCBCur-&gt;OSTCBStkPtr ===&gt; DPTR&nbsp; 
                  获得用户堆栈指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  INC&nbsp; DPTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;指针占3字节。+0类型+1高8位数据+2低8位数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX A,@DPTR&nbsp;&nbsp;&nbsp;&nbsp; 
                  ;.OSTCBStkPtr是void指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R0,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  INC&nbsp; DPTR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOVX A,@DPTR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  MOV&nbsp; R1,A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

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