⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 schedule.lis

📁 mega128平台下
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -