📄 schedule.lis
字号:
007A 8770 andi R24,7
007C 80930000 sts _TOSH_sched_free,R24
0080 .dbline 74
0080 ; TOSH_queue[tmp].tp = tp;
0080 82E0 ldi R24,2
0082 8A9D mul R24,R10
0084 F001 movw R30,R0
0086 80E0 ldi R24,<_TOSH_queue
0088 90E0 ldi R25,>_TOSH_queue
008A E80F add R30,R24
008C F91F adc R31,R25
008E 7183 std z+1,R23
0090 6083 std z+0,R22
0092 .dbline 75
0092 ; atomic_end(fInterruptFlags);
0092 042F mov R16,R20
0094 B8DF xcall _atomic_end
0096 .dbline 76
0096 ; return 1;
0096 01E0 ldi R16,1
0098 03C0 xjmp L12
009A L13:
009A .dbline 78
009A ; }
009A ; else {
009A .dbline 79
009A ; atomic_end(fInterruptFlags);
009A 042F mov R16,R20
009C B4DF xcall _atomic_end
009E .dbline 80
009E ; return 0;
009E 0027 clr R16
00A0 .dbline -2
00A0 L12:
00A0 0E940000 xcall pop_gset3
00A4 .dbline 0 ; func end
00A4 0895 ret
00A6 .dbsym r fInterruptFlags 20 c
00A6 .dbsym r tmp 10 c
00A6 .dbsym r tp 22 pfV
00A6 .dbend
00A6 .dbfunc e TOSH_run_next_task _TOSH_run_next_task fi
00A6 ; fInterruptFlags -> R22
00A6 ; func -> R20,R21
00A6 ; old_full -> R10
.even
00A6 _TOSH_run_next_task::
00A6 0E940000 xcall push_gset3
00AA .dbline -1
00AA .dbline 93
00AA ; }
00AA ; }
00AA ;
00AA ; /*
00AA ; * TOSH_schedule_task()
00AA ; *
00AA ; * Remove the task at the head of the queue and execute it, freeing
00AA ; * the queue entry. Return 1 if a task was executed, 0 if the queue
00AA ; * is empty.
00AA ; */
00AA ;
00AA ; unsigned int TOSH_run_next_task ()
00AA ; {
00AA .dbline 98
00AA ; uint8_t fInterruptFlags;
00AA ; uint8_t old_full;
00AA ; void (*func)(void);
00AA ;
00AA ; fInterruptFlags = atomic_start();
00AA AADF xcall _atomic_start
00AC 602F mov R22,R16
00AE .dbline 99
00AE ; old_full = TOSH_sched_full;
00AE A0900100 lds R10,_TOSH_sched_full
00B2 .dbline 100
00B2 ; func = TOSH_queue[old_full].tp;
00B2 82E0 ldi R24,2
00B4 8A9D mul R24,R10
00B6 F001 movw R30,R0
00B8 80E0 ldi R24,<_TOSH_queue
00BA 90E0 ldi R25,>_TOSH_queue
00BC E80F add R30,R24
00BE F91F adc R31,R25
00C0 4081 ldd R20,z+0
00C2 5181 ldd R21,z+1
00C4 .dbline 101
00C4 ; if (func == 0x0)
00C4 4030 cpi R20,0
00C6 4507 cpc R20,R21
00C8 29F4 brne L16
00CA X1:
00CA .dbline 102
00CA ; {
00CA .dbline 103
00CA ; atomic_end(fInterruptFlags);
00CA 062F mov R16,R22
00CC 9CDF xcall _atomic_end
00CE .dbline 105
00CE ; // printf("return 0\n");
00CE ; return 0;
00CE 0027 clr R16
00D0 1127 clr R17
00D2 17C0 xjmp L15
00D4 L16:
00D4 .dbline 108
00D4 ; }
00D4 ;
00D4 ; TOSH_queue[old_full].tp = 0x0;
00D4 82E0 ldi R24,2
00D6 8A9D mul R24,R10
00D8 F001 movw R30,R0
00DA 80E0 ldi R24,<_TOSH_queue
00DC 90E0 ldi R25,>_TOSH_queue
00DE E80F add R30,R24
00E0 F91F adc R31,R25
00E2 2224 clr R2
00E4 3324 clr R3
00E6 3182 std z+1,R3
00E8 2082 std z+0,R2
00EA .dbline 109
00EA ; TOSH_sched_full = (old_full + 1) & TOSH_TASK_BITMASK;
00EA 8A2D mov R24,R10
00EC 8F5F subi R24,255 ; addi 1
00EE 8770 andi R24,7
00F0 80930100 sts _TOSH_sched_full,R24
00F4 .dbline 110
00F4 ; atomic_end(fInterruptFlags);
00F4 062F mov R16,R22
00F6 87DF xcall _atomic_end
00F8 .dbline 111
00F8 ; func();
00F8 FA01 movw R30,R20
00FA 0E940000 xcall xicall
00FE .dbline 113
00FE ; //printf("running task %d",old_full);
00FE ; return 1;
00FE 01E0 ldi R16,1
0100 10E0 ldi R17,0
0102 .dbline -2
0102 L15:
0102 0E940000 xcall pop_gset3
0106 .dbline 0 ; func end
0106 0895 ret
0108 .dbsym r fInterruptFlags 22 c
0108 .dbsym r func 20 pfV
0108 .dbsym r old_full 10 c
0108 .dbend
0108 .dbfunc e run_task _run_task fV
.even
0108 _run_task::
0108 .dbline -1
0108 .dbline 116
0108 ; }
0108 ;
0108 ; void run_task() {
0108 L19:
0108 .dbline 118
0108 L20:
0108 .dbline 117
0108 ; while (TOSH_run_next_task())
0108 CEDF xcall _TOSH_run_next_task
010A 0030 cpi R16,0
010C 0107 cpc R16,R17
010E E1F7 brne L19
0110 X2:
0110 .dbline 119
0110 ; ;
0110 ; TOSH_sleep();
0110 7DDF xcall _TOSH_sleep
0112 .dbline 120
0112 ; TOSH_wait();
0112 7BDF xcall _TOSH_wait
0114 .dbline -2
0114 L18:
0114 .dbline 0 ; func end
0114 0895 ret
0116 .dbend
0116 .dbfunc e __nesc_enable_interrupt ___nesc_enable_interrupt fV
.even
0116 ___nesc_enable_interrupt::
0116 .dbline -1
0116 .dbline 125
0116 ; }
0116 ;
0116 ;
0116 ;
0116 ; void __nesc_enable_interrupt() {
0116 .dbline 126
0116 ; SEI();
0116 7894 sei
0118 .dbline -2
0118 L22:
0118 .dbline 0 ; func end
0118 0895 ret
011A .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\document\无线传感器\main_frame\api\schedule.c
0000 _TOSH_sched_free::
0000 .blkb 1
0001 .dbsym e TOSH_sched_free _TOSH_sched_free c
0001 _TOSH_sched_full::
0001 .blkb 1
0002 .dbsym e TOSH_sched_full _TOSH_sched_full c
0002 _TOSH_queue::
0002 .blkb 16
0012 .dbsym e TOSH_queue _TOSH_queue A[16:8]X
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -