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

📄 ucos-port2.lst

📁 把UCOSII移植到AVR MEGA8上的程序 应用程序为驱动1602显示器,虽说有些简单,但可测试UCOS的运行
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0100) #endif
(0101)     OSCtxSwCtr    = 0;                                           /* Clear the context switch counter         */
    00F6 E040      LDI	R20,0
    00F7 E050      LDI	R21,0
    00F8 E060      LDI	R22,0
    00F9 E070      LDI	R23,0
    00FA 935001DA  STS	OSCtxSwCtr+1,R21
    00FC 934001D9  STS	OSCtxSwCtr,R20
    00FE 937001DC  STS	OSCtxSwCtr+3,R23
    0100 936001DB  STS	OSCtxSwCtr+2,R22
(0102)     OSRdyGrp      = 0x00;                                        /* Clear the ready list                     */
    0102 922001AD  STS	OSRdyGrp,R2
(0103)     prdytbl       = &OSRdyTbl[0];
    0104 EA8A      LDI	R24,0xAA
    0105 E091      LDI	R25,1
    0106 839E      STD	Y+6,R25
    0107 838D      STD	Y+5,R24
(0104)     for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
    0108 2444      CLR	R4
    0109 2455      CLR	R5
    010A C009      RJMP	0x0114
(0105)         *prdytbl++ = 0x00;
    010B 2422      CLR	R2
    010C 81ED      LDD	R30,Y+5
    010D 81FE      LDD	R31,Y+6
    010E 9221      ST	R2,Z+
    010F 83FE      STD	Y+6,R31
    0110 83ED      STD	Y+5,R30
    0111 01C2      MOVW	R24,R4
    0112 9601      ADIW	R24,1
    0113 012C      MOVW	R4,R24
    0114 01C2      MOVW	R24,R4
    0115 3083      CPI	R24,3
    0116 E0E0      LDI	R30,0
    0117 079E      CPC	R25,R30
    0118 F390      BCS	0x010B
(0106)     }
(0107) 
(0108)     OSPrioCur     = 0;
    0119 2422      CLR	R2
    011A 922001AF  STS	OSPrioCur,R2
(0109)     OSPrioHighRdy = 0;
    011C 922001AE  STS	OSPrioHighRdy,R2
(0110)     OSTCBHighRdy  = (OS_TCB *)0;                                 /* TCB Initialization                       */
    011E 2433      CLR	R3
    011F 9230011F  STS	OSTCBHighRdy+1,R3
    0121 9220011E  STS	OSTCBHighRdy,R2
(0111)     OSTCBCur      = (OS_TCB *)0;
    0123 92300123  STS	OSTCBCur+1,R3
    0125 92200122  STS	OSTCBCur,R2
(0112)     OSTCBList     = (OS_TCB *)0;
    0127 9230011D  STS	OSTCBList+1,R3
    0129 9220011C  STS	OSTCBList,R2
(0113)     for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {                 /* Clear the priority table                 */
    012B 2444      CLR	R4
    012C 2455      CLR	R5
    012D C010      RJMP	0x013E
(0114)         OSTCBPrioTbl[i] = (OS_TCB *)0;
    012E E002      LDI	R16,2
    012F E010      LDI	R17,0
    0130 0192      MOVW	R18,R4
    0131 DC1A      RCALL	empy16s
    0132 01F8      MOVW	R30,R16
    0133 EF82      LDI	R24,0xF2
    0134 E090      LDI	R25,0
    0135 0FE8      ADD	R30,R24
    0136 1FF9      ADC	R31,R25
    0137 2422      CLR	R2
    0138 2433      CLR	R3
    0139 8231      STD	Z+1,R3
    013A 8220      STD	Z+0,R2
    013B 01C2      MOVW	R24,R4
    013C 9601      ADIW	R24,1
    013D 012C      MOVW	R4,R24
    013E 01C2      MOVW	R24,R4
    013F 3185      CPI	R24,0x15
    0140 E0E0      LDI	R30,0
    0141 079E      CPC	R25,R30
    0142 F358      BCS	0x012E
(0115)     }
(0116)     ptcb1 = &OSTCBTbl[0];
    0143 E982      LDI	R24,0x92
    0144 E090      LDI	R25,0
    0145 017C      MOVW	R14,R24
(0117)     ptcb2 = &OSTCBTbl[1];
    0146 EA82      LDI	R24,0xA2
    0147 E090      LDI	R25,0
    0148 839C      STD	Y+4,R25
    0149 838B      STD	Y+3,R24
(0118)     for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs                  */
    014A 2444      CLR	R4
    014B 2455      CLR	R5
    014C C00F      RJMP	0x015C
(0119)         ptcb1->OSTCBNext = ptcb2;
    014D 01F7      MOVW	R30,R14
    014E 800B      LDD	R0,Y+3
    014F 801C      LDD	R1,Y+4
    0150 8213      STD	Z+3,R1
    0151 8202      STD	Z+2,R0
(0120)         ptcb1++;
    0152 01C7      MOVW	R24,R14
    0153 9640      ADIW	R24,0x10
    0154 017C      MOVW	R14,R24
(0121)         ptcb2++;
    0155 01C0      MOVW	R24,R0
    0156 9640      ADIW	R24,0x10
    0157 839C      STD	Y+4,R25
    0158 838B      STD	Y+3,R24
    0159 01C2      MOVW	R24,R4
    015A 9601      ADIW	R24,1
    015B 012C      MOVW	R4,R24
    015C 01C2      MOVW	R24,R4
    015D 3085      CPI	R24,5
    015E E0E0      LDI	R30,0
    015F 079E      CPC	R25,R30
    0160 F360      BCS	0x014D
(0122)     }
(0123)     ptcb1->OSTCBNext = (OS_TCB *)0;                              /* Last OS_TCB                              */
    0161 2422      CLR	R2
    0162 2433      CLR	R3
    0163 01F7      MOVW	R30,R14
    0164 8233      STD	Z+3,R3
    0165 8222      STD	Z+2,R2
(0124)     OSTCBFreeList    = &OSTCBTbl[0];
    0166 E982      LDI	R24,0x92
    0167 E090      LDI	R25,0
    0168 93900121  STS	OSTCBFreeList+1,R25
    016A 93800120  STS	OSTCBFreeList,R24
(0125) 
(0126) #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
(0127)     #if OS_MAX_EVENTS == 1                                       
(0128)     OSEventFreeList              = &OSEventTbl[0];               /* Only have ONE event control block        */
(0129)     OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
(0130)     OSEventFreeList->OSEventPtr  = (OS_EVENT *)0;
(0131)     #else
(0132)     pevent1 = &OSEventTbl[0];
    016C EB83      LDI	R24,0xB3
    016D E091      LDI	R25,1
    016E 015C      MOVW	R10,R24
(0133)     pevent2 = &OSEventTbl[1];
    016F EB8C      LDI	R24,0xBC
    0170 E091      LDI	R25,1
    0171 016C      MOVW	R12,R24
(0134)     for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {                  /* Init. list of free EVENT control blocks  */
    0172 2444      CLR	R4
    0173 2455      CLR	R5
    0174 C00E      RJMP	0x0183
(0135)         pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
    0175 2422      CLR	R2
    0176 01F5      MOVW	R30,R10
    0177 8220      STD	Z+0,R2
(0136)         pevent1->OSEventPtr  = pevent2;
    0178 82D5      STD	Z+5,R13
    0179 82C4      STD	Z+4,R12
(0137)         pevent1++;
    017A 01C5      MOVW	R24,R10
    017B 9609      ADIW	R24,0x9
    017C 015C      MOVW	R10,R24
(0138)         pevent2++;
    017D 01C6      MOVW	R24,R12
    017E 9609      ADIW	R24,0x9
    017F 016C      MOVW	R12,R24
    0180 01C2      MOVW	R24,R4
    0181 9601      ADIW	R24,1
    0182 012C      MOVW	R4,R24
    0183 01C2      MOVW	R24,R4
    0184 3083      CPI	R24,3
    0185 E0E0      LDI	R30,0
    0186 079E      CPC	R25,R30
    0187 F368      BCS	0x0175
(0139)     }
(0140)     pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
    0188 2422      CLR	R2
    0189 01F5      MOVW	R30,R10
    018A 8220      STD	Z+0,R2
(0141)     pevent1->OSEventPtr  = (OS_EVENT *)0;
    018B 2433      CLR	R3
    018C 8235      STD	Z+5,R3
    018D 8224      STD	Z+4,R2
(0142)     OSEventFreeList      = &OSEventTbl[0];
    018E EB83      LDI	R24,0xB3
    018F E091      LDI	R25,1
    0190 939001D8  STS	OSEventFreeList+1,R25
    0192 938001D7  STS	OSEventFreeList,R24
(0143)     #endif
(0144) #endif
(0145) 
(0146) #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
(0147)     OS_FlagInit();                                               /* Initialize the event flag structures     */
(0148) #endif
(0149) 
(0150) #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
(0151)     OS_QInit();                                                  /* Initialize the message queue structures  */
(0152) #endif
(0153) 
(0154) #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
(0155)     OS_MemInit();                                                /* Initialize the memory manager            */
(0156) #endif
(0157) 
(0158)     /* ------------------------------------- CREATION OF 'IDLE' TASK --------------------------------------- */
(0159) #if OS_TASK_CREATE_EXT_EN > 0
(0160)     #if OS_STK_GROWTH == 1
(0161)     (void)OSTaskCreateExt(OS_TaskIdle,
(0162)                           (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
(0163)                           &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */
(0164)                           OS_IDLE_PRIO,                              /* Lowest priority level                */
(0165)                           OS_TASK_IDLE_ID,
(0166)                           &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */
(0167)                           OS_TASK_IDLE_STK_SIZE,
(0168)                           (void *)0,                                 /* No TCB extension                     */
(0169)                           OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
(0170)     #else
(0171)     (void)OSTaskCreateExt(OS_TaskIdle,
(0172)                           (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
(0173)                           &OSTaskIdleStk[0],                         /* Set Top-Of-Stack                     */
(0174)                           OS_IDLE_PRIO,                              /* Lowest priority level                */
(0175)                           OS_TASK_IDLE_ID,
(0176)                           &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack                  */
(0177)                           OS_TASK_IDLE_STK_SIZE,
(0178)                           (void *)0,                                 /* No TCB extension                     */
(0179)                           OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
(0180)     #endif
(0181) #else
(0182)     #if OS_STK_GROWTH == 1
(0183)     (void)OSTaskCreate(OS_TaskIdle,
    0194 E184      LDI	R24,0x14
    0195 838A      STD	Y+2,R24
    0196 EA83      LDI	R24,0xA3
    0197 E091      LDI	R25,1
    0198 8399      STD	Y+1,R25
    0199 8388      STD	Y+0,R24
    019A 2722      CLR	R18
    019B 2733      CLR	R19
    019C E206      LDI	R16,0x26
    019D E010      LDI	R17,0
    019E 924F      PUSH	R4
    019F 925F      PUSH	R5
    01A0 D67D      RCALL	_OSTaskCreate
    01A1 905F      POP	R5
    01A2 904F      POP	R4
(0184)                        (void *)0,
(0185)                        &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
(0186)                        OS_IDLE_PRIO);
(0187)     #else
(0188)     (void)OSTaskCreate(OS_TaskIdle,
(0189)                        (void *)0,
(0190)                        &OSTaskIdleStk[0],
(0191)                        OS_IDLE_PRIO);
(0192)     #endif
(0193) #endif
(0194) 
(0195)     /* ------------------------------- CREATION OF 'STATISTIC' TASK ---------------------------------- */
(0196) #if OS_TASK_STAT_EN > 0
(0197)     #if OS_TASK_CREATE_EXT_EN > 0
(0198)         #if OS_STK_GROWTH == 1
(0199)         (void)OSTaskCreateExt(OS_TaskStat,
(0200)                               (void *)0,                                   /* No args passed to OS_TaskStat()*/
(0201)                               &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Top-Of-Stack               */
(0202)                               OS_STAT_PRIO,                                /* One higher than the idle task  */
(0203)                               OS_TASK_STAT_ID,
(0204)                               &OSTaskStatStk[0],                           /* Set Bottom-Of-Stack            */
(0205)                               OS_TASK_STAT_STK_SIZE,
(0206)                               (void *)0,                                   /* No TCB extension               */
(0207)                               OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
(0208)         #else
(0209)         (void)OSTaskCreateExt(OS_TaskStat,
(0210)                               (void *)0,                                   /* No args passed to OS_TaskStat()*/
(0211)                               &OSTaskStatStk[0],                           /* Set Top-Of-Stack               */
(0212)                               OS_STAT_PRIO,                                /* One higher than the idle task  */
(0213)                               OS_TASK_STAT_ID,
(0214)                               &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Bottom-Of-Stack            */
(0215)                               OS_TASK_STAT_STK_SIZE,
(0216)                               (void *)0,                                   /* No TCB extension               */
(0217)                               OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
(0218)         #endif
(0219)     #else
(0220)         #if OS_STK_GROWTH == 1
(0221)         (void)OSTaskCreate(OS_TaskStat,
(0222)                            (void *)0,                                      /* No args passed to OS_TaskStat()*/
(0223)                            &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],      /* Set Top-Of-Stack               */
(0224)                            OS_STAT_PRIO);                                  /* One higher than the idle task  */
(0225)         #else
(0226)         (void)OSTaskCreate(OS_TaskStat,
(0227)                            (void *)0,                                      /* No args passed to OS_TaskStat()*/
(0228)                            &OSTaskStatStk[0],                              /* Set Top-Of-Stack               */
(0229)                            OS_STAT_PRIO);                                  /* One higher than the idle task  */
(0230)         #endif
(0231)     #endif
(0232) #endif
(0233) 
(0234) #if OS_VERSION >= 204
(0235)     OSInitHookEnd();                                                       /* Call port specific init. code  */
    01A3 924F      PUSH	R4
    01A4 925F      PUSH	R5
    01A5 D334      RCALL	_OSInitHookEnd
    01A6 905F      POP	R5
    01A7 904F      POP	R4
    01A8 9627      ADIW	R28,7
    01A9 DBE4      RCALL	pop_gset5
    01AA 9508      RET
_OSIntEnter:
  cpu_sr               --> R20
    01AB DBEC      RCALL	push_gset1
(0236) #endif
(0237) }
(0238) /*$PAGE*/
(0239) /*
(0240) *********************************************************************************************************
(0241) *                                              ENTER ISR
(0242) *
(0243) * Description: This function is used to notify uC/OS-II that you are about to service an interrupt
(0244) *              service routine (ISR).  This allows uC/OS-II to keep track of interrupt nesting and thus
(0245) *              only perform rescheduling at the last nested ISR.
(0246) *
(0247) * Arguments  : none
(0248) *
(0249) * Returns    : none
(0250) *
(0251) * Notes      : 1) Your ISR can directly increment OSIntNesting without calling this function because
(0252) *                 OSIntNesting has been declared 'global'.  You MUST, however, be sure that the increment
(0253) *                 is performed 'indivisibly' by your processor to ensure proper access to this critical
(0254) *                 resource.
(0255) *              2) You MUST still call OSIntExit() even though you increment OSIntNesting directly.
(0256) *              3) You MUST invoke OSIntEnter() and OSIntExit() in pair.  In other words, for every call
(0257) *                 to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() at the
(0258) *                 end of the ISR.
(0259) *********************************************************************************************************

⌨️ 快捷键说明

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