📄 test.lss
字号:
818: cb 01 movw r24, r22
81a: 88 0f add r24, r24
81c: 99 1f adc r25, r25
81e: 84 0f add r24, r20
820: 95 1f adc r25, r21
822: 9c 01 movw r18, r24
824: 53 e0 ldi r21, 0x03 ; 3
826: 22 0f add r18, r18
828: 33 1f adc r19, r19
82a: 5a 95 dec r21
82c: e1 f7 brne .-8 ; 0x826 <SososCreateTask+0x5c>
82e: dc 01 movw r26, r24
830: aa 0f add r26, r26
832: bb 1f adc r27, r27
834: a2 0f add r26, r18
836: b3 1f adc r27, r19
838: a0 58 subi r26, 0x80 ; 128
83a: bf 4f sbci r27, 0xFF ; 255
83c: 8d 91 ld r24, X+
83e: 9c 91 ld r25, X
840: 11 97 sbiw r26, 0x01 ; 1
842: 89 2b or r24, r25
844: 09 f0 breq .+2 ; 0x848 <SososCreateTask+0x7e>
846: 85 c0 rjmp .+266 ; 0x952 <SososCreateTask+0x188>
return SOSOS_TASK_EXIST;
if(SOSOS_TASK_STACK_TOP<((SOSOS_ADDRESS)SOSOS_TASK_STACK+(SOSOS_ADDRESS)stack_size-1))
848: 20 91 7d 00 lds r18, 0x007D
84c: 30 91 7e 00 lds r19, 0x007E
850: 8f 81 ldd r24, Y+7 ; 0x07
852: 98 85 ldd r25, Y+8 ; 0x08
854: 8e 53 subi r24, 0x3E ; 62
856: 9f 4f sbci r25, 0xFF ; 255
858: 28 17 cp r18, r24
85a: 39 07 cpc r19, r25
85c: 18 f4 brcc .+6 ; 0x864 <SososCreateTask+0x9a>
85e: 8c ef ldi r24, 0xFC ; 252
860: 90 e0 ldi r25, 0x00 ; 0
862: 79 c0 rjmp .+242 ; 0x956 <SososCreateTask+0x18c>
return SOSOS_TASK_STACK_LIMITED;
#endif
//设置堆栈指针
DISABLE_INTERRUPT();
864: f8 94 cli
stack=(unsigned char *)SOSOS_TASK_STACK_TOP;
#if STACK_SIZE_REPORT_ENABLE == 1
TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_BUTTON=SOSOS_TASK_STACK_TOP;
866: fd 01 movw r30, r26
868: 33 83 std Z+3, r19 ; 0x03
86a: 22 83 std Z+2, r18 ; 0x02
TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_SIZE=stack_size;
86c: 8f 81 ldd r24, Y+7 ; 0x07
86e: 98 85 ldd r25, Y+8 ; 0x08
870: 95 83 std Z+5, r25 ; 0x05
872: 84 83 std Z+4, r24 ; 0x04
#endif
SOSOS_TASK_STACK_TOP-=stack_size;
874: c9 01 movw r24, r18
876: ef 81 ldd r30, Y+7 ; 0x07
878: f8 85 ldd r31, Y+8 ; 0x08
87a: 8e 1b sub r24, r30
87c: 9f 0b sbc r25, r31
87e: 90 93 7e 00 sts 0x007E, r25
882: 80 93 7d 00 sts 0x007D, r24
//任务地址入栈
*stack--=(SOSOS_ADDRESS)task;
886: 89 81 ldd r24, Y+1 ; 0x01
888: f9 01 movw r30, r18
88a: 80 83 st Z, r24
88c: 21 50 subi r18, 0x01 ; 1
88e: 30 40 sbci r19, 0x00 ; 0
890: 3e 83 std Y+6, r19 ; 0x06
892: 2d 83 std Y+5, r18 ; 0x05
*stack--=(SOSOS_ADDRESS)task>>8;
894: e9 81 ldd r30, Y+1 ; 0x01
896: fa 81 ldd r31, Y+2 ; 0x02
898: 8f 2f mov r24, r31
89a: 99 27 eor r25, r25
89c: f9 01 movw r30, r18
89e: 80 83 st Z, r24
8a0: ed 81 ldd r30, Y+5 ; 0x05
8a2: fe 81 ldd r31, Y+6 ; 0x06
8a4: 31 97 sbiw r30, 0x01 ; 1
//寄存器入栈
*stack--=0;//R1 zero register
8a6: 10 82 st Z, r1
8a8: 31 97 sbiw r30, 0x01 ; 1
*stack--=0;//R0 temp register
8aa: 10 82 st Z, r1
8ac: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x10;//R16
8ae: 80 e1 ldi r24, 0x10 ; 16
8b0: 80 83 st Z, r24
8b2: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x80;//SREG 开启全局中断
8b4: 80 e8 ldi r24, 0x80 ; 128
8b6: 80 83 st Z, r24
8b8: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x12;//R18
8ba: 82 e1 ldi r24, 0x12 ; 18
8bc: 80 83 st Z, r24
8be: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x13;//R19
8c0: 83 e1 ldi r24, 0x13 ; 19
8c2: 80 83 st Z, r24
8c4: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x14;//R20
8c6: 84 e1 ldi r24, 0x14 ; 20
8c8: 80 83 st Z, r24
8ca: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x15;//R21
8cc: 85 e1 ldi r24, 0x15 ; 21
8ce: 80 83 st Z, r24
8d0: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x16;//R22
8d2: 86 e1 ldi r24, 0x16 ; 22
8d4: 80 83 st Z, r24
8d6: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x17;//R23
8d8: 87 e1 ldi r24, 0x17 ; 23
8da: 80 83 st Z, r24
8dc: 9f 01 movw r18, r30
8de: 21 50 subi r18, 0x01 ; 1
8e0: 30 40 sbci r19, 0x00 ; 0
*stack--=(SOSOS_ADDRESS)ptr;//R24
8e2: 8b 81 ldd r24, Y+3 ; 0x03
8e4: f9 01 movw r30, r18
8e6: 80 83 st Z, r24
8e8: 21 50 subi r18, 0x01 ; 1
8ea: 30 40 sbci r19, 0x00 ; 0
8ec: 3e 83 std Y+6, r19 ; 0x06
8ee: 2d 83 std Y+5, r18 ; 0x05
*stack--=(SOSOS_ADDRESS)ptr>>8;//R25
8f0: eb 81 ldd r30, Y+3 ; 0x03
8f2: fc 81 ldd r31, Y+4 ; 0x04
8f4: 8f 2f mov r24, r31
8f6: 99 27 eor r25, r25
8f8: f9 01 movw r30, r18
8fa: 80 83 st Z, r24
8fc: ed 81 ldd r30, Y+5 ; 0x05
8fe: fe 81 ldd r31, Y+6 ; 0x06
900: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x1a;//R26
902: 8a e1 ldi r24, 0x1A ; 26
904: 80 83 st Z, r24
906: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x1b;//R27
908: 8b e1 ldi r24, 0x1B ; 27
90a: 80 83 st Z, r24
90c: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x1e;//R30
90e: 8e e1 ldi r24, 0x1E ; 30
910: 80 83 st Z, r24
912: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x1f;//R31
914: 8f e1 ldi r24, 0x1F ; 31
916: 80 83 st Z, r24
918: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x1c;//R28
91a: 8c e1 ldi r24, 0x1C ; 28
91c: 80 83 st Z, r24
91e: 31 97 sbiw r30, 0x01 ; 1
*stack--=0x1d;//R29
920: 8d e1 ldi r24, 0x1D ; 29
922: 80 83 st Z, r24
//保存栈顶
TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_POINT=(SOSOS_ADDRESS)stack;
924: 31 97 sbiw r30, 0x01 ; 1
926: 11 96 adiw r26, 0x01 ; 1
928: fc 93 st X, r31
92a: ee 93 st -X, r30
set_bit(SOSOS_TASK_READY[pri],id);//设置任务就绪状态
92c: fb 01 movw r30, r22
92e: e6 58 subi r30, 0x86 ; 134
930: ff 4f sbci r31, 0xFF ; 255
932: 20 81 ld r18, Z
934: 81 e0 ldi r24, 0x01 ; 1
936: 90 e0 ldi r25, 0x00 ; 0
938: 02 c0 rjmp .+4 ; 0x93e <SososCreateTask+0x174>
93a: 88 0f add r24, r24
93c: 99 1f adc r25, r25
93e: 4a 95 dec r20
940: e2 f7 brpl .-8 ; 0x93a <SososCreateTask+0x170>
942: 28 2b or r18, r24
944: 20 83 st Z, r18
TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STATE=TASK_STATE_OK;
946: fd 01 movw r30, r26
948: 16 82 std Z+6, r1 ; 0x06
ENABLE_INTERRUPT();
94a: 78 94 sei
94c: 80 e0 ldi r24, 0x00 ; 0
94e: 90 e0 ldi r25, 0x00 ; 0
950: 02 c0 rjmp .+4 ; 0x956 <SososCreateTask+0x18c>
return SOSOS_OK;
952: 8d ef ldi r24, 0xFD ; 253
954: 90 e0 ldi r25, 0x00 ; 0
956: 28 96 adiw r28, 0x08 ; 8
958: 0f b6 in r0, 0x3f ; 63
95a: f8 94 cli
95c: de bf out 0x3e, r29 ; 62
95e: 0f be out 0x3f, r0 ; 63
960: cd bf out 0x3d, r28 ; 61
962: df 91 pop r29
964: cf 91 pop r28
966: 0f 91 pop r16
968: 08 95 ret
0000096a <SososGetTaskId>:
}
#endif
#if SOSOS_GET_TASK_ID_ENABLE == 1
unsigned char SososGetTaskId(void)//获得当前任务ID
//返回值的高半字节是任务优先级,低半字节是任务在该优先级的ID
{
96a: 8a 2d mov r24, r10
96c: 82 95 swap r24
96e: 80 7f andi r24, 0xF0 ; 240
970: 8b 0d add r24, r11
return((SOSOS_RUNNING_TASK_PRI<<4)+SOSOS_RUNNING_TASK_ID);
}
972: 99 27 eor r25, r25
974: 08 95 ret
00000976 <SososSuspendTask>:
#endif
#if SOSOS_SUSPEND_TASK_ENABLE == 1
void SososSuspendTask(unsigned char pri,unsigned char id)//挂起任务
//挂起指定的任务,不要在中断中调用该函数
//pri:优先级
//id:任务在本优先级的表示号
{
ENTER_CRITICAL();
976: 0f b6 in r0, 0x3f ; 63
978: f8 94 cli
97a: 0f 92 push r0
clr_bit(SOSOS_TASK_READY[pri],id);//清除任务就绪状态
97c: e8 2f mov r30, r24
97e: ff 27 eor r31, r31
980: e6 58 subi r30, 0x86 ; 134
982: ff 4f sbci r31, 0xFF ; 255
984: 90 81 ld r25, Z
986: 21 e0 ldi r18, 0x01 ; 1
988: 30 e0 ldi r19, 0x00 ; 0
98a: 06 2e mov r0, r22
98c: 02 c0 rjmp .+4 ; 0x992 <SososSuspendTask+0x1c>
98e: 22 0f add r18, r18
990: 33 1f adc r19, r19
992: 0a 94 dec r0
994: e2 f7 brpl .-8 ; 0x98e <SososSuspendTask+0x18>
996: 20 95 com r18
998: 92 23 and r25, r18
99a: 90 83 st Z, r25
if((pri==SOSOS_RUNNING_TASK_PRI)&&(id==SOSOS_RUNNING_TASK_ID)){
99c: 8a 15 cp r24, r10
99e: 19 f4 brne .+6 ; 0x9a6 <SososSuspendTask+0x30>
9a0: 6b 15 cp r22, r11
9a2: 09 f4 brne .+2 ; 0x9a6 <SososSuspendTask+0x30>
SososScheder();//挂起的是当前任务,重新调度
9a4: 8b de rcall .-746 ; 0x6bc <SososScheder>
}
EXIT_CRITICAL();
9a6: 0f 90 pop r0
9a8: 0f be out 0x3f, r0 ; 63
9aa: 08 95 ret
000009ac <SososResumeTask>:
}
#endif
#if SOSOS_RESUME_TASK_ENABLE == 1
void SososResumeTask(unsigned char pri,unsigned char id)//恢复任务
//恢复指定的任务,不要在中断中调用该函数
//pri:优先级
//id:任务在本优先级的表示号
{
ENTER_CRITICAL();
9ac: 0f b6 in r0, 0x3f ; 63
9ae: f8 94 cli
9b0: 0f 92 push r0
set_bit(SOSOS_TASK_READY[pri],id);//设置任务就绪状态
9b2: e8 2f mov r30, r24
9b4: ff 27 eor r31, r31
9b6: e6 58 subi r30, 0x86 ; 134
9b8: ff 4f sbci r31, 0xFF ; 255
9ba: 90 81 ld r25, Z
9bc: 21 e0 ldi r18, 0x01 ; 1
9be: 30 e0 ldi r19, 0x00 ; 0
9c0: 02 c0 rjmp .+4 ; 0x9c6 <SososResumeTask+0x1a>
9c2: 22 0f add r18, r18
9c4: 33 1f adc r19, r19
9c6: 6a 95 dec r22
9c8: e2 f7 brpl .-8 ; 0x9c2 <SososResumeTask+0x16>
9ca: 92 2b or r25, r18
9cc: 90 83 st Z, r25
#if SOSOS_MUTEX_ENABLE == 1
if(SOSOS_RUNNING_INHERIT_PRI>pri){
9ce: 86 15 cp r24, r6
9d0: 08 f4 brcc .+2 ; 0x9d4 <SososResumeTask+0x28>
#else
if(SOSOS_RUNNING_TASK_PRI>pri){
#endif
SososScheder();//恢复的任务优先级更高,重新调度
9d2: 74 de rcall .-792 ; 0x6bc <SososScheder>
}
EXIT_CRITICAL();
9d4: 0f 90 pop r0
9d6: 0f be out 0x3f, r0 ; 63
9d8: 08 95 ret
000009da <SososDelay>:
}
#endif
#if SOSOS_DELAY_TASK_ENABLE == 1
void SososDelay(unsigned int ticks)//任务延时
//将任务延时指定的时间间隔,不要在中断中调用该函数
//ticks:延时值,为0就立即返回
{
9da: 9c 01 movw r18, r24
if(ticks>0){
9dc: 89 2b or r24, r25
9de: 61 f1 breq .+88 ; 0xa38 <SososDelay+0x5e>
ENTER_CRITICAL();
9e0: 0f b6 in r0, 0x3f ; 63
9e2: f8 94 cli
9e4: 0f 92 push r0
set_bit(SOSOS_WAIT_TASK,SOSOS_RUNNING_TASK_PRI);
9e6: ea 2d mov r30, r10
9e8: ff 27 eor r31, r31
9ea: 81 e0 ldi r24, 0x01 ; 1
9ec: 90 e0 ldi r25, 0x00 ; 0
9ee: 0e 2e mov r0, r30
9f0: 02 c0 rjmp .+4 ; 0x9f6 <SososDelay+0x1c>
9f2: 88 0f add r24, r24
9f4: 99 1f adc r25, r25
9f6: 0a 94 dec r0
9f8: e2 f7 brpl .-8 ; 0x9f2 <SososDelay+0x18>
9fa: 98 2a or r9, r24
SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]=SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]&(~SOSOS_RUNNING_TASK_ID_INDEX);//清除任务就绪状态
9fc: df 01 movw r26, r30
9fe: a6 58 subi r26
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -