📄 ucos_ii.lst
字号:
017B EF8F LDI R24,0xFF
017C BB8A OUT P1A,R24
(0129) DDRB = 0xff;
017D BB87 OUT P17,R24
(0130) PORTA=0;
017E 2422 CLR R2
017F BA2B OUT P1B,R2
(0131) PORTB=0;
0180 BA28 OUT P18,R2
(0132) Delay_error(DELAY_COUNT);
0181 E00A LDI R16,0xA
0182 E010 LDI R17,0
0183 DFBF RCALL _Delay_error
(0133) DDRA = 0xff;
0184 EF8F LDI R24,0xFF
0185 BB8A OUT P1A,R24
(0134) DDRB = 0xff;
0186 BB87 OUT P17,R24
(0135) PORTA=0xff;
0187 BB8B OUT P1B,R24
(0136) PORTB=0xff;
0188 BB88 OUT P18,R24
(0137) Delay_error(DELAY_COUNT);
0189 E00A LDI R16,0xA
018A E010 LDI R17,0
018B DFB7 RCALL _Delay_error
018C 5F4F SUBI R20,0xFF
018D 4F5F SBCI R21,0xFF
018E 1746 CP R20,R22
018F 0757 CPC R21,R23
0190 F354 BLT 0x017B
(0138) }
(0139) OS_EXIT_CRITICAL();
0191 930A ST R16,-Y
0192 910F POP R16
0193 BF0F OUT P3F,R16
0194 9109 LD R16,Y+
(0140) }
0195 D800 RCALL pop_gset2
0196 9508 RET
(0141)
(0142) /*
(0143) ********************************************************************************
(0144) * TASK SWITCH HOOK
(0145) *
(0146) * Description:
(0147) * This function is called when a task switch is performed. This allows you to
(0148) * perform other operations during a context switch.
(0149) *
(0150) * Arguments: none
(0151) *
(0152) * Note(s):
(0153) * 1) Interrupts are disabled during this call.
(0154) * 2) It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB
(0155) * of the task that will be 'switched in' (i.e. the highest priority task)
(0156) * and, 'OSTCBCur' points to the task being switched out (i.e. the
(0157) * preempted task).
(0158) ********************************************************************************
(0159) */
(0160) void OSTaskSwHook (void)
(0161) {
(0162) }
_OSTaskSwHook:
0197 9508 RET
_main:
0198 9723 SBIW R28,3
FILE: G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\ucos-ii-source\test1.c
(0001) /*
(0002) */
(0003) #define Test1_GLOBALS
(0004) #include "includes.h"
(0005)
(0006) //******************************************************************************
(0007) // Variablen
(0008) OS_STK Task2Stack[OS_TASK_DEF_STK_SIZE]; // startup task stack
(0009) OS_STK Task3Stack[OS_TASK_DEF_STK_SIZE];
(0010)
(0011) //*****************************************************************************
(0012) // Prototypes
(0013) void Task2(void *pdata);
(0014) void Task3(void *pdata);
(0015) //*****************************************************************************
(0016)
(0017) //*****************************************************************************
(0018) // Interrupt Timer/Counter0 Overflow
(0019) // OVF_Takt: 4MHz / 1024 / 39 = 10ms
(0020) #pragma interrupt_handler OSTickISR:8
(0021) //#pragma interrupt_handler test_OSTickISR0:8
(0022)
(0023) void main()
(0024) {
(0025) CLI();//close interrupt
0199 94F8 BCLR 7
(0026) ProgramRest(FLASH_WHEN_RESET);
019A E003 LDI R16,3
019B E010 LDI R17,0
019C DFAB RCALL _ProgramRest
(0027) OSInit(); // OS init
019D D25D RCALL _OSInit
(0028) //check OSTCBFreeList;
(0029) if(OSRunning || (0==OSTCBFreeList))//stack destroyed
019E 90200204 LDS R2,_OSRunning
01A0 2022 TST R2
01A1 F441 BNE 0x01AA
01A2 902001FF LDS R2,_OSTCBFreeList
01A4 90300200 LDS R3,_OSTCBFreeList+1
01A6 2022 TST R2
01A7 F419 BNE 0x01AB
01A8 2033 TST R3
01A9 F409 BNE 0x01AB
(0030) goto OSTASKCREATE_ERROR;
01AA C02C RJMP 0x01D7
(0031)
(0032) if(OS_NO_ERR!=OSTaskCreate(Task2,
01AB E082 LDI R24,2
01AC 838A STD R24,2+Y
01AD E780 LDI R24,0x70
01AE E091 LDI R25,1
01AF 8388 STD R24,0+Y
01B0 8399 STD R25,1+Y
01B1 E322 LDI R18,0x32
01B2 E030 LDI R19,0
01B3 E10C LDI R16,0x1C
01B4 E010 LDI R17,0
01B5 D5E4 RCALL _OSTaskCreate
01B6 2300 TST R16
01B7 F009 BEQ 0x01B9
(0033) (void *)(int)'2',
(0034) &Task2Stack[OS_TASK_DEF_STK_SIZE-1],
(0035) TaskStartPrio))
(0036) goto OSTASKCREATE_ERROR;
01B8 C01E RJMP 0x01D7
(0037)
(0038) if(OSRunning || (0==OSTCBFreeList))//stack destroyed
01B9 90200204 LDS R2,_OSRunning
01BB 2022 TST R2
01BC F441 BNE 0x01C5
01BD 902001FF LDS R2,_OSTCBFreeList
01BF 90300200 LDS R3,_OSTCBFreeList+1
01C1 2022 TST R2
01C2 F419 BNE 0x01C6
01C3 2033 TST R3
01C4 F409 BNE 0x01C6
(0039) goto OSTASKCREATE_ERROR;
01C5 C011 RJMP 0x01D7
(0040)
(0041) if(OS_NO_ERR!=OSTaskCreate(Task3,
01C6 E083 LDI R24,3
01C7 838A STD R24,2+Y
01C8 E080 LDI R24,0
01C9 E091 LDI R25,1
01CA 8388 STD R24,0+Y
01CB 8399 STD R25,1+Y
01CC E323 LDI R18,0x33
01CD E030 LDI R19,0
01CE E10A LDI R16,0x1A
01CF E010 LDI R17,0
01D0 D5C9 RCALL _OSTaskCreate
01D1 2300 TST R16
01D2 F009 BEQ 0x01D4
(0042) (void *)(int)'3',
(0043) &Task3Stack[OS_TASK_DEF_STK_SIZE-1],
(0044) TaskStartPrio+1))
(0045) goto OSTASKCREATE_ERROR;
01D3 C003 RJMP 0x01D7
(0046)
(0047) TC2_Init();
01D4 D0B4 RCALL _TC2_Init
(0048)
(0049) SEI();
01D5 9478 BSET 7
(0050) //check OSTCBCur
(0051) //if(0==OSTCBCur)goto OSTASKCREATE_ERROR;
(0052) OSStart(); // start multitasking
01D6 D36F RCALL _OSStart
(0053) //error
(0054) OSTASKCREATE_ERROR:
(0055) //dead loop
(0056) ProgramError();
01D7 DF92 RCALL _ProgramError
(0057) }
01D8 9623 ADIW R28,3
01D9 9508 RET
_Task2:
data --> R20
01DA D79B RCALL push_gset1
01DB D99C RCALL 0x0B78
(0058)
(0059) //*****************************************************************************
(0060) void Task2(void *data){
(0061) Task2_porta(data);
01DC D002 RCALL _Task2_porta
(0062) }
01DD D79B RCALL pop_gset1
01DE 9508 RET
_Task2_porta:
j --> R20
i --> R22
data --> R10
01DF D7B0 RCALL push_gset3
01E0 2EA0 MOV R10,R16
01E1 2EB1 MOV R11,R17
(0063) void Task2_porta(void *data){
(0064) INT8U i,j=0;
01E2 2744 CLR R20
(0065) DDRA=0xff;
01E3 EF8F LDI R24,0xFF
01E4 BB8A OUT P1A,R24
01E5 C005 RJMP 0x01EB
(0066) while(1)
(0067) {
(0068) i++;
01E6 9563 INC R22
(0069) PORTA=i;
01E7 BB6B OUT P1B,R22
(0070) OSTimeDly(10);
01E8 E00A LDI R16,0xA
01E9 E010 LDI R17,0
01EA D666 RCALL _OSTimeDly
01EB CFFA RJMP 0x01E6
(0071) }
(0072) }
01EC D7AB RCALL pop_gset3
01ED 9508 RET
_Task3:
i --> R20
j --> R22
k --> R10
data --> R20
01EE D7A1 RCALL push_gset3
01EF 2F40 MOV R20,R16
01F0 2F51 MOV R21,R17
(0073)
(0074) void Task3(void *data){
01F1 C014 RJMP 0x0206
(0075) unsigned char i,j,k;
(0076) while(1)
(0077) {
(0078) DDRC=0xff;
01F2 EF8F LDI R24,0xFF
01F3 BB84 OUT P14,R24
(0079) SEI();
01F4 9478 BSET 7
(0080) for(i=0;i<8;i++)
01F5 2744 CLR R20
01F6 C00D RJMP 0x0204
(0081) {
(0082) j=1;
01F7 E061 LDI R22,1
(0083) for(k=0;k<=i;k++)
01F8 24AA CLR R10
01F9 C002 RJMP 0x01FC
(0084) j*=2;
01FA 0F66 LSL R22
01FB 94A3 INC R10
01FC 154A CP R20,R10
01FD F7E0 BCC 0x01FA
(0085) asm("com %j");
01FE 9560 COM R22
(0086) PORTC=j;
01FF BB65 OUT P15,R22
(0087) OSTimeDly(10);
0200 E00A LDI R16,0xA
0201 E010 LDI R17,0
0202 D64E RCALL _OSTimeDly
0203 9543 INC R20
0204 3048 CPI R20,0x8
0205 F388 BCS 0x01F7
0206 CFEB RJMP 0x01F2
(0088) }
(0089) }
(0090) }
0207 D790 RCALL pop_gset3
0208 9508 RET
_OSTaskStkInit:
stks --> R10
tmp --> R22
stk --> R20
opt --> Y+10
ptos --> Y+8
pdata --> R12
task --> R22
0209 D789 RCALL push_gset4
020A 2EC2 MOV R12,R18
020B 2ED3 MOV R13,R19
020C 2F60 MOV R22,R16
020D 2F71 MOV R23,R17
FILE: G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\ucos-ii-source\os_cpu_c.c
(0001) /*
(0002) ********************************************************************************
(0003) * uC/OS-II
(0004) * The Real-Time Kernel
(0005) *
(0006) * AT90 Specific code
(0007) *
(0008) * File: OS_CPU_C.C
(0009) * By:
(0010) * Modified by:
(0011) * Revision:
(0012) *
(0013) *
(0014) *
(0015) ********************************************************************************
(0016) */
(0017)
(0018) #define OS_CPU_GLOBALS
(0019) #include "includes.h"
(0020)
(0021) /*
(0022) ********************************************************************************
(0023) * INITIALIZE A TASK'S STACK
(0024) *
(0025) * Description:
(0026) * This function is called by either OSTaskCreate() or OSTaskCreateExt() to
(0027) * initialize the stack frame of the task being created. This function is
(0028) * highly processor specific.
(0029) *
(0030) * Arguments:
(0031) * task - is a pointer to the task code
(0032) *
(0033) * pdata - is a pointer to a user supplied data area that will be passed to the
(0034) * task when the task first executes.
(0035) *
(0036) * ptos - is a pointer to the top of stack. It is assumed that 'ptos' points to
(0037) * the highest valid address on the stack.
(0038) *
(0039) * opt - specifies options that can be used to alter the behavior of
(0040) OSTaskStkInit(). (see uCOS_II.H for OS_TASK_OPT_???).
(0041) *
(0042) * Returns:
(0043) * Always returns the location of the new top-of-stack' once the processor
(0044) * registers have been placed on the stack in the proper order.
(0045) *
(0046) * Note(s):
(0047) * Interrupts are enabled when your task starts executing. You can change this
(0048) * by setting the SREG to 0x00 instead. In this case, interrupts would be
(0049) * disabled upon task startup. The application code would be responsible for
(0050) * enabling interrupts at the beginning of the task code. You will need to
(0051) * modify OSTaskIdle() and OSTaskStat() so that they enable interrupts. Failure
(0052) * to do this will make your system crash! The AVR return stack is placed 64
(0053) * bytes above the start of the (512 byte) stack. This provides 32 levels of
(0054) * function call nesting which should be more than enough for most applications
(0055) * (see the "read.me" file for more info).
(0056) *
(0057) ********************************************************************************
(0058) */
(0059) OS_STK *OSTaskStkInit (void (*task)(void *pd),
(0060) void *pdata, OS_STK *ptos, INT16U opt){
(0061)
(0062) INT8U *stk;
(0063) INT8U *stks; // Temp. variable used for setting up AVR hardware stack
(0064) INT16U tmp;
(0065)
(0066)
(0067) opt = opt; // 'opt' is not used, prevent warning
(0068) stk = (INT8U *)ptos; // Wandlung von ptos in Bytezeiger
020E 8548 LDD R20,8+Y
020F 8559 LDD R21,9+Y
(0069) // AVR return stack ("hardware stack")
(0070) //from IAR C
(0071) //stks = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-64);/* AVR return stack ("hardware stack") */
(0072) //from ICC AVR C
(0073) //stks = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-32);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -