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

📄 os_core.lis

📁 非剥夺型占先式minOS_iccavr avr单片机 icc编译环境
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                         .module OS_Core.c
                         .area text(rom, con, rel)
 0000                   .dbfile C:\icc\minOS_iccavr\OS_Core.c
 0000                   .dbfunc s OSInit _OSInit fI
                       ;              i -> R16
                       ;        pOS_TCB -> R18,R19
                         .even
 0000                 _OSInit::
 0000                   .dbline -1
 0000                   .dbline 18
                       ; /*
                       ; *********************************************************************************************************
                       ; *                                      minOS 0.01v
                       ; *                                The Real-Time OS Kernel
                       ; *                                  All Rights Reserved
                       ; * File : OS_Core.C
                       ; * 作者 : 21icbbs网友 LM7556 ,2004年7月   by : LM7556 , China , 2004-2004 
                       ; *
                       ; *********************************************************************************************************
                       ; */
                       ; 
                       ; 
                       ; #define  OS_GLOBALS                           /* Declare GLOBAL variables   */
                       ; #include "OS_Includes.h"
                       ; 
                       ; // initialization OSTCB --- 初始化任务控制块.
                       ; void OSInit(void) 
                       ; {   INT8U i;
 0000                   .dbline 20
                       ;     OS_TCB *pOS_TCB;
                       ;     pOS_TCB=OSTCB;
 0000 20E0              ldi R18,<_OSTCB
 0002 30E0              ldi R19,>_OSTCB
 0004                   .dbline 21
                       ;     for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++) 
 0004 0027              clr R16
 0006 0EC0              rjmp L6
 0008                 L3:
 0008                   .dbline 22
 0008                   .dbline 23
 0008 2224              clr R2
 000A 3324              clr R3
 000C E22F              mov R30,R18
 000E F32F              mov R31,R19
 0010 2082              std z+0,R2
 0012 3182              std z+1,R3
 0014                   .dbline 24
 0014 8DEF              ldi R24,253
 0016 8283              std z+2,R24
 0018                   .dbline 25
 0018 2224              clr R2
 001A 2382              std z+3,R2
 001C 3482              std z+4,R3
 001E                   .dbline 26
 001E                 L4:
 001E                   .dbline 21
 001E 0395              inc R16
 0020 2B5F              subi R18,251  ; offset = 5
 0022 3F4F              sbci R19,255
 0024                 L6:
 0024                   .dbline 21
 0024 0530              cpi R16,5
 0026 80F3              brlo L3
 0028                   .dbline -2
 0028                   .dbline 27
                       ;     {
                       ;         pOS_TCB->OSStkTop=(INT16U)NULL;
                       ;         pOS_TCB->OSTaskStatus=OS_TASK_Suspend;
                       ;         pOS_TCB->OSTimeDly=0;
                       ;     }
                       ; }
 0028                 L2:
 0028                   .dbline 0 ; func end
 0028 0895              ret
 002A                   .dbsym r i 16 c
 002A                   .dbsym r pOS_TCB 18 pX
 002A                   .dbfunc s OSStart _OSStart fI
                         .even
 002A                 _OSStart::
 002A                   .dbline -1
 002A                   .dbline 31
                       ; 
                       ; //Start OS --- 启动OS
                       ; void OSStart(void) 
                       ; {
 002A                   .dbline 32
                       ;     Init_OS_Timer();
 002A 00D0              rcall _InitOSTimer
 002C                   .dbline 33
                       ;     OS_TASK_CrtPrio=Task_main_Prio;
 002C 2224              clr R2
 002E 20924A00          sts _OS_TASK_CrtPrio,R2
 0032                   .dbline 34
                       ;     OSTCB[OS_TASK_CrtPrio].OSTaskStatus=OS_TASK_Run;
 0032 222D              mov R18,R2
 0034 3327              clr R19
 0036 05E0              ldi R16,5
 0038 10E0              ldi R17,0
 003A 00D0              rcall mpy16s
 003C E02F              mov R30,R16
 003E F12F              mov R31,R17
 0040 80E0              ldi R24,<_OSTCB+2
 0042 90E0              ldi R25,>_OSTCB+2
 0044 E80F              add R30,R24
 0046 F91F              adc R31,R25
 0048 8BEF              ldi R24,251
 004A 8083              std z+0,R24
 004C                   .dbline 35
                       ;     OS_INT_ENABLE();
 004C                   .dbline 36
                       ;     OS_TASK_INT();
 004C 00D0              rcall _OSCtxSw
 004E                   .dbline -2
 004E                   .dbline 37
                       ; }
 004E                 L7:
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbfunc s OSPrioHighRdy _OSPrioHighRdy fI
                       ;              i -> R16
                       ;        pOS_TCB -> R18,R19
                         .even
 0050                 _OSPrioHighRdy:
 0050 00D0              rcall push_gset2
 0052                   .dbline -1
 0052                   .dbline 41
                       ; 
                       ; //返回优先级最高的处于就绪态任务的优先级,否则返回no_TASK_Rdy。
                       ; static INT8U OSPrioHighRdy(void) 
                       ; { INT8U i;
 0052                   .dbline 43
                       ;     OS_TCB *pOS_TCB;
                       ;     pOS_TCB=OSTCB;
 0052 20E0              ldi R18,<_OSTCB
 0054 30E0              ldi R19,>_OSTCB
 0056                   .dbline 44
                       ;     for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++) 
 0056 0027              clr R16
 0058 24C0              rjmp L13
 005A                 L10:
 005A                   .dbline 45
                       ;     {
 005A                   .dbline 46
                       ;         if ((pOS_TCB->OSStkTop!=(INT8U)NULL) & (pOS_TCB->OSTaskStatus==OS_TASK_Rdy)) {return i;}
 005A E22F              mov R30,R18
 005C F32F              mov R31,R19
 005E 2080              ldd R2,z+0
 0060 3180              ldd R3,z+1
 0062 2220              tst R2
 0064 11F4              brne X0
 0066 3320              tst R3
 0068 19F0              breq L16
 006A                 X0:
 006A 61E0              ldi R22,1
 006C 70E0              ldi R23,0
 006E 02C0              rjmp L17
 0070                 L16:
 0070 6627              clr R22
 0072 7727              clr R23
 0074                 L17:
 0074 E22F              mov R30,R18
 0076 F32F              mov R31,R19
 0078 8281              ldd R24,z+2
 007A 8C3F              cpi R24,252
 007C 19F4              brne L18
 007E 41E0              ldi R20,1
 0080 50E0              ldi R21,0
 0082 02C0              rjmp L19
 0084                 L18:
 0084 4427              clr R20
 0086 5527              clr R21
 0088                 L19:
 0088 262E              mov R2,R22
 008A 372E              mov R3,R23
 008C 2422              and R2,R20
 008E 3522              and R3,R21
 0090 2220              tst R2
 0092 11F4              brne X1
 0094 3320              tst R3
 0096 11F0              breq L14
 0098                 X1:
 0098                   .dbline 46
 0098                   .dbline 46
 0098 1127              clr R17
 009A 07C0              rjmp L9
 009C                 L14:
 009C                   .dbline 47
 009C                 L11:
 009C                   .dbline 44
 009C 0395              inc R16
 009E 2B5F              subi R18,251  ; offset = 5
 00A0 3F4F              sbci R19,255
 00A2                 L13:
 00A2                   .dbline 44
 00A2 0530              cpi R16,5
 00A4 D0F2              brlo L10
 00A6                   .dbline 48
                       ;     }
                       ;     return no_TASK_Rdy;
 00A6 0FEF              ldi R16,255
 00A8 10E0              ldi R17,0
 00AA                   .dbline -2
 00AA                 L9:
 00AA 00D0              rcall pop_gset2
 00AC                   .dbline 0 ; func end
 00AC 0895              ret
 00AE                   .dbsym r i 16 c
 00AE                   .dbsym r pOS_TCB 18 pX
 00AE                   .dbfunc s OSTimeTick _OSTimeTick fI
                       ;              i -> R20
                       ;        pOS_TCB -> R22,R23
                         .even
 00AE                 _OSTimeTick::
 00AE 00D0              rcall push_gset2
 00B0                   .dbline -1
 00B0                   .dbline 54
                       ; }
                       ; 
                       ; //Task OSTimeDly Decrease 1 per Time Tick --- 每个时钟节拍,任务等待延时的时间OSTimeDly减1.
                       ; //如果任务的OSTimeDly减到0,把任务设置为准备就绪OS_TASK_Rdy。
                       ; void OSTimeTick(void) 
                       ; { INT8U i;
 00B0                   .dbline 56
                       ;     OS_TCB *pOS_TCB;
                       ;     pOS_TCB=OSTCB;
 00B0 60E0              ldi R22,<_OSTCB
 00B2 70E0              ldi R23,>_OSTCB
 00B4                   .dbline 57
                       ;     for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++) 
 00B4 4427              clr R20
 00B6 21C0              rjmp L24
 00B8                 L21:
 00B8                   .dbline 58
                       ;     {
 00B8                   .dbline 59
                       ;         if (pOS_TCB->OSTimeDly>OS_TASK_TimeOut) 
 00B8 E62F              mov R30,R22
 00BA F72F              mov R31,R23
 00BC 2380              ldd R2,z+3
 00BE 3480              ldd R3,z+4
 00C0 2220              tst R2
 00C2 11F4              brne X2
 00C4 3320              tst R3
 00C6 B1F0              breq L25
 00C8                 X2:
 00C8                   .dbline 60
                       ;         {
 00C8                   .dbline 61
                       ;             if (--pOS_TCB->OSTimeDly==0) {pOS_TCB->OSTaskStatus=OS_TASK_Rdy;}
 00C8 862F              mov R24,R22
 00CA 972F              mov R25,R23
 00CC 0396              adiw R24,3

⌨️ 快捷键说明

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