📄 schedule.lis
字号:
.module schedule.c
.area text(rom, con, rel)
0000 .dbfile E:\document\无线传感器\main_frame\api\schedule.c
0000 .dbfunc e atomic_start _atomic_start fc
0000 ; result -> R16
.even
0000 _atomic_start::
0000 .dbline -1
0000 .dbline 19
0000 ; #include <iom128v.h>
0000 ; #include <macros.h>
0000 ; #include "schedule.h"
0000 ; typedef struct {
0000 ; void (*tp) ();
0000 ; } TOSH_sched_entry_T;
0000 ; typedef unsigned char uint8_t;
0000 ; enum {
0000 ;
0000 ; TOSH_MAX_TASKS = 8,
0000 ; TOSH_TASK_BITMASK = (TOSH_MAX_TASKS - 1)
0000 ; };
0000 ;
0000 ; volatile TOSH_sched_entry_T TOSH_queue[TOSH_MAX_TASKS];
0000 ; uint8_t TOSH_sched_full;
0000 ; volatile uint8_t TOSH_sched_free;
0000 ;
0000 ; uint8_t atomic_start(void)
0000 ; {
0000 .dbline 20
0000 ; uint8_t result = SREG;
0000 0FB7 in R16,0x3f
0002 .dbline 21
0002 ; CLI();
0002 F894 cli
0004 .dbline 22
0004 ; return result;
0004 .dbline -2
0004 L3:
0004 .dbline 0 ; func end
0004 0895 ret
0006 .dbsym r result 16 c
0006 .dbend
0006 .dbfunc e atomic_end _atomic_end fV
0006 ; oldSreg -> R16
.even
0006 _atomic_end::
0006 .dbline -1
0006 .dbline 26
0006 ; }
0006 ;
0006 ; void atomic_end(uint8_t oldSreg)
0006 ; {
0006 .dbline 27
0006 ; SREG=oldSreg;
0006 0FBF out 0x3f,R16
0008 .dbline -2
0008 L4:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbsym r oldSreg 16 c
000A .dbend
000A .dbfunc e TOSH_wait _TOSH_wait fV
.even
000A _TOSH_wait::
000A .dbline -1
000A .dbline 33
000A ; }
000A ;
000A ;
000A ; /* These are provided in HPL.td */
000A ; void TOSH_wait()
000A ; {
000A .dbline 34
000A ; ;//asm volatile("nop");
000A .dbline -2
000A L5:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e TOSH_sleep _TOSH_sleep fV
.even
000C _TOSH_sleep::
000C .dbline -1
000C .dbline 39
000C ; //asm volatile("nop");
000C ; }
000C ;
000C ; void TOSH_sleep()
000C ; {
000C .dbline -2
000C L6:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
000E .dbfunc e sched_init _sched_init fV
000E ; i -> R20,R21
.even
000E _sched_init::
000E 0E940000 xcall push_gset1
0012 .dbline -1
0012 .dbline 46
0012 ; //sbi(MCUCR, 5);
0012 ; //sbi(MCUCR, SE);
0012 ; //asm volatile ("sleep");
0012 ; }
0012 ;
0012 ; void sched_init(void)
0012 ; {
0012 .dbline 48
0012 ; int i;
0012 ; TOSH_sched_free = 0;
0012 2224 clr R2
0014 20920000 sts _TOSH_sched_free,R2
0018 .dbline 49
0018 ; TOSH_sched_full = 0;
0018 20920100 sts _TOSH_sched_full,R2
001C .dbline 50
001C ; for (i = 0; i < TOSH_MAX_TASKS; i++)
001C 4427 clr R20
001E 5527 clr R21
0020 L8:
0020 .dbline 51
0020 02E0 ldi R16,2
0022 10E0 ldi R17,0
0024 9A01 movw R18,R20
0026 0E940000 xcall empy16s
002A F801 movw R30,R16
002C 80E0 ldi R24,<_TOSH_queue
002E 90E0 ldi R25,>_TOSH_queue
0030 E80F add R30,R24
0032 F91F adc R31,R25
0034 2224 clr R2
0036 3324 clr R3
0038 3182 std z+1,R3
003A 2082 std z+0,R2
003C L9:
003C .dbline 50
003C 4F5F subi R20,255 ; offset = 1
003E 5F4F sbci R21,255
0040 .dbline 50
0040 4830 cpi R20,8
0042 E0E0 ldi R30,0
0044 5E07 cpc R21,R30
0046 64F3 brlt L8
0048 .dbline -2
0048 L7:
0048 0E940000 xcall pop_gset1
004C .dbline 0 ; func end
004C 0895 ret
004E .dbsym r i 20 I
004E .dbend
004E .dbfunc e post _post fc
004E ; fInterruptFlags -> R20
004E ; tmp -> R10
004E ; tp -> R22,R23
.even
004E _post::
004E 0E940000 xcall push_gset3
0052 B801 movw R22,R16
0054 .dbline -1
0054 .dbline 64
0054 ; TOSH_queue[i].tp = 0x0;
0054 ; }
0054 ;
0054 ; /*
0054 ; * TOS_post (thread_pointer)
0054 ; *
0054 ; * Put the task pointer into the next free slot.
0054 ; * Return 1 if successful, 0 if there is no free slot.
0054 ; *
0054 ; * This function uses a critical section to protect TOSH_sched_free.
0054 ; * As tasks can be posted in both interrupt and non-interrupt context,
0054 ; * this is necessary.
0054 ; */
0054 ; char post(void (*tp) ()) {
0054 .dbline 68
0054 ; uint8_t fInterruptFlags;
0054 ; uint8_t tmp;
0054 ;
0054 ; fInterruptFlags = atomic_start();
0054 D5DF xcall _atomic_start
0056 402F mov R20,R16
0058 .dbline 70
0058 ;
0058 ; tmp = TOSH_sched_free;
0058 A0900000 lds R10,_TOSH_sched_free
005C .dbline 72
005C ;
005C ; if (TOSH_queue[tmp].tp == 0x0) {
005C 82E0 ldi R24,2
005E 8A9D mul R24,R10
0060 F001 movw R30,R0
0062 80E0 ldi R24,<_TOSH_queue
0064 90E0 ldi R25,>_TOSH_queue
0066 E80F add R30,R24
0068 F91F adc R31,R25
006A 2080 ldd R2,z+0
006C 3180 ldd R3,z+1
006E 2220 tst R2
0070 A1F4 brne L13
0072 3320 tst R3
0074 91F4 brne L13
0076 X0:
0076 .dbline 72
0076 .dbline 73
0076 ; TOSH_sched_free = (tmp + 1) & TOSH_TASK_BITMASK;
0076 8A2D mov R24,R10
0078 8F5F subi R24,255 ; addi 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -