📄 user_code.lss
字号:
4ec: 99 1f adc r25, r25
4ee: 88 0f add r24, r24
4f0: 99 1f adc r25, r25
4f2: fc 01 movw r30, r24
4f4: ec 59 subi r30, 0x9C ; 156
4f6: ff 4f sbci r31, 0xFF ; 255
4f8: 80 81 ld r24, Z
4fa: 81 30 cpi r24, 0x01 ; 1
4fc: 69 f5 brne .+90 ; 0x558
4fe: 89 81 ldd r24, Y+1 ; 0x01
500: 99 27 eor r25, r25
502: 88 0f add r24, r24
504: 99 1f adc r25, r25
506: 88 0f add r24, r24
508: 99 1f adc r25, r25
50a: 88 0f add r24, r24
50c: 99 1f adc r25, r25
50e: fc 01 movw r30, r24
510: e9 59 subi r30, 0x99 ; 153
512: ff 4f sbci r31, 0xFF ; 255
514: 80 81 ld r24, Z
516: 88 23 and r24, r24
518: f9 f4 brne .+62 ; 0x558
(OS_TASK_ARRY[loop_task_arry].task_wait_clock==0))
{
if (OS_TASK_ARRY[loop_task_arry].task_pri<task_high_pri)
51a: 89 81 ldd r24, Y+1 ; 0x01
51c: 99 27 eor r25, r25
51e: 88 0f add r24, r24
520: 99 1f adc r25, r25
522: 88 0f add r24, r24
524: 99 1f adc r25, r25
526: 88 0f add r24, r24
528: 99 1f adc r25, r25
52a: fc 01 movw r30, r24
52c: ed 59 subi r30, 0x9D ; 157
52e: ff 4f sbci r31, 0xFF ; 255
530: 90 81 ld r25, Z
532: 8a 81 ldd r24, Y+2 ; 0x02
534: 98 17 cp r25, r24
536: 80 f4 brcc .+32 ; 0x558
{
task_high_pri=OS_TASK_ARRY[loop_task_arry].task_pri;
538: 89 81 ldd r24, Y+1 ; 0x01
53a: 99 27 eor r25, r25
53c: 88 0f add r24, r24
53e: 99 1f adc r25, r25
540: 88 0f add r24, r24
542: 99 1f adc r25, r25
544: 88 0f add r24, r24
546: 99 1f adc r25, r25
548: fc 01 movw r30, r24
54a: ed 59 subi r30, 0x9D ; 157
54c: ff 4f sbci r31, 0xFF ; 255
54e: 80 81 ld r24, Z
550: 8a 83 std Y+2, r24 ; 0x02
os_next_task=loop_task_arry;
552: 89 81 ldd r24, Y+1 ; 0x01
554: 80 93 82 00 sts 0x0082, r24
558: 89 81 ldd r24, Y+1 ; 0x01
55a: 8f 5f subi r24, 0xFF ; 255
55c: 89 83 std Y+1, r24 ; 0x01
55e: bd cf rjmp .-134 ; 0x4da
}
}
}
}
560: 22 96 adiw r28, 0x02 ; 2
562: 0f b6 in r0, 0x3f ; 63
564: f8 94 cli
566: de bf out 0x3e, r29 ; 62
568: 0f be out 0x3f, r0 ; 63
56a: cd bf out 0x3d, r28 ; 61
56c: df 91 pop r29
56e: cf 91 pop r28
570: 08 95 ret
00000572 <OS_DLY_TIME_DEC>:
//线程等待时钟节拍处理过程
void OS_DLY_TIME_DEC(void)
{
572: cf 93 push r28
574: df 93 push r29
576: cd b7 in r28, 0x3d ; 61
578: de b7 in r29, 0x3e ; 62
57a: 21 97 sbiw r28, 0x01 ; 1
57c: 0f b6 in r0, 0x3f ; 63
57e: f8 94 cli
580: de bf out 0x3e, r29 ; 62
582: 0f be out 0x3f, r0 ; 63
584: cd bf out 0x3d, r28 ; 61
unsigned char loop_i;
for (loop_i=0;loop_i<TASK_NUMBER;loop_i++)
586: 19 82 std Y+1, r1 ; 0x01
588: 89 81 ldd r24, Y+1 ; 0x01
58a: 84 30 cpi r24, 0x04 ; 4
58c: 08 f0 brcs .+2 ; 0x590
58e: 2b c0 rjmp .+86 ; 0x5e6
{
if (OS_TASK_ARRY[loop_i].task_wait_clock!=0)
590: 89 81 ldd r24, Y+1 ; 0x01
592: 99 27 eor r25, r25
594: 88 0f add r24, r24
596: 99 1f adc r25, r25
598: 88 0f add r24, r24
59a: 99 1f adc r25, r25
59c: 88 0f add r24, r24
59e: 99 1f adc r25, r25
5a0: fc 01 movw r30, r24
5a2: e9 59 subi r30, 0x99 ; 153
5a4: ff 4f sbci r31, 0xFF ; 255
5a6: 80 81 ld r24, Z
5a8: 88 23 and r24, r24
5aa: c9 f0 breq .+50 ; 0x5de
{
OS_TASK_ARRY[loop_i].task_wait_clock--;
5ac: 89 81 ldd r24, Y+1 ; 0x01
5ae: 99 27 eor r25, r25
5b0: 88 0f add r24, r24
5b2: 99 1f adc r25, r25
5b4: 88 0f add r24, r24
5b6: 99 1f adc r25, r25
5b8: 88 0f add r24, r24
5ba: 99 1f adc r25, r25
5bc: dc 01 movw r26, r24
5be: a9 59 subi r26, 0x99 ; 153
5c0: bf 4f sbci r27, 0xFF ; 255
5c2: 89 81 ldd r24, Y+1 ; 0x01
5c4: 99 27 eor r25, r25
5c6: 88 0f add r24, r24
5c8: 99 1f adc r25, r25
5ca: 88 0f add r24, r24
5cc: 99 1f adc r25, r25
5ce: 88 0f add r24, r24
5d0: 99 1f adc r25, r25
5d2: fc 01 movw r30, r24
5d4: e9 59 subi r30, 0x99 ; 153
5d6: ff 4f sbci r31, 0xFF ; 255
5d8: 80 81 ld r24, Z
5da: 81 50 subi r24, 0x01 ; 1
5dc: 8c 93 st X, r24
5de: 89 81 ldd r24, Y+1 ; 0x01
5e0: 8f 5f subi r24, 0xFF ; 255
5e2: 89 83 std Y+1, r24 ; 0x01
5e4: d1 cf rjmp .-94 ; 0x588
}
}
}
5e6: 21 96 adiw r28, 0x01 ; 1
5e8: 0f b6 in r0, 0x3f ; 63
5ea: f8 94 cli
5ec: de bf out 0x3e, r29 ; 62
5ee: 0f be out 0x3f, r0 ; 63
5f0: cd bf out 0x3d, r28 ; 61
5f2: df 91 pop r29
5f4: cf 91 pop r28
5f6: 08 95 ret
000005f8 <OS_TASK_DLY>:
//线程延时函数
void OS_TASK_DLY(unsigned char disp_time)
{
5f8: cf 93 push r28
5fa: df 93 push r29
5fc: cd b7 in r28, 0x3d ; 61
5fe: de b7 in r29, 0x3e ; 62
600: 21 97 sbiw r28, 0x01 ; 1
602: 0f b6 in r0, 0x3f ; 63
604: f8 94 cli
606: de bf out 0x3e, r29 ; 62
608: 0f be out 0x3f, r0 ; 63
60a: cd bf out 0x3d, r28 ; 61
60c: 89 83 std Y+1, r24 ; 0x01
OS_TASK_ARRY[os_now_task].task_wait_clock=disp_time;//设置当前线程等待时钟节拍数
60e: 80 91 81 00 lds r24, 0x0081
612: 99 27 eor r25, r25
614: 88 0f add r24, r24
616: 99 1f adc r25, r25
618: 88 0f add r24, r24
61a: 99 1f adc r25, r25
61c: 88 0f add r24, r24
61e: 99 1f adc r25, r25
620: fc 01 movw r30, r24
622: e9 59 subi r30, 0x99 ; 153
624: ff 4f sbci r31, 0xFF ; 255
626: 89 81 ldd r24, Y+1 ; 0x01
628: 80 83 st Z, r24
OS_DISP_TIME_P(); //进入汇编线程等待处理过程
62a: 4c d1 rcall .+664 ; 0x8c4
}
62c: 21 96 adiw r28, 0x01 ; 1
62e: 0f b6 in r0, 0x3f ; 63
630: f8 94 cli
632: de bf out 0x3e, r29 ; 62
634: 0f be out 0x3f, r0 ; 63
636: cd bf out 0x3d, r28 ; 61
638: df 91 pop r29
63a: cf 91 pop r28
63c: 08 95 ret
0000063e <OS_GET_TASK_ID>:
//获取线程ID
unsigned char OS_GET_TASK_ID(void *task)
{
63e: cf 93 push r28
640: df 93 push r29
642: cd b7 in r28, 0x3d ; 61
644: de b7 in r29, 0x3e ; 62
646: 25 97 sbiw r28, 0x05 ; 5
648: 0f b6 in r0, 0x3f ; 63
64a: f8 94 cli
64c: de bf out 0x3e, r29 ; 62
64e: 0f be out 0x3f, r0 ; 63
650: cd bf out 0x3d, r28 ; 61
652: 89 83 std Y+1, r24 ; 0x01
654: 9a 83 std Y+2, r25 ; 0x02
unsigned char loop_i;
for (loop_i=0;loop_i<TASK_NUMBER;loop_i++)
656: 1b 82 std Y+3, r1 ; 0x03
658: 8b 81 ldd r24, Y+3 ; 0x03
65a: 84 30 cpi r24, 0x04 ; 4
65c: 08 f0 brcs .+2 ; 0x660
65e: 1b c0 rjmp .+54 ; 0x696
{
if (OS_TASK_ARRY[loop_i].task_address==(unsigned int)task)
660: 8b 81 ldd r24, Y+3 ; 0x03
662: 99 27 eor r25, r25
664: 88 0f add r24, r24
666: 99 1f adc r25, r25
668: 88 0f add r24, r24
66a: 99 1f adc r25, r25
66c: 88 0f add r24, r24
66e: 99 1f adc r25, r25
670: fc 01 movw r30, r24
672: ef 59 subi r30, 0x9F ; 159
674: ff 4f sbci r31, 0xFF ; 255
676: 20 81 ld r18, Z
678: 31 81 ldd r19, Z+1 ; 0x01
67a: 89 81 ldd r24, Y+1 ; 0x01
67c: 9a 81 ldd r25, Y+2 ; 0x02
67e: 28 17 cp r18, r24
680: 39 07 cpc r19, r25
682: 29 f4 brne .+10 ; 0x68e
{
return loop_i;
684: 8b 81 ldd r24, Y+3 ; 0x03
686: 99 27 eor r25, r25
688: 8c 83 std Y+4, r24 ; 0x04
68a: 9d 83 std Y+5, r25 ; 0x05
68c: 04 c0 rjmp .+8 ; 0x696
68e: 8b 81 ldd r24, Y+3 ; 0x03
690: 8f 5f subi r24, 0xFF ; 255
692: 8b 83 std Y+3, r24 ; 0x03
694: e1 cf rjmp .-62 ; 0x658
}
}
}
696: 8c 81 ldd r24, Y+4 ; 0x04
698: 9d 81 ldd r25, Y+5 ; 0x05
69a: 25 96 adiw r28, 0x05 ; 5
69c: 0f b6 in r0, 0x3f ; 63
69e: f8 94 cli
6a0: de bf out 0x3e, r29 ; 62
6a2: 0f be out 0x3f, r0 ; 63
6a4: cd bf out 0x3d, r28 ; 61
6a6: df 91 pop r29
6a8: cf 91 pop r28
6aa: 08 95 ret
000006ac <OS_START_TICK>:
//************************************************
//
// 以下是用户使用时需要修改的代码部分
// (主要用来确定时钟节拍)
//************************************************
//启动RTOS
inline void OS_START_TICK(void)
{
6ac: cf 93 push r28
6ae: df 93 push r29
6b0: cd b7 in r28, 0x3d ; 61
6b2: de b7 in r29, 0x3e ; 62
6b4: 22 97 sbiw r28, 0x02 ; 2
6b6: 0f b6 in r0, 0x3f ; 63
6b8: f8 94 cli
6ba: de bf out 0x3e, r29 ; 62
6bc: 0f be out 0x3f, r0 ; 63
6be: cd bf out 0x3d, r28 ; 61
void *p; //获取汇编函数第一次启动时跳入调度入口点的地址临时指针(用户不必理会)
SREG=SREG|0X80; //开总中断 (用户可能需要修改部分)
6c0: 80 91 5f 00 lds r24, 0x005F
6c4: 80 68 ori r24, 0x80 ; 128
6c6: 80 93 5f 00 sts 0x005F, r24
TIMSK=TIMSK|0X01; //开时钟0中断 (用户可能需要修改部分)
6ca: 80 91 59 00 lds r24, 0x0059
6ce: 81 60 ori r24, 0x01 ; 1
6d0: 80 93 59 00 sts 0x0059, r24
TCNT0=0X80; //设置时钟初值 (用户可能需要修改部分)
6d4: 80 e8 ldi r24, 0x80 ; 128
6d6: 80 93 52 00 sts 0x0052, r24
TCCR0=TCCR0|0X03; //启动时钟0 (用户可能需要修改部分)
6da: 80 91 53 00 lds r24, 0x0053
6de: 83 60 ori r24, 0x03 ; 3
6e0: 80 93 53 00 sts 0x0053, r24
p=&START_TICK_POINT; //获取汇编函数第一次启动时跳入调度入口点地址 (用户不必理会)
6e4: 8a e8 ldi r24, 0x8A ; 138
6e6: 94 e0 ldi r25, 0x04 ; 4
6e8: 89 83 std Y+1, r24 ; 0x01
6ea: 9a 83 std Y+2, r25 ; 0x02
goto *p; //跳入汇编函数第一次启动时跳入调度入口点 (用户不必理会)
6ec: e9 81 ldd r30, Y+1 ; 0x01
6ee: fa 81 ldd r31, Y+2 ; 0x02
6f0: 09 94 ijmp
000006f2 <OS_RELOAD_TICK>:
}
//重新初始化系统时钟
void OS_RELOAD_TICK(void)
{
6f2: cf 93 push r28
6f4: df 93 push r29
6f6: cd b7 in r28, 0x3d ; 61
6f8: de b7 in r29, 0x3e ; 62
TCNT0=0X80; //重新装入定时器 (用户可能需要修改部分)
6fa: 80 e8 ldi r24, 0x80 ; 128
6fc: 80 93 52 00 sts 0x0052, r24
}
700: df 91 pop r29
702: cf 91 pop r28
704: 08 95 ret
00000706 <dispt>:
//可重入函数
void dispt(void)
{
706: cf 93 push r28
708: df 93 push r29
70a: cd b7 in r28, 0x3d ; 61
70c: de b7 in r29, 0x3e ; 62
70e: 22 97 sbiw r28, 0x02 ; 2
710: 0f b6 in r0, 0x3f ; 63
712: f8 94 cli
714: de bf out 0x3e, r29 ; 62
716: 0f be out 0x3f, r0 ; 63
718: cd bf out 0x3d, r28 ; 61
unsigned int i;
for (i=0;i<0x01ff;i++);
71a: 19 82 std Y+1, r1 ; 0x01
71c: 1a 82 std Y+2, r1 ; 0x02
71e: 89 81 ldd r24, Y+1 ; 0x01
720: 9a 81 ldd r25, Y+2 ; 0x02
722: 21 e0 ldi r18, 0x01 ; 1
724: 8f 3f cpi r24, 0xFF ; 255
726: 92 07 cpc r25, r18
728: 08 f0 brcs .+2 ; 0x72c
72a: 06 c0 rjmp .+12 ; 0x738
72c: 89 81 ldd r24, Y+1 ; 0x01
72e: 9a 81 ldd r25, Y+2 ; 0x02
730: 01 96 adiw r24, 0x01 ; 1
732: 89 83 std Y+1, r24 ; 0x01
734: 9a 83 std Y+2, r25 ; 0x02
736: f3 cf rjmp .-26 ; 0x71e
}
738: 22 96 adiw r28, 0x02 ; 2
73a: 0f b6 in r0, 0x3f ; 63
73c: f8 94 cli
73e: de bf out 0x3e, r29 ; 62
740: 0f be out 0x3f, r0 ; 63
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -