📄 pjhost.lst
字号:
(0013) * 返 回 值:--
(0014) *******************************************************************************
(0015) */
(0016) void Init_AppTask8(void)
(0017) {
(0018) OSTaskStkSize = OS_TASK_8_STK_SIZE; // Setup the default stack size #define OS_TASK_8_STK_SIZE OS_TASK_STK_SIZE
0387 E080 LDI R24,0
0388 E091 LDI R25,1
0389 939009D5 STS OSTaskStkSize+1,R25
038B 938009D4 STS OSTaskStkSize,R24
(0019) OSTaskHardStkSize = OS_TASK_8_HARD_STK_SIZE; // Setup the default hardware stack size
038D E480 LDI R24,0x40
038E E090 LDI R25,0
038F 939009D3 STS OSTaskHardStkSize+1,R25
0391 938009D2 STS OSTaskHardStkSize,R24
(0020) OSTaskCreate(AppTask8, (void *)0, (OS_STK *)&AppTask8Stk[OSTaskStkSize-1],8);
0393 E088 LDI R24,0x8
0394 838A STD Y+2,R24
0395 E083 LDI R24,3
0396 E095 LDI R25,5
0397 91E009D4 LDS R30,OSTaskStkSize
0399 91F009D5 LDS R31,OSTaskStkSize+1
039B 9731 SBIW R30,1
039C 0FE8 ADD R30,R24
039D 1FF9 ADC R31,R25
039E 83F9 STD Y+1,R31
039F 83E8 STD Y+0,R30
03A0 2722 CLR R18
03A1 2733 CLR R19
03A2 E902 LDI R16,0x92
03A3 E010 LDI R17,0
03A4 940E0FB7 CALL _OSTaskCreate
03A6 9623 ADIW R28,3
03A7 9508 RET
_AppTask8:
msg --> Y+1
err --> Y+1
p_arg --> R20
03A8 940E134D CALL push_gset1
03AA 01A8 MOVW R20,R16
(0021) }
(0022) /*
(0023) *****************************************************************************
(0024) * 函数介绍:串口通信管理
(0025) * 输入参数:
(0026) * 输出参数:--
(0027) * 返 回 值:--
(0028) *******************************************************************************
(0029) */
(0030) void AppTask8(void *p_arg)
(0031) {
(0032) INT8U err ;
(0033) INT16U msg;
(0034) p_arg = p_arg;
03AB C005 RJMP 0x03B1
(0035) while (TRUE)
(0036) {
(0037) OSTimeDly(OS_TICKS_PER_SEC/100);
03AC E001 LDI R16,1
03AD E010 LDI R17,0
03AE 940E102F CALL _OSTimeDly
(0038) WDR();
03B0 95A8 WDR
03B1 CFFA RJMP 0x03AC
03B2 940E1350 CALL pop_gset1
03B4 9508 RET
FILE: D:\编写软件小系统\纯ucos\include\os_cpu_a.s
(0001) ;********************************************************************************************************
(0002) ; uC/OS-II
(0003) ; The Real-Time Kernel
(0004) ;
(0005) ; ATmega128 Specific code
(0006) ;
(0007) ;
(0008) ; File : OS_CPU_A.S
(0009) ; By : Ole Saether
(0010) ; Jean J. Labrosse
(0011) ;********************************************************************************************************
(0012) ; I/O PORT ADDRESSES
(0013) ;********************************************************************************************************
(0014)
(0015) BIT00 = 0x01
(0016) BIT01 = 0x02
(0017) BIT02 = 0x04
(0018) BIT03 = 0x08
(0019) BIT04 = 0x10
(0020) BIT05 = 0x20
(0021) BIT06 = 0x40
(0022) BIT07 = 0x80
(0023)
(0024) SREG = 0x3F
(0025) SPH = 0x3E
(0026) SPL = 0x3D
(0027) RAMPZ = 0x3B
(0028)
(0029) ;********************************************************************************************************
(0030) ; MACROS
(0031) ;********************************************************************************************************
(0032)
(0033) .macro PUSH_ALL ; Save all registers
(0034) ST -Y,R0
(0035) ST -Y,R1
(0036) ST -Y,R2
(0037) ST -Y,R3
(0038) ST -Y,R4
(0039) ST -Y,R5
(0040) ST -Y,R6
(0041) ST -Y,R7
(0042) ST -Y,R8
(0043) ST -Y,R9
(0044) ST -Y,R10
(0045) ST -Y,R11
(0046) ST -Y,R12
(0047) ST -Y,R13
(0048) ST -Y,R14
(0049) ST -Y,R15
(0050) ST -Y,R16
(0051) ST -Y,R17
(0052) ST -Y,R18
(0053) ST -Y,R19
(0054) ST -Y,R20
(0055) ST -Y,R21
(0056) ST -Y,R22
(0057) ST -Y,R23
(0058) ST -Y,R24
(0059) ST -Y,R25
(0060) ST -Y,R26
(0061) ST -Y,R27
(0062) ST -Y,R30
(0063) ST -Y,R31
(0064) IN R16,RAMPZ
(0065) ST -Y,R16
(0066) .endmacro
(0067)
(0068) .macro POP_ALL ; Restore all registers
(0069) LD R16,Y+
(0070) OUT RAMPZ,R16
(0071) LD R31,Y+
(0072) LD R30,Y+
(0073) LD R27,Y+
(0074) LD R26,Y+
(0075) LD R25,Y+
(0076) LD R24,Y+
(0077) LD R23,Y+
(0078) LD R22,Y+
(0079) LD R21,Y+
(0080) LD R20,Y+
(0081) LD R19,Y+
(0082) LD R18,Y+
(0083) LD R17,Y+
(0084) LD R16,Y+
(0085) LD R15,Y+
(0086) LD R14,Y+
(0087) LD R13,Y+
(0088) LD R12,Y+
(0089) LD R11,Y+
(0090) LD R10,Y+
(0091) LD R9,Y+
(0092) LD R8,Y+
(0093) LD R7,Y+
(0094) LD R6,Y+
(0095) LD R5,Y+
(0096) LD R4,Y+
(0097) LD R3,Y+
(0098) LD R2,Y+
(0099) LD R1,Y+
(0100) LD R0,Y+
(0101) .endmacro
(0102)
(0103) .macro PUSH_SP ; Save stack pointer
(0104) IN R16,SPH
(0105) ST -Y,R16
(0106) IN R16,SPL
(0107) ST -Y,R16
(0108) .endmacro
(0109)
(0110) .macro POP_SP ; Restore stack pointer
(0111) LD R16,Y+
(0112) OUT SPL,R16
(0113) LD R16,Y+
(0114) OUT SPH,R16
(0115) .endmacro
(0116)
(0117) .macro PUSH_SREG ; Save status register
(0118) IN R16,SREG
(0119) ST -Y,R16
(0120) .endmacro
(0121)
(0122) .macro POP_SREG ; Restore status registers
(0123) LD R16,Y+
(0124) OUT SREG,R16
(0125) .endmacro
(0126)
(0127) .area text(rel)
(0128)
(0129) ;/*$PAGE*/.
(0130) ;********************************************************************************************************
(0131) ; DISABLE/ENABLE INTERRUPTS USING OS_CRITICAL_METHOD #3
(0132) ;
(0133) ; Description : These functions are used to disable and enable interrupts using OS_CRITICAL_METHOD #3.
(0134) ;
(0135) ; OS_CPU_SR OSCPUSaveSR (void)
(0136) ; Get current value of SREG
(0137) ; Disable interrupts
(0138) ; Return original value of SREG
(0139) ;
(0140) ; void OSCPURestoreSR (OS_CPU_SR cpu_sr)
(0141) ; Set SREG to cpu_sr
(0142) ; Return
(0143) ;********************************************************************************************************
(0144)
(0145) _OS_CPU_SR_Save::
(0146) IN R16,SREG ; Get current state of interrupts disable flag
_OS_CPU_SR_Save:
03B5 B70F IN R16,0x3F
(0147) CLI ; Disable interrupts
03B6 94F8 BCLR 7
(0148) RET ; Return original SREG value in R16
03B7 9508 RET
(0149)
(0150)
(0151) _OS_CPU_SR_Restore::
(0152) OUT SREG,R16 ; Restore SREG
_OS_CPU_SR_Restore:
03B8 BF0F OUT 0x3F,R16
(0153) RET ; Return
03B9 9508 RET
(0154)
(0155) ;/*$PAGE*/.
(0156) ;********************************************************************************************************
(0157) ; START HIGHEST PRIORITY TASK READY-TO-RUN
(0158) ;
(0159) ; Description : This function is called by OSStart() to start the highest priority task that was created
(0160) ; by your application before calling OSStart().
(0161) ;
(0162) ; Note(s) : 1) The (data)stack frame is assumed to look as follows:
(0163) ;
(0164) ; OSTCBHighRdy->OSTCBStkPtr --> SPL of (return) stack pointer (Low memory)
(0165) ; SPH of (return) stack pointer
(0166) ; Flags to load in status register
(0167) ; R31
(0168) ; R30
(0169) ; R27
(0170) ; .
(0171) ; .
(0172) ; R0
(0173) ; PCH
(0174) ; PCL (High memory)
(0175) ;
(0176) ; where the stack pointer points to the task start address.
(0177) ;
(0178) ;
(0179) ; 2) OSStartHighRdy() MUST:
(0180) ; a) Call OSTaskSwHook() then,
(0181) ; b) Set OSRunning to TRUE,
(0182) ; c) Switch to the highest priority task.
(0183) ;********************************************************************************************************
(0184)
(0185) _OSStartHighRdy::
(0186) CALL _OSTaskSwHook ; Invoke user defined context switch hook
_OSStartHighRdy:
03BA 940E1225 CALL _OSTaskSwHook
(0187) LDS R16,_OSRunning ; Indicate that we are multitasking
03BC 9100090E LDS R16,OSRunning
(0188) INC R16 ;
03BE 9503 INC R16
(0189) STS _OSRunning,R16 ;
03BF 9300090E STS OSRunning,R16
(0190)
(0191) LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
03C1 91E00803 LDS R30,OSTCBHighRdy
(0192) LDS R31,_OSTCBHighRdy+1 ; ready to run
03C3 91F00804 LDS R31,OSTCBHighRdy+1
(0193) LD R28,Z+ ; Load Y (R29:R28) pointer
03C5 91C1 LD R28,Z+
(0194) LD R29,Z+ ;
03C6 91D1 LD R29,Z+
03C7 9109 LD R16,Y+
03C8 BF0D OUT 0x3D,R16
03C9 9109 LD R16,Y+
(0195)
(0196) POP_SP ; Restore stack pointer
03CA BF0E OUT 0x3E,R16
03CB 9109 LD R16,Y+
(0197) POP_SREG ; Restore status register
03CC BF0F OUT 0x3F,R16
03CD 9109 LD R16,Y+
03CE BF0B OUT 0x3B,R16
03CF 91F9 LD R31,Y+
03D0 91E9 LD R30,Y+
03D1 91B9 LD R27,Y+
03D2 91A9 LD R26,Y+
03D3 9199 LD R25,Y+
03D4 9189 LD R24,Y+
03D5 9179 LD R23,Y+
03D6 9169 LD R22,Y+
03D7 9159 LD R21,Y+
03D8 9149 LD R20,Y+
03D9 9139 LD R19,Y+
03DA 9129 LD R18,Y+
03DB 9119 LD R17,Y+
03DC 9109 LD R16,Y+
03DD 90F9 LD R15,Y+
03DE 90E9 LD R14,Y+
03DF 90D9 LD R13,Y+
03E0 90C9 LD R12,Y+
03E1 90B9 LD R11,Y+
03E2 90A9 LD R10,Y+
03E3 9099 LD R9,Y+
03E4 9089 LD R8,Y+
03E5 9079 LD R7,Y+
03E6 9069 LD R6,Y+
03E7 9059 LD R5,Y+
03E8 9049 LD R4,Y+
03E9 9039 LD R3,Y+
03EA 9029 LD R2,Y+
03EB 9019 LD R1,Y+
(0198) POP_ALL ; Restore all registers
03EC 9009 LD R0,Y+
(0199) RET ; Start task
03ED 9508 RET
_OSCtxSw:
03EE 920A ST R0,-Y
03EF 921A ST R1,-Y
03F0 922A ST R2,-Y
03F1 923A ST R3,-Y
03F2 924A ST R4,-Y
03F3 925A ST R5,-Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -