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

📄 ——ucos51移植心得[社区].htm

📁 网上收集的关于嵌入式开发的文档。拿来共享!
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            |         ---------- 
            -                       
            ----------<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp; 
            |<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp; 
            |<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp; 
            |<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ----------<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 
            +1<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ----------<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; 
            OSStack----&gt;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 
            0<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ----------<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; OSStkStart----&gt;| 不关心 
            | -1 
            低地址<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ----------<BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            \--------&gt;|&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;&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;&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-OSStkStart<BR>*********************************************************************************</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            TCB结构体中OSTCBStkPtr总是指向用户堆栈最低地址,该地址空间内存放用户堆栈长度,其上空间存放系统堆栈映像,即:用户堆栈空间大小=系统堆栈空间大小+1。</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            SP总是先加1再存数据,因此,SP初始时指向系统堆栈起始地址(OSStack)减1处(OSStkStart)。很明显系统堆栈存储空间大小=SP-OSStkStart。</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            任务切换时,先保存当前任务堆栈内容。方法是:用SP-OSStkStart得出保存字节数,将其写入用户堆栈最低地址内,以用户堆栈最低地址为起址,以OSStkStart为系统堆栈起址,由系统栈向用户栈拷贝数据,循环SP-OSStkStart次,每次拷贝前先将各自栈指针增1。</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            其次,恢复最高优先级任务系统堆栈。方法是:获得最高优先级任务用户堆栈最低地址,从中取出“长度”,以最高优先级任务用户堆栈最低地址为起址,以OSStkStart为系统堆栈起址,由用户栈向系统栈拷贝数据,循环“长度”数值指示的次数,每次拷贝前先将各自栈指针增1。</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            用户堆栈初始化时从下向上依次保存:用户堆栈长度(15),PCL,PCH,PSW,ACC,B,DPL,DPH,R0,R1,R2,R3,R4,R5,R6,R7。不保存SP,任务切换时根据用户堆栈长度计算得出。</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            OSTaskStkInit函数总是返回用户栈最低地址。</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            操作系统tick时钟我使用了51单片机的T0定时器,它的初始化代码用C写在了本文件中。</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            最后还有几点必须注意的事项。本来原则上我们不用修改与处理器无关的代码,但是由于KEIL编译器的特殊性,这些代码仍要多处改动。因为KEIL缺省情况下编译的代码不可重入,而多任务系统要求并发操作导致重入,所以要在每个C函数及其声明后标注reentrant关键字。另外,“pdata”、“data”在uCOS中用做一些函数的形参,但它同时又是KEIL的关键字,会导致编译错误,我通过把“pdata”改成“ppdata”,“data”改成“ddata”解决了此问题。OSTCBCur、OSTCBHighRdy、OSRunning、OSPrioCur、OSPrioHighRdy这几个变量在汇编程序中用到了,为了使用Ri访问而不用DPTR,应该用KEIL扩展关键字IDATA将它们定义在内部RAM中。</P>
            <P>&nbsp;&nbsp;&nbsp; 
            (4)重写OS_CPU_A.ASM<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            A51宏汇编的大致结构如下:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NAME 
            模块名&nbsp;&nbsp;&nbsp; 
            ;与文件名无关<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;定义重定位段&nbsp;&nbsp; 
            必须按照C51格式定义,汇编遵守C51规范。段名格式为:?PR?函数名?模块名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ;声明引用全局变量和外部子程序&nbsp; 
            注意关键字为“EXTRN”没有‘E’<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            全局变量名直接引用<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            无参数/无寄存器参数函数 
            FUNC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            带寄存器参数函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            _FUNC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            重入函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            _?FUNC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ;分配堆栈空间<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            只关心大小,堆栈起点由keil决定,通过标号可以获得keil分配的SP起点。切莫自己分配堆栈起点,只要用DS通知KEIL预留堆栈空间即可。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ?STACK段名与STARTUP.A51中的段名相同,这意味着KEIL在LINK时将把两个同名段拼在一起,我预留了40H个字节,STARTUP.A51预留了1个字节,LINK完成后堆栈段总长为41H。查看yy.m51知KEIL将堆栈起点定在21H,长度41H,处于内部RAM中。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ;定义宏<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            宏名 MACRO&nbsp; 实体&nbsp; ENDM<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ;子程序<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            OSStartHighRdy<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            OSCtxSw<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            OSIntCtxSw<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            OSTickISR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            SerialISR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            END&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            ;声明汇编源文件结束<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般指针占3字节。+0类型+1高8位数据+2低8位数据 
            详见C51.PDF第178页<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            低位地址存高8位值,高位地址存低8位值。例如0x1234,基址+0:0x12 
            基址+1:0x34<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            <BR>&nbsp;&nbsp;&nbsp; (5)移植串口驱动程序</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            在此之前我写过基于中断的串口驱动程序,包括打印字节/字/长字/字符串,读串口,初始化串口/缓冲区。把它改成重入函数即可直接使用。</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            系统提供的显示函数是并发的,它不是直接显示到串口,而是先输出到显存,用户不必担心IO慢速操作影响程序运行。串口输入也采用了同样的技术,他使得用户在CPU忙于处理其他任务时照样可以盲打输入命令。</P>
            <P>&nbsp;&nbsp;&nbsp; (6)编写测试程序Demo(YY.C)</P>
            <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            Demo程序创建了3个任务A、B、C优先级分别为2、3、4,A每秒显示一次,B每3秒显示一次,C每6秒显示一次。从显示结果看,显示3个A后显示1个B,显示6个A和2个B后显示1个C,结果显然正确。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            显示结果如下:<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; AAAAAA111111 is 
            active<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BBBBBB333333 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; 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; AAAAAA111111 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; AAAAAA111111 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">asdjf@163.com</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 

⌨️ 快捷键说明

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