📄 schedule.lis
字号:
01FA F91F adc R31,R25
01FC 3182 std z+1,R3
01FE 2082 std z+0,R2
0200 .dbline 174
0200 ; }
0200 .dbline 175
0200 ; }
0200 0DC0 xjmp L40
0202 L39:
0202 .dbline 177
0202 ; else
0202 ; {
0202 .dbline 179
0202 ; // 还没有准备好运行,延迟减1
0202 ; SCH_tasks_G[Index].Delay -= 1;
0202 87E0 ldi R24,7
0204 809F mul R24,R16
0206 1001 movw R2,R0
0208 80E0 ldi R24,<_SCH_tasks_G+2
020A 90E0 ldi R25,>_SCH_tasks_G+2
020C 280E add R2,R24
020E 391E adc R3,R25
0210 F101 movw R30,R2
0212 8081 ldd R24,z+0
0214 9181 ldd R25,z+1
0216 0197 sbiw R24,1
0218 9183 std z+1,R25
021A 8083 std z+0,R24
021C .dbline 180
021C ; }
021C L40:
021C .dbline 181
021C ; }
021C L37:
021C .dbline 182
021C L34:
021C .dbline 162
021C 0395 inc R16
021E L36:
021E .dbline 162
021E 0330 cpi R16,3
0220 08F4 brsh X10
0222 A9CF xjmp L33
0224 X10:
0224 .dbline -2
0224 L32:
0224 .dbline 0 ; func end
0224 0895 ret
0226 .dbsym r Index 16 c
0226 .dbend
0226 .dbfunc e InitTimer1 _InitTimer1 fV
0226 ; i -> R20
.even
0226 _InitTimer1::
0226 0E940000 xcall push_gset1
022A .dbline -1
022A .dbline 195
022A ; }
022A ; }
022A ;
022A ;
022A ; /*---------------------------------------------------------*-
022A ; * 函数名称: SCH_Init_Timer2()
022A ; * 入 口:
022A ; * 出 口:
022A ; * 函数功能: 准备调度器数据结构并且设置定时器以所需的频率中断
022A ; *
022A ; * 说 明: 调度器初始化化函数,必须在使用调度器之前调用它
022A ; -*---------------------------------------------------------*/
022A ; void InitTimer1(void) //8MHz,10ms,64分频
022A ; {
022A .dbline 198
022A ; uchar i;
022A ;
022A ; for (i=0; i<SCH_MAX_TASKS; i++)
022A 4427 clr R20
022C 03C0 xjmp L53
022E L50:
022E .dbline 199
022E .dbline 200
022E 042F mov R16,R20
0230 65DF xcall _SCH_Delete_Task
0232 .dbline 201
0232 L51:
0232 .dbline 198
0232 4395 inc R20
0234 L53:
0234 .dbline 198
0234 4330 cpi R20,3
0236 D8F3 brlo L50
0238 .dbline 203
0238 ; {
0238 ; SCH_Delete_Task(i);
0238 ; }
0238 ;
0238 ; TCCR1B = 0x00; //stop
0238 2224 clr R2
023A 2EBC out 0x2e,R2
023C .dbline 204
023C ; TCNT1H = 0xFB; //setup
023C 8BEF ldi R24,251
023E 8DBD out 0x2d,R24
0240 .dbline 205
0240 ; TCNT1L = 0x1E;
0240 8EE1 ldi R24,30
0242 8CBD out 0x2c,R24
0244 .dbline 206
0244 ; OCR1AH = 0x04;
0244 84E0 ldi R24,4
0246 8BBD out 0x2b,R24
0248 .dbline 207
0248 ; OCR1AL = 0xE2;
0248 82EE ldi R24,226
024A 8ABD out 0x2a,R24
024C .dbline 208
024C ; OCR1BH = 0x04;
024C 84E0 ldi R24,4
024E 89BD out 0x29,R24
0250 .dbline 209
0250 ; OCR1BL = 0xE2;
0250 82EE ldi R24,226
0252 88BD out 0x28,R24
0254 .dbline 210
0254 ; ICR1H = 0x04;
0254 84E0 ldi R24,4
0256 87BD out 0x27,R24
0258 .dbline 211
0258 ; ICR1L = 0xE2;
0258 82EE ldi R24,226
025A 86BD out 0x26,R24
025C .dbline 212
025C ; TCCR1A = 0x00;
025C 2FBC out 0x2f,R2
025E .dbline 213
025E ; TCCR1B = 0x03; //start Timer
025E 83E0 ldi R24,3
0260 8EBD out 0x2e,R24
0262 .dbline -2
0262 L49:
0262 0E940000 xcall pop_gset1
0266 .dbline 0 ; func end
0266 0895 ret
0268 .dbsym r i 20 c
0268 .dbend
.area vector(rom, abs)
.org 32
0020 0C943401 jmp _SCH_Update_Server
.area text(rom, con, rel)
0268 .dbfile E:\_ING\文档\_STQ\easy-STQ-20080712\schedule.c
0268 .dbfunc e SCH_Update_Server _SCH_Update_Server fV
.even
0268 _SCH_Update_Server::
0268 0E940000 xcall push_lset
026C .dbline -1
026C .dbline 228
026C ; }
026C ;
026C ;
026C ; /*---------------------------------------------------------*-
026C ; * 函数名称: SCH_Update_Server()
026C ; * 入 口:
026C ; * 出 口:
026C ; * 函数功能: 调度器的中断服务程序
026C ; *
026C ; * 说 明: "刷新"函数,确定某个任务需要运行时,将这个任务的
026C ; * RunMe标志加1,然后该任务将由调度程序执行.
026C ; -*---------------------------------------------------------*/
026C ; #pragma interrupt_handler SCH_Update_Server:9 //定时器溢出中断
026C ; void SCH_Update_Server(void)
026C ; {
026C .dbline 229
026C ; TCNT1H = 0xFB; //reload counter value
026C 8BEF ldi R24,251
026E 8DBD out 0x2d,R24
0270 .dbline 230
0270 ; TCNT1L = 0x1E;
0270 8EE1 ldi R24,30
0272 8CBD out 0x2c,R24
0274 .dbline 232
0274 ;
0274 ; TimeTick++;
0274 80910000 lds R24,_TimeTick
0278 8F5F subi R24,255 ; addi 1
027A 80930000 sts _TimeTick,R24
027E .dbline 233
027E ; MotorDelayTime++;
027E 80910000 lds R24,_MotorDelayTime
0282 90910100 lds R25,_MotorDelayTime+1
0286 0196 adiw R24,1
0288 90930100 sts _MotorDelayTime+1,R25
028C 80930000 sts _MotorDelayTime,R24
0290 .dbline 236
0290 ;
0290 ;
0290 ; if(TimeTick%100 == 0) //1s喂狗
0290 14E6 ldi R17,100
0292 00910000 lds R16,_TimeTick
0296 0E940000 xcall mod8u
029A 0023 tst R16
029C 49F4 brne L55
029E .dbline 237
029E ; {
029E .dbline 238
029E ; if(TimeTick == 200)TimeTick = 0;
029E 80910000 lds R24,_TimeTick
02A2 883C cpi R24,200
02A4 19F4 brne L57
02A6 .dbline 238
02A6 2224 clr R2
02A8 20920000 sts _TimeTick,R2
02AC L57:
02AC .dbline 239
02AC ; OutWdServer();
02AC 0E940000 xcall _OutWdServer
02B0 .dbline 240
02B0 ; }
02B0 L55:
02B0 .dbline 243
02B0 ;
02B0 ;
02B0 ; SCH_Updata();
02B0 60DF xcall _SCH_Updata
02B2 .dbline -2
02B2 L54:
02B2 0E940000 xcall pop_lset
02B6 .dbline 0 ; func end
02B6 1895 reti
02B8 .dbend
02B8 .dbfunc e SCH_Start _SCH_Start fV
.even
02B8 _SCH_Start::
02B8 .dbline -1
02B8 .dbline 259
02B8 ;
02B8 ; }
02B8 ;
02B8 ;
02B8 ; /*---------------------------------------------------------*-
02B8 ; * 函数名称: SCH_Start()
02B8 ; * 入 口:
02B8 ; * 出 口:
02B8 ; * 函数功能: 通过允许中断来启动调度器
02B8 ; *
02B8 ; * 说 明: 在添加了所有定期的任务之后调用,从而使任务保持同步.
02B8 ; * 注意:应该只使能调度器中断
02B8 ; -*---------------------------------------------------------*/
02B8 ;
02B8 ; void SCH_Start(void)
02B8 ; {
02B8 .dbline 260
02B8 ; SEI();
02B8 7894 sei
02BA .dbline -2
02BA L59:
02BA .dbline 0 ; func end
02BA 0895 ret
02BC .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\_ING\文档\_STQ\easy-STQ-20080712\schedule.c
0000 _SCH_tasks_G::
0000 .blkb 21
0015 .dbstruct 0 7 .3
0015 .dbfield 0 pTask pfV
0015 .dbfield 2 Delay i
0015 .dbfield 4 Period i
0015 .dbfield 6 RunMe c
0015 .dbend
0015 .dbsym e SCH_tasks_G _SCH_tasks_G A[21:3]S[.3]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -