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

📄 test.lst

📁 基于mega128的ucos参考源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
    034F 8446      LDD	R4,Z+14
    0350 01F1      MOVW	R30,R2
    0351 8050      LDD	R5,Z+0
    0352 2854      OR	R5,R4
    0353 8250      STD	Z+0,R5
(0709)     pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;
    0354 01C8      MOVW	R24,R16
    0355 9601      ADIW	R24,1
    0356 91E00206  LDS	R30,OSTCBCur
    0358 91F00207  LDS	R31,OSTCBCur+1
    035A 8447      LDD	R4,Z+15
    035B 01FC      MOVW	R30,R24
    035C 8050      LDD	R5,Z+0
    035D 2854      OR	R5,R4
    035E 8250      STD	Z+0,R5
    035F 940E0E1B  CALL	pop_gset1
    0361 9508      RET
_OS_EventTO:
  y                    --> R20
  pevent               --> R16
    0362 940E0E18  CALL	push_gset1
(0710) }
(0711) #endif
(0712) /*$PAGE*/
(0713) /*
(0714) *********************************************************************************************************
(0715) *                              MAKE TASK READY TO RUN BASED ON EVENT TIMEOUT
(0716) *
(0717) * Description: This function is called by other uC/OS-II services to make a task ready to run because a
(0718) *              timeout occurred.
(0719) *
(0720) * Arguments  : pevent   is a pointer to the event control block which is readying a task.
(0721) *
(0722) * Returns    : none
(0723) *
(0724) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0725) *********************************************************************************************************
(0726) */
(0727) #if OS_EVENT_EN > 0
(0728) void  OS_EventTO (OS_EVENT *pevent)
(0729) {
(0730)     INT8U  y;
(0731) 
(0732) 
(0733)     y                      = OSTCBCur->OSTCBY;
    0364 91E00206  LDS	R30,OSTCBCur
    0366 91F00207  LDS	R31,OSTCBCur+1
    0368 8545      LDD	R20,Z+13
(0734)     pevent->OSEventTbl[y] &= ~OSTCBCur->OSTCBBitX;
    0369 01C8      MOVW	R24,R16
    036A 9606      ADIW	R24,6
    036B 2E24      MOV	R2,R20
    036C 2433      CLR	R3
    036D 0E28      ADD	R2,R24
    036E 1E39      ADC	R3,R25
    036F 91E00206  LDS	R30,OSTCBCur
    0371 91F00207  LDS	R31,OSTCBCur+1
    0373 8446      LDD	R4,Z+14
    0374 9440      COM	R4
    0375 01F1      MOVW	R30,R2
    0376 8050      LDD	R5,Z+0
    0377 2054      AND	R5,R4
    0378 8250      STD	Z+0,R5
(0735)     if (pevent->OSEventTbl[y] == 0x00) {
    0379 01C8      MOVW	R24,R16
    037A 9606      ADIW	R24,6
    037B 2FE4      MOV	R30,R20
    037C 27FF      CLR	R31
    037D 0FE8      ADD	R30,R24
    037E 1FF9      ADC	R31,R25
    037F 8020      LDD	R2,Z+0
    0380 2022      TST	R2
    0381 F461      BNE	0x038E
(0736)         pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
    0382 01C8      MOVW	R24,R16
    0383 9601      ADIW	R24,1
    0384 91E00206  LDS	R30,OSTCBCur
    0386 91F00207  LDS	R31,OSTCBCur+1
    0388 8447      LDD	R4,Z+15
    0389 9440      COM	R4
    038A 01FC      MOVW	R30,R24
    038B 8050      LDD	R5,Z+0
    038C 2054      AND	R5,R4
    038D 8250      STD	Z+0,R5
(0737)     }
(0738)     OSTCBCur->OSTCBStat     = OS_STAT_RDY;       /* Set status to ready                                */
    038E 2422      CLR	R2
    038F 91E00206  LDS	R30,OSTCBCur
    0391 91F00207  LDS	R31,OSTCBCur+1
    0393 8622      STD	Z+10,R2
(0739)     OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;     /* No longer waiting for event                        */
    0394 2433      CLR	R3
    0395 91E00206  LDS	R30,OSTCBCur
    0397 91F00207  LDS	R31,OSTCBCur+1
    0399 8237      STD	Z+7,R3
    039A 8226      STD	Z+6,R2
    039B 940E0E1B  CALL	pop_gset1
    039D 9508      RET
_OS_EventWaitListInit:
  ptbl                 --> R20
  pevent               --> R16
    039E 940E0E18  CALL	push_gset1
(0740) }
(0741) #endif
(0742) /*$PAGE*/
(0743) /*
(0744) *********************************************************************************************************
(0745) *                                 INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST
(0746) *
(0747) * Description: This function is called by other uC/OS-II services to initialize the event wait list.
(0748) *
(0749) * Arguments  : pevent    is a pointer to the event control block allocated to the event.
(0750) *
(0751) * Returns    : none
(0752) *
(0753) * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
(0754) *********************************************************************************************************
(0755) */
(0756) #if OS_EVENT_EN > 0
(0757) void  OS_EventWaitListInit (OS_EVENT *pevent)
(0758) {
(0759)     INT8U  *ptbl;
(0760) 
(0761) 
(0762)     pevent->OSEventGrp = 0x00;                   /* No task waiting on event                           */
    03A0 2422      CLR	R2
    03A1 01F8      MOVW	R30,R16
    03A2 8221      STD	Z+1,R2
(0763)     ptbl               = &pevent->OSEventTbl[0];
    03A3 01A8      MOVW	R20,R16
    03A4 5F4A      SUBI	R20,0xFA
    03A5 4F5F      SBCI	R21,0xFF
(0764) 
(0765) #if OS_EVENT_TBL_SIZE > 0
(0766)     *ptbl++            = 0x00;
    03A6 01FA      MOVW	R30,R20
    03A7 9221      ST	R2,Z+
(0767) #endif
(0768) 
(0769) #if OS_EVENT_TBL_SIZE > 1
(0770)     *ptbl++            = 0x00;
    03A8 9221      ST	R2,Z+
    03A9 01AF      MOVW	R20,R30
    03AA 940E0E1B  CALL	pop_gset1
    03AC 9508      RET
_OS_InitEventList:
  pevent2              --> R20
  i                    --> R22
  pevent1              --> R10
    03AD 940E0E14  CALL	push_gset3
(0771) #endif
(0772) 
(0773) #if OS_EVENT_TBL_SIZE > 2
(0774)     *ptbl++            = 0x00;
(0775) #endif
(0776) 
(0777) #if OS_EVENT_TBL_SIZE > 3
(0778)     *ptbl++            = 0x00;
(0779) #endif
(0780) 
(0781) #if OS_EVENT_TBL_SIZE > 4
(0782)     *ptbl++            = 0x00;
(0783) #endif
(0784) 
(0785) #if OS_EVENT_TBL_SIZE > 5
(0786)     *ptbl++            = 0x00;
(0787) #endif
(0788) 
(0789) #if OS_EVENT_TBL_SIZE > 6
(0790)     *ptbl++            = 0x00;
(0791) #endif
(0792) 
(0793) #if OS_EVENT_TBL_SIZE > 7
(0794)     *ptbl              = 0x00;
(0795) #endif
(0796) }
(0797) #endif
(0798) /*$PAGE*/
(0799) /*
(0800) *********************************************************************************************************
(0801) *                                             INITIALIZATION
(0802) *                           INITIALIZE THE FREE LIST OF EVENT CONTROL BLOCKS
(0803) *
(0804) * Description: This function is called by OSInit() to initialize the free list of event control blocks.
(0805) *
(0806) * Arguments  : none
(0807) *
(0808) * Returns    : none
(0809) *********************************************************************************************************
(0810) */
(0811) 
(0812) static  void  OS_InitEventList (void)
(0813) {
(0814) #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
(0815) #if (OS_MAX_EVENTS > 1)
(0816)     INT16U     i;
(0817)     OS_EVENT  *pevent1;
(0818)     OS_EVENT  *pevent2;
(0819) 
(0820) 
(0821)     OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl));      /* Clear the event table                    */
    03AF E228      LDI	R18,0x28
    03B0 E030      LDI	R19,0
    03B1 E106      LDI	R16,0x16
    03B2 E013      LDI	R17,3
    03B3 D0AC      RCALL	_OS_MemClr
(0822)     pevent1 = &OSEventTbl[0];
    03B4 E186      LDI	R24,0x16
    03B5 E093      LDI	R25,3
    03B6 015C      MOVW	R10,R24
(0823)     pevent2 = &OSEventTbl[1];
    03B7 E14E      LDI	R20,0x1E
    03B8 E053      LDI	R21,3
(0824)     for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {                  /* Init. list of free EVENT control blocks  */
    03B9 2766      CLR	R22
    03BA 2777      CLR	R23
    03BB C00C      RJMP	0x03C8
(0825)         pevent1->OSEventType    = OS_EVENT_TYPE_UNUSED;
    03BC 2422      CLR	R2
    03BD 01F5      MOVW	R30,R10
    03BE 8220      STD	Z+0,R2
(0826)         pevent1->OSEventPtr     = pevent2;
    03BF 8355      STD	Z+5,R21
    03C0 8344      STD	Z+4,R20
(0827) #if OS_EVENT_NAME_SIZE > 1
(0828)         pevent1->OSEventName[0] = '?';                           /* Unknown name                             */
(0829)         pevent1->OSEventName[1] = OS_ASCII_NUL;
(0830) #endif
(0831)         pevent1++;
    03C1 01C5      MOVW	R24,R10
    03C2 9608      ADIW	R24,0x8
    03C3 015C      MOVW	R10,R24
(0832)         pevent2++;
    03C4 5F48      SUBI	R20,0xF8
    03C5 4F5F      SBCI	R21,0xFF
    03C6 5F6F      SUBI	R22,0xFF
    03C7 4F7F      SBCI	R23,0xFF
    03C8 3064      CPI	R22,4
    03C9 E0E0      LDI	R30,0
    03CA 077E      CPC	R23,R30
    03CB F380      BCS	0x03BC
(0833)     }
(0834)     pevent1->OSEventType            = OS_EVENT_TYPE_UNUSED;
    03CC 2422      CLR	R2
    03CD 01F5      MOVW	R30,R10
    03CE 8220      STD	Z+0,R2
(0835)     pevent1->OSEventPtr             = (OS_EVENT *)0;
    03CF 2433      CLR	R3
    03D0 8235      STD	Z+5,R3
    03D1 8224      STD	Z+4,R2
(0836) #if OS_EVENT_NAME_SIZE > 1
(0837)     pevent1->OSEventName[0]         = '?';                       
(0838)     pevent1->OSEventName[1]         = OS_ASCII_NUL;
(0839) #endif
(0840)     OSEventFreeList                 = &OSEventTbl[0];
    03D2 E186      LDI	R24,0x16
    03D3 E093      LDI	R25,3
    03D4 9390033F  STS	OSEventFreeList+1,R25
    03D6 9380033E  STS	OSEventFreeList,R24
    03D8 940E0E07  CALL	pop_gset3
    03DA 9508      RET
_OS_InitMisc:
    03DB 940E0E16  CALL	push_gset2
(0841) #else
(0842)     OSEventFreeList                 = &OSEventTbl[0];            /* Only have ONE event control block        */
(0843)     OSEventFreeList->OSEventType    = OS_EVENT_TYPE_UNUSED;
(0844)     OSEventFreeList->OSEventPtr     = (OS_EVENT *)0;
(0845) #if OS_EVENT_NAME_SIZE > 1
(0846)     OSEventFreeList->OSEventName[0] = '?';                       /* Unknown name                             */
(0847)     OSEventFreeList->OSEventName[1] = OS_ASCII_NUL;
(0848) #endif
(0849) #endif
(0850) #endif
(0851) }
(0852) /*$PAGE*/
(0853) /*
(0854) *********************************************************************************************************
(0855) *                                             INITIALIZATION
(0856) *                                    INITIALIZE MISCELLANEOUS VARIABLES
(0857) *
(0858) * Description: This function is called by OSInit() to initialize miscellaneous variables.
(0859) *
(0860) * Arguments  : none
(0861) *
(0862) * Returns    : none
(0863) *********************************************************************************************************
(0864) */
(0865) 
(0866) static  void  OS_InitMisc (void)
(0867) {
(0868) #if OS_TIME_GET_SET_EN > 0   
(0869)     OSTime        = 0L;                                          /* Clear the 32-bit system clock            */
(0870) #endif
(0871) 
(0872)     OSIntNesting  = 0;                                           /* Clear the interrupt nesting counter      */
    03DD 2422      CLR	R2
    03DE 92200315  STS	OSIntNesting,R2
(0873)     OSLockNesting = 0;                                           /* Clear the scheduling lock counter        */
    03E0 92200313  STS	OSLockNesting,R2
(0874) 
(0875)     OSTaskCtr     = 0;                                           /* Clear the number of tasks                */
    03E2 9220030C  STS	OSTaskCtr,R2
(0876) 
(0877)     OSRunning     = FALSE;                                       /* Indicate that multitasking not started   */
    03E4 9220030D  STS	OSRunning,R2
(0878)     
(0879)     OSCtxSwCtr    = 0;                                           /* Clear the context switch counter         */
    03E6 E040    

⌨️ 快捷键说明

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