📄 test.lss
字号:
SOSOS_RUNNING_INHERIT_PRI=mutex->INHERIT_PRI;
648: 66 2e mov r6, r22
SOSOS_RUNNING_TASK_PRI=mutex->OWN_TASK_PRI;
64a: a5 2e mov r10, r21
SOSOS_RUNNING_TASK_ID=mutex->OWN_TASK_ID;
64c: b4 2e mov r11, r20
SOSOS_RUNNING_TASK_ID_INDEX=1<<SOSOS_RUNNING_TASK_ID;
64e: ce 01 movw r24, r28
650: 02 c0 rjmp .+4 ; 0x656 <SososSched+0xc4>
652: 88 0f add r24, r24
654: 99 1f adc r25, r25
656: 2a 95 dec r18
658: e2 f7 brpl .-8 ; 0x652 <SososSched+0xc0>
65a: c8 2e mov r12, r24
}
}
mutex=(SOSOS_MUTEX *)(mutex->NEXT_MUTEX);
65c: 8d 91 ld r24, X+
65e: 9c 91 ld r25, X
660: 00 97 sbiw r24, 0x00 ; 0
662: 11 f0 breq .+4 ; 0x668 <SososSched+0xd6>
664: dc 01 movw r26, r24
666: d9 cf rjmp .-78 ; 0x61a <SososSched+0x88>
}
}//互斥型信号量队列有成员
#endif
SP=TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STACK_POINT;//切换堆栈指针
668: ea 2d mov r30, r10
66a: ff 27 eor r31, r31
66c: ee 0f add r30, r30
66e: ff 1f adc r31, r31
670: eb 0d add r30, r11
672: f1 1d adc r31, r1
674: cf 01 movw r24, r30
676: 63 e0 ldi r22, 0x03 ; 3
678: 88 0f add r24, r24
67a: 99 1f adc r25, r25
67c: 6a 95 dec r22
67e: e1 f7 brne .-8 ; 0x678 <SososSched+0xe6>
680: ee 0f add r30, r30
682: ff 1f adc r31, r31
684: e8 0f add r30, r24
686: f9 1f adc r31, r25
688: e0 58 subi r30, 0x80 ; 128
68a: ff 4f sbci r31, 0xFF ; 255
68c: 80 81 ld r24, Z
68e: 91 81 ldd r25, Z+1 ; 0x01
690: 9e bf out 0x3e, r25 ; 62
692: 8d bf out 0x3d, r24 ; 61
//寄存器出栈
SOSOS_POP_REGISTER();
694: df 91 pop r29
696: cf 91 pop r28
698: ff 91 pop r31
69a: ef 91 pop r30
69c: bf 91 pop r27
69e: af 91 pop r26
6a0: 9f 91 pop r25
6a2: 8f 91 pop r24
6a4: 7f 91 pop r23
6a6: 6f 91 pop r22
6a8: 5f 91 pop r21
6aa: 4f 91 pop r20
6ac: 3f 91 pop r19
6ae: 2f 91 pop r18
6b0: 0f 91 pop r16
6b2: 0f bf out 0x3f, r16 ; 63
6b4: 0f 91 pop r16
6b6: 0f 90 pop r0
6b8: 1f 90 pop r1
__asm__ __volatile__("RET \n\t");
6ba: 08 95 ret
000006bc <SososScheder>:
}
#endif
#if SOSOS_TASK_ENALBE == 1
void SososScheder(void) __attribute__ ((naked));//任务调度器
void SososScheder(void)//任务调度器
//本函数只在系统内部使用,进入时中断是关闭的
{
//寄存器入栈
SOSOS_PUSH_REGISTER();
6bc: 1f 92 push r1
6be: 0f 92 push r0
6c0: 0f 93 push r16
6c2: 0f b7 in r16, 0x3f ; 63
6c4: 0f 93 push r16
6c6: 11 24 eor r1, r1
6c8: 2f 93 push r18
6ca: 3f 93 push r19
6cc: 4f 93 push r20
6ce: 5f 93 push r21
6d0: 6f 93 push r22
6d2: 7f 93 push r23
6d4: 8f 93 push r24
6d6: 9f 93 push r25
6d8: af 93 push r26
6da: bf 93 push r27
6dc: ef 93 push r30
6de: ff 93 push r31
6e0: cf 93 push r28
6e2: df 93 push r29
TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STACK_POINT=SP;//保存正在运行任务的栈指针
6e4: 8d b7 in r24, 0x3d ; 61
6e6: 9e b7 in r25, 0x3e ; 62
6e8: ea 2d mov r30, r10
6ea: ff 27 eor r31, r31
6ec: ee 0f add r30, r30
6ee: ff 1f adc r31, r31
6f0: eb 0d add r30, r11
6f2: f1 1d adc r31, r1
6f4: 9f 01 movw r18, r30
6f6: b3 e0 ldi r27, 0x03 ; 3
6f8: 22 0f add r18, r18
6fa: 33 1f adc r19, r19
6fc: ba 95 dec r27
6fe: e1 f7 brne .-8 ; 0x6f8 <SososScheder+0x3c>
700: ee 0f add r30, r30
702: ff 1f adc r31, r31
704: e2 0f add r30, r18
706: f3 1f adc r31, r19
708: e0 58 subi r30, 0x80 ; 128
70a: ff 4f sbci r31, 0xFF ; 255
70c: 91 83 std Z+1, r25 ; 0x01
70e: 80 83 st Z, r24
SososSched();
710: 40 df rcall .-384 ; 0x592 <SososSched>
00000712 <__vector_9>:
}
#endif
#if SOSOS_TASK_ENALBE == 1
SOSOS_ISR(SIG_OVERFLOW0)//定时器0溢出中断处理
//提供系统的时间基准,中间开了下中断,以允许响应其他中断
{
//进入中断
SOSOS_ENTER_INTERRUPT();
712: 1f 92 push r1
714: 0f 92 push r0
716: 0f 93 push r16
718: 0f b7 in r16, 0x3f ; 63
71a: 0f 93 push r16
71c: 11 24 eor r1, r1
71e: 2f 93 push r18
720: 3f 93 push r19
722: 4f 93 push r20
724: 5f 93 push r21
726: 6f 93 push r22
728: 7f 93 push r23
72a: 8f 93 push r24
72c: 9f 93 push r25
72e: af 93 push r26
730: bf 93 push r27
732: ef 93 push r30
734: ff 93 push r31
736: cf 93 push r28
738: df 93 push r29
73a: dd 20 and r13, r13
73c: f9 f4 brne .+62 ; 0x77c <__vector_9+0x6a>
73e: 11 fd sbrc r17, 1
740: 17 c0 rjmp .+46 ; 0x770 <__vector_9+0x5e>
742: 8d b7 in r24, 0x3d ; 61
744: 9e b7 in r25, 0x3e ; 62
746: ea 2d mov r30, r10
748: ff 27 eor r31, r31
74a: ee 0f add r30, r30
74c: ff 1f adc r31, r31
74e: eb 0d add r30, r11
750: f1 1d adc r31, r1
752: 9f 01 movw r18, r30
754: 22 0f add r18, r18
756: 33 1f adc r19, r19
758: 22 0f add r18, r18
75a: 33 1f adc r19, r19
75c: 22 0f add r18, r18
75e: 33 1f adc r19, r19
760: ee 0f add r30, r30
762: ff 1f adc r31, r31
764: e2 0f add r30, r18
766: f3 1f adc r31, r19
768: e0 58 subi r30, 0x80 ; 128
76a: ff 4f sbci r31, 0xFF ; 255
76c: 91 83 std Z+1, r25 ; 0x01
76e: 80 83 st Z, r24
770: ed b7 in r30, 0x3d ; 61
772: fe b7 in r31, 0x3e ; 62
774: ed be out 0x3d, r14 ; 61
776: fe be out 0x3e, r15 ; 62
778: ef 93 push r30
77a: ff 93 push r31
77c: d3 94 inc r13
TCNT0=SYS_TIMER_VALUE;
77e: 89 ed ldi r24, 0xD9 ; 217
780: 82 bf out 0x32, r24 ; 50
SOSOS_TICKS++;
782: 73 94 inc r7
ENABLE_INTERRUPT();
784: 78 94 sei
SososTimer0();
786: 8d de rcall .-742 ; 0x4a2 <SososTimer0>
//离开中断
SOSOS_EXIT_INTERRUPT();
788: f8 94 cli
78a: d1 10 cpse r13, r1
78c: da 94 dec r13
78e: dd 20 and r13, r13
790: 41 f4 brne .+16 ; 0x7a2 <__vector_9+0x90>
792: ff 91 pop r31
794: ef 91 pop r30
796: ed bf out 0x3d, r30 ; 61
798: fe bf out 0x3e, r31 ; 62
79a: 10 ff sbrs r17, 0
79c: 02 c0 rjmp .+4 ; 0x7a2 <__vector_9+0x90>
79e: 11 ff sbrs r17, 1
7a0: f8 de rcall .-528 ; 0x592 <SososSched>
7a2: df 91 pop r29
7a4: cf 91 pop r28
7a6: ff 91 pop r31
7a8: ef 91 pop r30
7aa: bf 91 pop r27
7ac: af 91 pop r26
7ae: 9f 91 pop r25
7b0: 8f 91 pop r24
7b2: 7f 91 pop r23
7b4: 6f 91 pop r22
7b6: 5f 91 pop r21
7b8: 4f 91 pop r20
7ba: 3f 91 pop r19
7bc: 2f 91 pop r18
7be: 0f 91 pop r16
7c0: 0f bf out 0x3f, r16 ; 63
7c2: 0f 91 pop r16
7c4: 0f 90 pop r0
7c6: 1f 90 pop r1
7c8: 18 95 reti
000007ca <SososCreateTask>:
}
#endif
#if SOSOS_TASK_ENALBE == 1
void SososIdleTask(void *ptr)//系统空闲任务
//本任务运行在定义的最低优先级的最后一个ID上
//系统提供的定时器部件,是在本任务中处理的,处理时中断时关闭的
//不允许任何挂起本任务的操作
//提供一个名为SososIdleHook()的钩子函数,允许用户,在其中添加一些顺序执行的语句序列,不能有死循环
{
DISABLE_INTERRUPT();
if(test_0(SOSOS_STATE,STATE_SCHED_RUN)&&(SOSOS_INT_NEST==0))
SososScheder();//任务调度器
ENABLE_INTERRUPT();
while(1){
//计时处理
unsigned char i;
#if SOSOS_WDT_ENABLE == 1
//看门狗
SOSOS_WDT_RST();//复位看门狗
#endif
//定时器部件
DISABLE_INTERRUPT();
if(SOSOS_TICKS>0){
#if SOSOS_TIMER_ENABLE == 1
for(i=0;i<SOSOS_TIMER_NO;i++){
if(SOSOS_TIMER[i]>SOSOS_TICKS){
SOSOS_TIMER[i]-=SOSOS_TICKS;
}
else{
SOSOS_TIMER[i]=0;
}
}
#endif
SOSOS_TICKS=0;
}
ENABLE_INTERRUPT();
SososIdleHook();
}
}
#endif
#if SOSOS_TASK_ENALBE == 1
unsigned char SososCreateTask(void (*task)(void *),unsigned char pri,unsigned char id,unsigned int stack_size,void *ptr)//创建任务
//本函数用于创建任务
//task:任务函数
//pri:优先级
//id:任务在本优先级的表示号
//stack_size:堆栈的字节大小
//ptr:传递给任务的一个数据指针
{
7ca: 0f 93 push r16
7cc: cf 93 push r28
7ce: df 93 push r29
7d0: cd b7 in r28, 0x3d ; 61
7d2: de b7 in r29, 0x3e ; 62
7d4: 28 97 sbiw r28, 0x08 ; 8
7d6: 0f b6 in r0, 0x3f ; 63
7d8: f8 94 cli
7da: de bf out 0x3e, r29 ; 62
7dc: 0f be out 0x3f, r0 ; 63
7de: cd bf out 0x3d, r28 ; 61
7e0: 9a 83 std Y+2, r25 ; 0x02
7e2: 89 83 std Y+1, r24 ; 0x01
7e4: 38 87 std Y+8, r19 ; 0x08
7e6: 2f 83 std Y+7, r18 ; 0x07
7e8: 1c 83 std Y+4, r17 ; 0x04
7ea: 0b 83 std Y+3, r16 ; 0x03
unsigned char *stack;
#if ERROR_DETECT_ENABLE == 1
if(pri>=SOSOS_PRI_MAX)
7ec: 63 30 cpi r22, 0x03 ; 3
7ee: 18 f0 brcs .+6 ; 0x7f6 <SososCreateTask+0x2c>
7f0: 8f ef ldi r24, 0xFF ; 255
7f2: 90 e0 ldi r25, 0x00 ; 0
7f4: b0 c0 rjmp .+352 ; 0x956 <SososCreateTask+0x18c>
return SOSOS_PRI_LIMITED;
if(id>=SOSOS_MAX_TASK_PER_PRI)
7f6: 42 30 cpi r20, 0x02 ; 2
7f8: 18 f0 brcs .+6 ; 0x800 <SososCreateTask+0x36>
7fa: 8e ef ldi r24, 0xFE ; 254
7fc: 90 e0 ldi r25, 0x00 ; 0
7fe: ab c0 rjmp .+342 ; 0x956 <SososCreateTask+0x18c>
return SOSOS_ID_LIMITED;
if((pri==SOSOS_PRI_MAX-1)&&(id==SOSOS_MAX_TASK_PER_PRI-1)&&(task!=SososIdleTask))
800: 62 30 cpi r22, 0x02 ; 2
802: 41 f4 brne .+16 ; 0x814 <SososCreateTask+0x4a>
804: 41 30 cpi r20, 0x01 ; 1
806: 31 f4 brne .+12 ; 0x814 <SososCreateTask+0x4a>
808: 29 81 ldd r18, Y+1 ; 0x01
80a: 3a 81 ldd r19, Y+2 ; 0x02
80c: 2f 57 subi r18, 0x7F ; 127
80e: 38 40 sbci r19, 0x08 ; 8
810: 09 f0 breq .+2 ; 0x814 <SososCreateTask+0x4a>
812: 9f c0 rjmp .+318 ; 0x952 <SososCreateTask+0x188>
return SOSOS_TASK_EXIST;
if(TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_POINT!=0)
814: 77 27 eor r23, r23
816: 55 27 eor r21, r21
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -