📄 user_code.lss
字号:
25e: 8d 93 st X+, r24
260: 9c 93 st X, r25
*sp_temp--=0;//R17
262: de 01 movw r26, r28
264: 19 96 adiw r26, 0x09 ; 9
266: 8d 91 ld r24, X+
268: 9c 91 ld r25, X
26a: 11 97 sbiw r26, 0x01 ; 1
26c: fc 01 movw r30, r24
26e: 10 82 st Z, r1
270: 01 97 sbiw r24, 0x01 ; 1
272: 8d 93 st X+, r24
274: 9c 93 st X, r25
*sp_temp--=0;//R18
276: de 01 movw r26, r28
278: 19 96 adiw r26, 0x09 ; 9
27a: 8d 91 ld r24, X+
27c: 9c 91 ld r25, X
27e: 11 97 sbiw r26, 0x01 ; 1
280: fc 01 movw r30, r24
282: 10 82 st Z, r1
284: 01 97 sbiw r24, 0x01 ; 1
286: 8d 93 st X+, r24
288: 9c 93 st X, r25
*sp_temp--=0;//R19
28a: de 01 movw r26, r28
28c: 19 96 adiw r26, 0x09 ; 9
28e: 8d 91 ld r24, X+
290: 9c 91 ld r25, X
292: 11 97 sbiw r26, 0x01 ; 1
294: fc 01 movw r30, r24
296: 10 82 st Z, r1
298: 01 97 sbiw r24, 0x01 ; 1
29a: 8d 93 st X+, r24
29c: 9c 93 st X, r25
*sp_temp--=0;//R20
29e: de 01 movw r26, r28
2a0: 19 96 adiw r26, 0x09 ; 9
2a2: 8d 91 ld r24, X+
2a4: 9c 91 ld r25, X
2a6: 11 97 sbiw r26, 0x01 ; 1
2a8: fc 01 movw r30, r24
2aa: 10 82 st Z, r1
2ac: 01 97 sbiw r24, 0x01 ; 1
2ae: 8d 93 st X+, r24
2b0: 9c 93 st X, r25
*sp_temp--=0;//R21
2b2: de 01 movw r26, r28
2b4: 19 96 adiw r26, 0x09 ; 9
2b6: 8d 91 ld r24, X+
2b8: 9c 91 ld r25, X
2ba: 11 97 sbiw r26, 0x01 ; 1
2bc: fc 01 movw r30, r24
2be: 10 82 st Z, r1
2c0: 01 97 sbiw r24, 0x01 ; 1
2c2: 8d 93 st X+, r24
2c4: 9c 93 st X, r25
*sp_temp--=0;//R22
2c6: de 01 movw r26, r28
2c8: 19 96 adiw r26, 0x09 ; 9
2ca: 8d 91 ld r24, X+
2cc: 9c 91 ld r25, X
2ce: 11 97 sbiw r26, 0x01 ; 1
2d0: fc 01 movw r30, r24
2d2: 10 82 st Z, r1
2d4: 01 97 sbiw r24, 0x01 ; 1
2d6: 8d 93 st X+, r24
2d8: 9c 93 st X, r25
*sp_temp--=0;//R23
2da: de 01 movw r26, r28
2dc: 19 96 adiw r26, 0x09 ; 9
2de: 8d 91 ld r24, X+
2e0: 9c 91 ld r25, X
2e2: 11 97 sbiw r26, 0x01 ; 1
2e4: fc 01 movw r30, r24
2e6: 10 82 st Z, r1
2e8: 01 97 sbiw r24, 0x01 ; 1
2ea: 8d 93 st X+, r24
2ec: 9c 93 st X, r25
*sp_temp--=0;//R24
2ee: de 01 movw r26, r28
2f0: 19 96 adiw r26, 0x09 ; 9
2f2: 8d 91 ld r24, X+
2f4: 9c 91 ld r25, X
2f6: 11 97 sbiw r26, 0x01 ; 1
2f8: fc 01 movw r30, r24
2fa: 10 82 st Z, r1
2fc: 01 97 sbiw r24, 0x01 ; 1
2fe: 8d 93 st X+, r24
300: 9c 93 st X, r25
*sp_temp--=0;//R25
302: de 01 movw r26, r28
304: 19 96 adiw r26, 0x09 ; 9
306: 8d 91 ld r24, X+
308: 9c 91 ld r25, X
30a: 11 97 sbiw r26, 0x01 ; 1
30c: fc 01 movw r30, r24
30e: 10 82 st Z, r1
310: 01 97 sbiw r24, 0x01 ; 1
312: 8d 93 st X+, r24
314: 9c 93 st X, r25
*sp_temp--=0;//R26
316: de 01 movw r26, r28
318: 19 96 adiw r26, 0x09 ; 9
31a: 8d 91 ld r24, X+
31c: 9c 91 ld r25, X
31e: 11 97 sbiw r26, 0x01 ; 1
320: fc 01 movw r30, r24
322: 10 82 st Z, r1
324: 01 97 sbiw r24, 0x01 ; 1
326: 8d 93 st X+, r24
328: 9c 93 st X, r25
*sp_temp--=0;//R27
32a: de 01 movw r26, r28
32c: 19 96 adiw r26, 0x09 ; 9
32e: 8d 91 ld r24, X+
330: 9c 91 ld r25, X
332: 11 97 sbiw r26, 0x01 ; 1
334: fc 01 movw r30, r24
336: 10 82 st Z, r1
338: 01 97 sbiw r24, 0x01 ; 1
33a: 8d 93 st X+, r24
33c: 9c 93 st X, r25
*sp_temp--=0;//R28
33e: de 01 movw r26, r28
340: 19 96 adiw r26, 0x09 ; 9
342: 8d 91 ld r24, X+
344: 9c 91 ld r25, X
346: 11 97 sbiw r26, 0x01 ; 1
348: fc 01 movw r30, r24
34a: 10 82 st Z, r1
34c: 01 97 sbiw r24, 0x01 ; 1
34e: 8d 93 st X+, r24
350: 9c 93 st X, r25
*sp_temp--=0;//R29
352: de 01 movw r26, r28
354: 19 96 adiw r26, 0x09 ; 9
356: 8d 91 ld r24, X+
358: 9c 91 ld r25, X
35a: 11 97 sbiw r26, 0x01 ; 1
35c: fc 01 movw r30, r24
35e: 10 82 st Z, r1
360: 01 97 sbiw r24, 0x01 ; 1
362: 8d 93 st X+, r24
364: 9c 93 st X, r25
*sp_temp--=0;//R30
366: de 01 movw r26, r28
368: 19 96 adiw r26, 0x09 ; 9
36a: 8d 91 ld r24, X+
36c: 9c 91 ld r25, X
36e: 11 97 sbiw r26, 0x01 ; 1
370: fc 01 movw r30, r24
372: 10 82 st Z, r1
374: 01 97 sbiw r24, 0x01 ; 1
376: 8d 93 st X+, r24
378: 9c 93 st X, r25
*sp_temp--=0;//R31
37a: de 01 movw r26, r28
37c: 19 96 adiw r26, 0x09 ; 9
37e: 8d 91 ld r24, X+
380: 9c 91 ld r25, X
382: 11 97 sbiw r26, 0x01 ; 1
384: fc 01 movw r30, r24
386: 10 82 st Z, r1
388: 01 97 sbiw r24, 0x01 ; 1
38a: 8d 93 st X+, r24
38c: 9c 93 st X, r25
*sp_temp=0x80;//SREG每条线程的总中断开关都为开
38e: e9 85 ldd r30, Y+9 ; 0x09
390: fa 85 ldd r31, Y+10 ; 0x0a
392: 80 e8 ldi r24, 0x80 ; 128
394: 80 83 st Z, r24
OS_TASK_ARRY[OS_TASK_INT_USED].task_sp=(unsigned int)sp_temp-1; //赋予线程堆栈指针
396: 80 91 60 00 lds r24, 0x0060
39a: 99 27 eor r25, r25
39c: 88 0f add r24, r24
39e: 99 1f adc r25, r25
3a0: 88 0f add r24, r24
3a2: 99 1f adc r25, r25
3a4: 88 0f add r24, r24
3a6: 99 1f adc r25, r25
3a8: fc 01 movw r30, r24
3aa: eb 59 subi r30, 0x9B ; 155
3ac: ff 4f sbci r31, 0xFF ; 255
3ae: 89 85 ldd r24, Y+9 ; 0x09
3b0: 9a 85 ldd r25, Y+10 ; 0x0a
3b2: 01 97 sbiw r24, 0x01 ; 1
3b4: 80 83 st Z, r24
3b6: 91 83 std Z+1, r25 ; 0x01
OS_TASK_INT_USED=OS_TASK_INT_USED+1; //修改已使用的线程数目
3b8: 80 91 60 00 lds r24, 0x0060
3bc: 8f 5f subi r24, 0xFF ; 255
3be: 80 93 60 00 sts 0x0060, r24
}
3c2: 2a 96 adiw r28, 0x0a ; 10
3c4: 0f b6 in r0, 0x3f ; 63
3c6: f8 94 cli
3c8: de bf out 0x3e, r29 ; 62
3ca: 0f be out 0x3f, r0 ; 63
3cc: cd bf out 0x3d, r28 ; 61
3ce: df 91 pop r29
3d0: cf 91 pop r28
3d2: 08 95 ret
000003d4 <OS_GETTO_NEXT_TASK_INT>:
//下一条线程处理函数(中断模式)
void OS_GETTO_NEXT_TASK_INT(void)
{
3d4: cf 93 push r28
3d6: df 93 push r29
3d8: cd b7 in r28, 0x3d ; 61
3da: de b7 in r29, 0x3e ; 62
3dc: 22 97 sbiw r28, 0x02 ; 2
3de: 0f b6 in r0, 0x3f ; 63
3e0: f8 94 cli
3e2: de bf out 0x3e, r29 ; 62
3e4: 0f be out 0x3f, r0 ; 63
3e6: cd bf out 0x3d, r28 ; 61
void *p; //声明入口指针
SP_POINTER=OS_TASK_ARRY[os_next_task].task_sp; //转移SP指针到下一条线程
3e8: 80 91 82 00 lds r24, 0x0082
3ec: 99 27 eor r25, r25
3ee: 88 0f add r24, r24
3f0: 99 1f adc r25, r25
3f2: 88 0f add r24, r24
3f4: 99 1f adc r25, r25
3f6: 88 0f add r24, r24
3f8: 99 1f adc r25, r25
3fa: fc 01 movw r30, r24
3fc: eb 59 subi r30, 0x9B ; 155
3fe: ff 4f sbci r31, 0xFF ; 255
400: 80 81 ld r24, Z
402: 91 81 ldd r25, Z+1 ; 0x01
404: 90 93 5e 00 sts 0x005E, r25
408: 80 93 5d 00 sts 0x005D, r24
os_now_task=os_next_task; //修改当前线程标识
40c: 80 91 82 00 lds r24, 0x0082
410: 80 93 81 00 sts 0x0081, r24
p=&OS_GET_TO_TASK_INT; //获取汇编进入线程入口函数地址
414: 8a e1 ldi r24, 0x1A ; 26
416: 94 e0 ldi r25, 0x04 ; 4
418: 89 83 std Y+1, r24 ; 0x01
41a: 9a 83 std Y+2, r25 ; 0x02
goto *p; //进入汇编进入线程函数
41c: e9 81 ldd r30, Y+1 ; 0x01
41e: fa 81 ldd r31, Y+2 ; 0x02
420: 09 94 ijmp
00000422 <OS_GETTO_NEXT_TASK_DISP>:
}
//下一条线程处理函数(普通模式)
void OS_GETTO_NEXT_TASK_DISP(void)
{
422: cf 93 push r28
424: df 93 push r29
426: cd b7 in r28, 0x3d ; 61
428: de b7 in r29, 0x3e ; 62
42a: 22 97 sbiw r28, 0x02 ; 2
42c: 0f b6 in r0, 0x3f ; 63
42e: f8 94 cli
430: de bf out 0x3e, r29 ; 62
432: 0f be out 0x3f, r0 ; 63
434: cd bf out 0x3d, r28 ; 61
void *p; //声明入口指针
SP_POINTER=OS_TASK_ARRY[os_next_task].task_sp; //转移SP指针到下一条线程
436: 80 91 82 00 lds r24, 0x0082
43a: 99 27 eor r25, r25
43c: 88 0f add r24, r24
43e: 99 1f adc r25, r25
440: 88 0f add r24, r24
442: 99 1f adc r25, r25
444: 88 0f add r24, r24
446: 99 1f adc r25, r25
448: fc 01 movw r30, r24
44a: eb 59 subi r30, 0x9B ; 155
44c: ff 4f sbci r31, 0xFF ; 255
44e: 80 81 ld r24, Z
450: 91 81 ldd r25, Z+1 ; 0x01
452: 90 93 5e 00 sts 0x005E, r25
456: 80 93 5d 00 sts 0x005D, r24
os_now_task=os_next_task; //修改当前线程标识
45a: 80 91 82 00 lds r24, 0x0082
45e: 80 93 81 00 sts 0x0081, r24
p=&OS_GET_TO_TASK_DISP; //获取汇编进入线程入口函数地址
462: 8e e3 ldi r24, 0x3E ; 62
464: 94 e0 ldi r25, 0x04 ; 4
466: 89 83 std Y+1, r24 ; 0x01
468: 9a 83 std Y+2, r25 ; 0x02
goto *p; //进入汇编进入线程函数
46a: e9 81 ldd r30, Y+1 ; 0x01
46c: fa 81 ldd r31, Y+2 ; 0x02
46e: 09 94 ijmp
00000470 <OS_SAVE_TASK_SP>:
}
//保存线程SP指针
void OS_SAVE_TASK_SP(unsigned int task_sp)
{
470: cf 93 push r28
472: df 93 push r29
474: cd b7 in r28, 0x3d ; 61
476: de b7 in r29, 0x3e ; 62
478: 22 97 sbiw r28, 0x02 ; 2
47a: 0f b6 in r0, 0x3f ; 63
47c: f8 94 cli
47e: de bf out 0x3e, r29 ; 62
480: 0f be out 0x3f, r0 ; 63
482: cd bf out 0x3d, r28 ; 61
484: 89 83 std Y+1, r24 ; 0x01
486: 9a 83 std Y+2, r25 ; 0x02
OS_TASK_ARRY[os_now_task].task_sp=task_sp; //保存当前线程的SP指针
488: 80 91 81 00 lds r24, 0x0081
48c: 99 27 eor r25, r25
48e: 88 0f add r24, r24
490: 99 1f adc r25, r25
492: 88 0f add r24, r24
494: 99 1f adc r25, r25
496: 88 0f add r24, r24
498: 99 1f adc r25, r25
49a: fc 01 movw r30, r24
49c: eb 59 subi r30, 0x9B ; 155
49e: ff 4f sbci r31, 0xFF ; 255
4a0: 89 81 ldd r24, Y+1 ; 0x01
4a2: 9a 81 ldd r25, Y+2 ; 0x02
4a4: 80 83 st Z, r24
4a6: 91 83 std Z+1, r25 ; 0x01
}
4a8: 22 96 adiw r28, 0x02 ; 2
4aa: 0f b6 in r0, 0x3f ; 63
4ac: f8 94 cli
4ae: de bf out 0x3e, r29 ; 62
4b0: 0f be out 0x3f, r0 ; 63
4b2: cd bf out 0x3d, r28 ; 61
4b4: df 91 pop r29
4b6: cf 91 pop r28
4b8: 08 95 ret
000004ba <OS_ATTEMPER>:
//系统调度器
void OS_ATTEMPER(void)
{
4ba: cf 93 push r28
4bc: df 93 push r29
4be: cd b7 in r28, 0x3d ; 61
4c0: de b7 in r29, 0x3e ; 62
4c2: 22 97 sbiw r28, 0x02 ; 2
4c4: 0f b6 in r0, 0x3f ; 63
4c6: f8 94 cli
4c8: de bf out 0x3e, r29 ; 62
4ca: 0f be out 0x3f, r0 ; 63
4cc: cd bf out 0x3d, r28 ; 61
unsigned char loop_task_arry; //求出下一条线程的循环变量
unsigned char task_high_pri=0xff; //求出最高优先权临时变量
4ce: 8f ef ldi r24, 0xFF ; 255
4d0: 8a 83 std Y+2, r24 ; 0x02
//为经检验 原来值为0XFF
os_next_task=TASK_NUMBER-1; //预设下一条线程为最后ID线程
4d2: 83 e0 ldi r24, 0x03 ; 3
4d4: 80 93 82 00 sts 0x0082, r24
for (loop_task_arry=0;loop_task_arry<TASK_NUMBER;loop_task_arry++)
4d8: 19 82 std Y+1, r1 ; 0x01
4da: 89 81 ldd r24, Y+1 ; 0x01
4dc: 84 30 cpi r24, 0x04 ; 4
4de: 08 f0 brcs .+2 ; 0x4e2
4e0: 3f c0 rjmp .+126 ; 0x560
{
if( (OS_TASK_ARRY[loop_task_arry].task_ready==1)&&
4e2: 89 81 ldd r24, Y+1 ; 0x01
4e4: 99 27 eor r25, r25
4e6: 88 0f add r24, r24
4e8: 99 1f adc r25, r25
4ea: 88 0f add r24, r24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -