📄 test.lss
字号:
338: 19 f4 brne .+6 ; 0x340 <OSTimeTick+0x20>
{
OSIntSendSignal(i);
33a: 81 2f mov r24, r17
33c: 0e 94 95 00 call 0x12a <OSIntSendSignal>
340: 1f 5f subi r17, 0xFF ; 255
342: 21 96 adiw r28, 0x01 ; 1
344: 10 31 cpi r17, 0x10 ; 16
346: 90 f3 brcs .-28 ; 0x32c <OSTimeTick+0xc>
348: df 91 pop r29
34a: cf 91 pop r28
34c: 1f 91 pop r17
34e: 08 95 ret
00000350 <OSWait>:
}
}
}
}
/*********************************************************************************************************
** 函数名称: OSWait
** 功能描述: 系统等待函数,任务调用此函数可以等待一定时间或信号
** 输 入: typ: 等待事件类型,目前可以取以下值,或是其中任意个值的按位或
** K_SIG: 等待信号
** K_TMO: 等待超时
** ticks : 等待超时时的系统嘀嗒数
** 输 出 : NOT_OK : 参数错误
** TMO_EVENT : 超时到
** SIG_EVENT : 有信号
** 全局变量: OSWaitTick
** 调用模块: OSClearSignal
**
** 作 者: 陈明计
** 日 期: 2002年6月20日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年9月4日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年9月9日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年10月9日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年12月2日
**------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 OSWait(uint8 typ, uint8 ticks)
{
OSWaitTick[OSTaskID] = ticks; /* 设置超时时间 */
350: 20 91 ab 00 lds r18, 0x00AB
354: e2 2f mov r30, r18
356: ff 27 eor r31, r31
358: e3 55 subi r30, 0x53 ; 83
35a: ff 4f sbci r31, 0xFF ; 255
35c: 60 83 st Z, r22
/* 可以优化寄存器的使用 */
switch(typ)
35e: 99 27 eor r25, r25
360: 82 30 cpi r24, 0x02 ; 2
362: 91 05 cpc r25, r1
364: 81 f0 breq .+32 ; 0x386 <OSWait+0x36>
366: 83 30 cpi r24, 0x03 ; 3
368: 91 05 cpc r25, r1
36a: 1c f4 brge .+6 ; 0x372 <OSWait+0x22>
36c: 01 97 sbiw r24, 0x01 ; 1
36e: 21 f0 breq .+8 ; 0x378 <OSWait+0x28>
370: 53 c0 rjmp .+166 ; 0x418 <OSWait+0xc8>
372: 03 97 sbiw r24, 0x03 ; 3
374: 39 f1 breq .+78 ; 0x3c4 <OSWait+0x74>
376: 50 c0 rjmp .+160 ; 0x418 <OSWait+0xc8>
{
case K_SIG: /* 等待信号,即挂起自己 */
OSWaitTick[OSTaskID] = 0; /* 没有超时处理 */
378: 10 82 st Z, r1
OSClearSignal(OSTaskID); /* 任务进入等待状态 */
37a: 82 2f mov r24, r18
37c: 0e 94 d3 00 call 0x1a6 <OSClearSignal>
OSSched(); /* 运行下一个任务 */
380: 0e 94 16 01 call 0x22c <OSSched>
384: 43 c0 rjmp .+134 ; 0x40c <OSWait+0xbc>
return SIG_EVENT;
case K_TMO: /* 等待超时,即延时一段时间 */
OS_ENTER_CRITICAL();
386: f8 94 cli
388: 80 91 a9 00 lds r24, 0x00A9
38c: 8f 5f subi r24, 0xFF ; 255
38e: 80 93 a9 00 sts 0x00A9, r24
while (OSWaitTick[OSTaskID] != 0) /* 判断超时时间是否到 */
{
OSClearSignal(OSTaskID); /* 任务进入等待状态 */
OSSched(); /* 运行下一个任务 */
392: 92 2f mov r25, r18
394: e9 2f mov r30, r25
396: ff 27 eor r31, r31
398: e3 55 subi r30, 0x53 ; 83
39a: ff 4f sbci r31, 0xFF ; 255
39c: 80 81 ld r24, Z
39e: 88 23 and r24, r24
3a0: 41 f0 breq .+16 ; 0x3b2 <OSWait+0x62>
3a2: 89 2f mov r24, r25
3a4: 0e 94 d3 00 call 0x1a6 <OSClearSignal>
3a8: 0e 94 16 01 call 0x22c <OSSched>
3ac: 90 91 ab 00 lds r25, 0x00AB
3b0: f1 cf rjmp .-30 ; 0x394 <OSWait+0x44>
}
OS_EXIT_CRITICAL();
3b2: 80 91 a9 00 lds r24, 0x00A9
3b6: 81 50 subi r24, 0x01 ; 1
3b8: 80 93 a9 00 sts 0x00A9, r24
3bc: 88 23 and r24, r24
3be: 49 f5 brne .+82 ; 0x412 <OSWait+0xc2>
3c0: 78 94 sei
3c2: 27 c0 rjmp .+78 ; 0x412 <OSWait+0xc2>
return TMO_EVENT;
case (K_TMO | K_SIG): /* 等待信号(挂起自己)直到超时 */
/* 别的任务或中断可以恢复它 */
OS_ENTER_CRITICAL();
3c4: f8 94 cli
3c6: 80 91 a9 00 lds r24, 0x00A9
3ca: 8f 5f subi r24, 0xFF ; 255
3cc: 80 93 a9 00 sts 0x00A9, r24
if (OSWaitTick[OSTaskID] == 0) /* 判断超时时间是否到 */
3d0: e2 2f mov r30, r18
3d2: ff 27 eor r31, r31
3d4: e3 55 subi r30, 0x53 ; 83
3d6: ff 4f sbci r31, 0xFF ; 255
3d8: 80 81 ld r24, Z
3da: 88 23 and r24, r24
3dc: d1 f0 breq .+52 ; 0x412 <OSWait+0xc2>
{
return TMO_EVENT;
}
OSClearSignal(OSTaskID); /* 任务进入等待状态 */
3de: 82 2f mov r24, r18
3e0: 0e 94 d3 00 call 0x1a6 <OSClearSignal>
OS_EXIT_CRITICAL();
3e4: 80 91 a9 00 lds r24, 0x00A9
3e8: 81 50 subi r24, 0x01 ; 1
3ea: 80 93 a9 00 sts 0x00A9, r24
3ee: 88 23 and r24, r24
3f0: 09 f4 brne .+2 ; 0x3f4 <OSWait+0xa4>
3f2: 78 94 sei
OSSched(); /* 运行下一个任务 */
3f4: 0e 94 16 01 call 0x22c <OSSched>
if (OSWaitTick[OSTaskID] != 0)
3f8: 80 91 ab 00 lds r24, 0x00AB
3fc: e8 2f mov r30, r24
3fe: ff 27 eor r31, r31
400: e3 55 subi r30, 0x53 ; 83
402: ff 4f sbci r31, 0xFF ; 255
404: 80 81 ld r24, Z
406: 88 23 and r24, r24
408: 21 f0 breq .+8 ; 0x412 <OSWait+0xc2>
{
OSWaitTick[OSTaskID] = 0;
40a: 10 82 st Z, r1
return SIG_EVENT;
40c: 84 e0 ldi r24, 0x04 ; 4
40e: 90 e0 ldi r25, 0x00 ; 0
410: 08 95 ret
}
return TMO_EVENT;
412: 88 e0 ldi r24, 0x08 ; 8
414: 90 e0 ldi r25, 0x00 ; 0
416: 08 95 ret
default:
OSWaitTick[OSTaskID] = 0;
418: e2 2f mov r30, r18
41a: ff 27 eor r31, r31
41c: e3 55 subi r30, 0x53 ; 83
41e: ff 4f sbci r31, 0xFF ; 255
420: 10 82 st Z, r1
return NOT_OK;
422: 8f ef ldi r24, 0xFF ; 255
424: 90 e0 ldi r25, 0x00 ; 0
}
}
426: 08 95 ret
00000428 <OSCtxSw>:
428: 0f 92 push r0
42a: 1f 92 push r1
42c: 2f 92 push r2
42e: 3f 92 push r3
430: 4f 92 push r4
432: 5f 92 push r5
434: 6f 92 push r6
436: 7f 92 push r7
438: 8f 92 push r8
43a: 9f 92 push r9
43c: af 92 push r10
43e: bf 92 push r11
440: cf 92 push r12
442: df 92 push r13
444: ef 92 push r14
446: ff 92 push r15
448: 0f 93 push r16
44a: 1f 93 push r17
44c: cf 93 push r28
44e: df 93 push r29
450: 80 91 a9 00 lds r24, 0x00A9
454: 8f 93 push r24
456: 8f b7 in r24, 0x3f ; 63
458: 8f 93 push r24
45a: 6d b6 in r6, 0x3d ; 61
45c: 7e b6 in r7, 0x3e ; 62
45e: 43 01 movw r8, r6
460: 80 91 aa 00 lds r24, 0x00AA
464: 28 2f mov r18, r24
466: 33 27 eor r19, r19
468: c9 01 movw r24, r18
46a: 82 0f add r24, r18
46c: 93 1f adc r25, r19
46e: fc 01 movw r30, r24
470: e9 5e subi r30, 0xE9 ; 233
472: fc 4f sbci r31, 0xFC ; 252
474: c0 80 ld r12, Z
476: d1 80 ldd r13, Z+1 ; 0x01
478: 80 91 ab 00 lds r24, 0x00AB
47c: 28 2f mov r18, r24
47e: 33 27 eor r19, r19
480: c9 01 movw r24, r18
482: 82 0f add r24, r18
484: 93 1f adc r25, r19
486: fc 01 movw r30, r24
488: e9 5e subi r30, 0xE9 ; 233
48a: fc 4f sbci r31, 0xFC ; 252
48c: a0 80 ld r10, Z
48e: b1 80 ldd r11, Z+1 ; 0x01
490: 24 01 movw r4, r8
492: 4a 18 sub r4, r10
494: 5b 08 sbc r5, r11
496: 80 91 ab 00 lds r24, 0x00AB
49a: 90 91 aa 00 lds r25, 0x00AA
49e: 89 17 cp r24, r25
4a0: 08 f0 brcs .+2 ; 0x4a4 <OSCtxSw_1>
4a2: 3a c0 rjmp .+116 ; 0x518 <OSCtxSw_5>
000004a4 <OSCtxSw_1>:
4a4: ac 14 cp r10, r12
4a6: bd 04 cpc r11, r13
4a8: 59 f0 breq .+22 ; 0x4c0 <OSCtxSw_2>
4aa: f4 01 movw r30, r8
4ac: d5 01 movw r26, r10
4ae: 8c 91 ld r24, X
4b0: 80 83 st Z, r24
4b2: 08 94 sec
4b4: 81 08 sbc r8, r1
4b6: 91 08 sbc r9, r1
4b8: 08 94 sec
4ba: a1 08 sbc r10, r1
4bc: b1 08 sbc r11, r1
4be: f2 cf rjmp .-28 ; 0x4a4 <OSCtxSw_1>
000004c0 <OSCtxSw_2>:
4c0: 24 01 movw r4, r8
4c2: 4a 18 sub r4, r10
4c4: 5b 08 sbc r5, r11
4c6: 80 91 ab 00 lds r24, 0x00AB
4ca: 28 2e mov r2, r24
4cc: 23 94 inc r2
000004ce <OSCtxSw_3>:
4ce: 22 2d mov r18, r2
4d0: 33 27 eor r19, r19
4d2: 80 91 aa 00 lds r24, 0x00AA
4d6: 99 27 eor r25, r25
4d8: 01 96 adiw r24, 0x01 ; 1
4da: 28 17 cp r18, r24
4dc: 39 07 cpc r19, r25
4de: 94 f4 brge .+36 ; 0x504 <OSCtxSw_4>
4e0: 22 2d mov r18, r2
4e2: 33 27 eor r19, r19
4e4: c9 01 movw r24, r18
4e6: 82 0f add r24, r18
4e8: 93 1f adc r25, r19
4ea: dc 01 movw r26, r24
4ec: ab 5e subi r26, 0xEB ; 235
4ee: bc 4f sbci r27, 0xFC ; 252
4f0: fd 01 movw r30, r26
4f2: 80 81 ld r24, Z
4f4: 91 81 ldd r25, Z+1 ; 0x01
4f6: 84 0d add r24, r4
4f8: 95 1d adc r25, r5
4fa: 11 96 adiw r26, 0x01 ; 1
4fc: 9c 93 st X, r25
4fe: 8e 93 st -X, r24
500: 23 94 inc r2
502: e5 cf rjmp .-54 ; 0x4ce <OSCtxSw_3>
00000504 <OSCtxSw_4>:
504: 80 91 aa 00 lds r24, 0x00AA
508: 80 93 ab 00 sts 0x00AB, r24
50c: 0f b6 in r0, 0x3f ; 63
50e: f8 94 cli
510: 9e be out 0x3e, r9 ; 62
512: 0f be out 0x3f, r0 ; 63
514: 8d be out 0x3d, r8 ; 61
516: 48 c0 rjmp .+144 ; 0x5a8 <OSCtxSw_11>
00000518 <OSCtxSw_5>:
518: 90 91 aa 00 lds r25, 0x00AA
51c: 80 91 ab 00 lds r24, 0x00AB
520: 98 17 cp r25, r24
522: 08 f0 brcs .+2 ; 0x526 <OSCtxSw_6>
524: 3a c0 rjmp .+116 ; 0x59a <OSCtxSw_10>
00000526 <OSCtxSw_6>:
526: 8c 14 cp r8, r12
528: 9d 04 cpc r9, r13
52a: 59 f0 breq .+22 ; 0x542 <OSCtxSw_7>
52c: 08 94 sec
52e: a1 1c adc r10, r1
530: b1 1c adc r11, r1
532: f5 01 movw r30, r10
534: 08 94 sec
536: 81 1c adc r8, r1
538: 91 1c adc r9, r1
53a: d4 01 movw r26, r8
53c: 8c 91 ld r24, X
53e: 80 83 st Z, r24
540: f2 cf rjmp .-28 ; 0x526 <OSCtxSw_6>
00000542 <OSCtxSw_7>:
542: 24 01 movw r4, r8
544: 4a 18 sub r4, r10
546: 5b 08 sbc r5, r11
548: 80 91 aa 00 lds r24, 0x00AA
54c: 28 2e mov r2, r24
54e: 23 94 inc r2
00000550 <OSCtxSw_8>:
550: 22 2d mov r18, r2
552: 33 27 eor r19, r19
554: 80 91 ab 00 lds r24, 0x00AB
558: 99 27 eor r25, r25
55a: 01 96 adiw r24, 0x01 ; 1
55c: 28 17 cp r18, r24
55e: 39 07 cpc r19, r25
560: 94 f4 brge .+36 ; 0x586 <OSCtxSw_9>
562: 22 2d mov r18, r2
564: 33 27 eor r19, r19
566: c9 01 movw r24, r18
568: 82 0f add r24, r18
56a: 93 1f adc r25, r19
56c: dc 01 movw r26, r24
56e: ab 5e subi r26, 0xEB ; 235
570: bc 4f sbci r27, 0xFC ; 252
572: fd 01 movw r30, r26
574: 80 81 ld r24, Z
576: 91 81 ldd r25, Z+1 ; 0x01
578: 84 19 sub r24, r4
57a: 95 09 sbc r25, r5
57c: 11 96 adiw r26, 0x01 ; 1
57e: 9c 93 st X, r25
580: 8e 93 st -X, r24
582: 23 94 inc r2
584: e5 cf rjmp .-54 ; 0x550 <OSCtxSw_8>
00000586 <OSCtxSw_9>:
586: 80 91 aa 00 lds r24, 0x00AA
58a: 80 93 ab 00 sts 0x00AB, r24
58e: 0f b6 in r0, 0x3f ; 63
590: f8 94 cli
592: 9e be out 0x3e, r9 ; 62
594: 0f be out 0x3f, r0 ; 63
596: 8d be out 0x3d, r8 ; 61
598: 07 c0 rjmp .+14 ; 0x5a8 <OSCtxSw_11>
0000059a <OSCtxSw_10>:
59a: 0f b6 in r0, 0x3f ; 63
59c: f8 94 cli
59e: 7e be out 0x3e, r7 ; 62
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -