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

📄 os_core.ls1

📁 本RTOS参考 usOS-II, ARM-RTX
💻 LS1
📖 第 1 页 / 共 5 页
字号:
0082 E500     F      856             MOV     A,prio?245
0084 13              857             RRC     A
0085 13              858             RRC     A
0086 13              859             RRC     A
0087 541F            860             ANL     A,#01FH
0089 FF              861             MOV     R7,A
008A 900000   F      862             MOV     DPTR,#OSMapTbl
008D 93              863             MOVC    A,@A+DPTR
008E 4200     F      864             ORL     OSRdyGrp,A
                     865     ;         OSRdyTbl[prio>>3]      |= OSMapTbl[prio&0x07];   //prio&0x07-->prio%8
                     866                             ; SOURCE LINE # 176
0090 7400     F      867             MOV     A,#LOW (OSRdyTbl)
0092 2F              868             ADD     A,R7
0093 F8              869             MOV     R0,A
0094 E6              870             MOV     A,@R0
0095 FF              871             MOV     R7,A
0096 E500     F      872             MOV     A,prio?245
0098 5407            873             ANL     A,#07H
009A 93              874             MOVC    A,@A+DPTR
009B 4F              875             ORL     A,R7
009C F6              876             MOV     @R0,A
                     877     ;         
                     878     ;         //堆栈初始化
                     879     ;         //OSTaskStkInit(task, prio);
                     880     ;         pstack=Tasks_TCB[prio].stk;
                     881                             ; SOURCE LINE # 180
009D E500     F      882             MOV     A,prio?245
009F 75F00D          883             MOV     B,#0DH
00A2 A4              884             MUL     AB
00A3 2400     F      885             ADD     A,#LOW (Tasks_TCB+06H)
00A5 F8              886             MOV     R0,A
00A6 08              887             INC     R0
00A7 E6              888             MOV     A,@R0
00A8 FA              889             MOV     R2,A
00A9 08              890             INC     R0
00AA E6              891             MOV     A,@R0
00AB AE02            892             MOV     R6,AR2
00AD 8E00     F      893             MOV     pstack?248,R6
00AF F500     F      894             MOV     pstack?248+01H,A
A51 MACRO ASSEMBLER  OS_CORE                                                              06/06/2008 11:39:27 PAGE    15

                     895     ;         
                     896     ;         *pstack++ = (uint8)task;     //任务低地址进栈
                     897                             ; SOURCE LINE # 182
00B1 A900     F      898             MOV     R1,task?244+02H
00B3 AF01            899             MOV     R7,AR1
00B5 0500     F      900             INC     pstack?248+01H
00B7 E500     F      901             MOV     A,pstack?248+01H
00B9 AC00     F      902             MOV     R4,pstack?248
00BB 7002            903             JNZ     ?C0031
00BD 0500     F      904             INC     pstack?248
00BF                 905     ?C0031:
00BF 14              906             DEC     A
00C0 F582            907             MOV     DPL,A
00C2 8C83            908             MOV     DPH,R4
00C4 EF              909             MOV     A,R7
00C5 F0              910             MOVX    @DPTR,A
                     911     ;         *pstack++ = (uint16)task>>8; //任务高地址进栈
                     912                             ; SOURCE LINE # 183
00C6 E500     F      913             MOV     A,task?244+01H
00C8 FF              914             MOV     R7,A
00C9 0500     F      915             INC     pstack?248+01H
00CB E500     F      916             MOV     A,pstack?248+01H
00CD AC00     F      917             MOV     R4,pstack?248
00CF 7002            918             JNZ     ?C0032
00D1 0500     F      919             INC     pstack?248
00D3                 920     ?C0032:
00D3 14              921             DEC     A
00D4 F582            922             MOV     DPL,A
00D6 8C83            923             MOV     DPH,R4
00D8 EF              924             MOV     A,R7
00D9 F0              925             MOVX    @DPTR,A
                     926     ;         for(i=0; i<Tasks_TCB[prio].size; i++)//初始化清空堆栈
                     927                             ; SOURCE LINE # 184
                     928     ;---- Variable 'i?249' assigned to Register 'R6/R7' ----
00DA E4              929             CLR     A
00DB FF              930             MOV     R7,A
00DC FE              931             MOV     R6,A
00DD                 932     ?C0007:
00DD E500     F      933             MOV     A,prio?245
00DF 75F00D          934             MOV     B,#0DH
00E2 A4              935             MUL     AB
00E3 2400     F      936             ADD     A,#LOW (Tasks_TCB+09H)
00E5 F8              937             MOV     R0,A
00E6 E6              938             MOV     A,@R0
00E7 FC              939             MOV     R4,A
00E8 08              940             INC     R0
00E9 E6              941             MOV     A,@R0
00EA FD              942             MOV     R5,A
00EB C3              943             CLR     C
00EC EF              944             MOV     A,R7
00ED 9D              945             SUBB    A,R5
00EE EE              946             MOV     A,R6
00EF 9C              947             SUBB    A,R4
00F0 5018            948             JNC     ?C0008
                     949     ;         {
                     950                             ; SOURCE LINE # 185
                     951     ;            *pstack++ = 0;
                     952                             ; SOURCE LINE # 186
00F2 0500     F      953             INC     pstack?248+01H
00F4 E500     F      954             MOV     A,pstack?248+01H
00F6 AC00     F      955             MOV     R4,pstack?248
00F8 7002            956             JNZ     ?C0033
00FA 0500     F      957             INC     pstack?248
00FC                 958     ?C0033:
00FC 14              959             DEC     A
00FD F582            960             MOV     DPL,A
A51 MACRO ASSEMBLER  OS_CORE                                                              06/06/2008 11:39:27 PAGE    16

00FF 8C83            961             MOV     DPH,R4
0101 E4              962             CLR     A
0102 F0              963             MOVX    @DPTR,A
                     964     ;         }
                     965                             ; SOURCE LINE # 187
0103 0F              966             INC     R7
0104 BF0001          967             CJNE    R7,#00H,?C0034
0107 0E              968             INC     R6
0108                 969     ?C0034:
0108 80D3            970             SJMP    ?C0007
010A                 971     ?C0008:
                     972     ;         return (prio);
                     973                             ; SOURCE LINE # 188
010A AF00     F      974             MOV     R7,prio?245
010C 8002            975             SJMP    ?C0010
                     976     ;     }
                     977                             ; SOURCE LINE # 189
010E                 978     ?C0006:
                     979     ;     //OS_EXIT_CRITICAL();
                     980     ; //    IrqAll_Enable();    //总中断允许 IrqT0_Enable();          //打开T0中断允许
                     981     ;     return (0);
                     982                             ; SOURCE LINE # 192
010E 7F00            983             MOV     R7,#00H
                     984     ; }    
                     985                             ; SOURCE LINE # 193
0110                 986     ?C0010:
0110 D0D0            987             POP     PSW
0112 92AF            988             MOV     EA,C
0114 22              989             RET     
                     990     ; END OF _os_tsk_create_user
                     991     
                     992     ; 
                     993     ; #ifndef OS_TASK_SWITCH
                     994     ; //功能描述: 系统时钟中断服务函数
                     995     ; //#pragma disable  //禁止所有中断
                     996     ; void OSTickISR(void) interrupt 1  //OS_TIME_ISR
                     997     ; {uint8 data IEtemp;
                     998     ;     
                     999     ;     //TH0=T0H_COUNTER;
                    1000     ;     //TL0=T0L_COUNTER;
                    1001     ;     
                    1002     ;     IEtemp=IE;//保存中断
                    1003     ;     OS_AllIRQ_Unable(); //总中断禁止
                    1004     ;     
                    1005     ;     //IE &= B0000_0000; //IE &= B0000_0001; //保留外部中断原来状态,屏蔽掉其他中断
                    1006     ;     
                    1007     ; 
                    1008     ; //#if EN_TIMER_SHARING > 0
                    1009     ;     if(TH0==0)//==0说明是定时器溢出中断,!=0表示是软件设置的定时器中断
                    1010     ;     {
                    1011     ;        TH0=T0H_COUNTER;
                    1012     ;        TL0=T0L_COUNTER;
                    1013     ;        OSTimeTick();           //调用系统时钟处理函数
                    1014     ;     }//
                    1015     ;     
                    1016     ; //#else
                    1017     ; //  OSIntSendSignal(TIME_ISR_TASK_ID); // 唤醒ID为TIME_ISR_TASK_ID的任务
                    1018     ; //#endif
                    1019     ;     
                    1020     ;     
                    1021     ;     OSIntExit();                       //在完全退出中断时,才进行任务切换
                    1022     ;     
                    1023     ;     //OS_AllIRQ_Enable(); //总中断允许
                    1024     ;     IE=IEtemp;  //恢复所有中断状态
                    1025     ; }
                    1026     ; #else
A51 MACRO ASSEMBLER  OS_CORE                                                              06/06/2008 11:39:27 PAGE    17

                    1027     ;     
                    1028     ; #endif
                    1029     ; 
                    1030     ; /*
                    1031     ; 堆栈保存内容:
                    1032     ; 数据堆栈+函数地址+特殊功能积存器
                    1033     ; 
                    1034     ; //功能描述: 中断退出处理函数,在此进行中断后的任务切换
                    1035     ; //IRQ_Stack_Bottom任务中断后的堆栈栈顶
                    1036     ; //在退出中断时,不让进栈的数据出栈。在完全退出中断时,才进行任务切换,
                    1037     ; 1.1 保存当前任务堆栈
                    1038     ; 1.2 保存任务特殊功能寄存器
                    1039     ; 1.3 保存任务堆栈+任务特殊功能寄存器->堆栈备份空间
                    1040     ; 1.4 切换任务
                    1041     ; 2.1 从堆栈备份空间->恢复新的就绪的任务的堆栈
                    1042     ; 2.2 恢复任务特殊功能寄存器
                    1043     ; 2.3 将新任务原来断点地址压入堆栈
                    1044     ; */
                    1045     ; void OSIntExit(void)    SMALL
                    1046     
----                1047             RSEG  ?PR?OSIntExit?OS_CORE
0000                1048     OSIntExit:
                    1049             USING   0
                    1050                             ; SOURCE LINE # 247
                    1051     ; {char idata * stack_bottom;
                    1052     ;  char xdata * stack_bottom_bak;
                    1053     ;  //uint16 addr;
                    1054     ;  uint16 old_addr;
                    1055     ;  uint8 old_taskid;//
                    1056     ;     
                    1057     ;     old_taskid=OSCurrentTaskID;
                    1058                             ; SOURCE LINE # 254
0000 850000   F     1059             MOV     old_taskid?353,OSCurrentTaskID
                    1060     ;     OSFindNextRunningTask();        //查找下一个就绪的任务
                    1061                             ; SOURCE LINE # 255
0003 120000   F     1062             LCALL   OSFindNextRunningTask
                    1063     ;     if(old_taskid==OSCurrentTaskID) //任务不切换
                    1064                             ; SOURCE LINE # 256
0006 E500     F     1065             MOV     A,old_taskid?353
0008 6500     F     1066             XRL     A,OSCurrentTaskID
000A 7003           1067             JNZ     $ + 5H
000C 020000   F     1068             LJMP    ?C0012
000F                1069     ?C0011:
                    1070     ;       return;
                    1071     ;     
                    1072     ;     //系统不备份调用本函数压入的堆栈
                    1073     ;     old_addr=Read_data(SP--);     //读出刚才压入堆栈的函数地址.高地址
          

⌨️ 快捷键说明

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