📄 artx_config.txt
字号:
;;;471 /* new context is written in assembly (module: Swi_ARTX.s) */
;;;472
;;;473 #if (OS_STKCHECK == 1)
;;;474 if (tstclrb (&os_del_flag) == __FALSE) {
00022a 482d LDR r0,|L1.736|
00022c 300c ADDS r0,r0,#0xc
00022e f7ff fffe BL tstclrb
000232 2800 CMP r0,#0
000234 d110 BNE |L1.600|
;;;475 /* Do not check if task has deleted itself. */
;;;476 if ((os_runtask->tsk_stack < (U32)os_runtask->stack) ||
000236 4829 LDR r0,|L1.732|
000238 6800 LDR r0,[r0,#0] ; os_runtask
00023a 6a40 LDR r0,[r0,#0x24]
00023c 4927 LDR r1,|L1.732|
00023e 6809 LDR r1,[r1,#0] ; os_runtask
000240 6a89 LDR r1,[r1,#0x28]
000242 4288 CMP r0,r1
000244 d306 BCC |L1.596|
;;;477 (os_runtask->stack[0] != MAGIC_WORD )) {
000246 4825 LDR r0,|L1.732|
000248 6800 LDR r0,[r0,#0] ; os_runtask
00024a 6a80 LDR r0,[r0,#0x28]
00024c 6800 LDR r0,[r0,#0]
00024e 4932 LDR r1,|L1.792|
000250 4288 CMP r0,r1
000252 d001 BEQ |L1.600|
;;;478 os_stk_overflow ();
|L1.596|
000254 f7ff fffe BL os_stk_overflow
;;;479 }
;;;480 }
;;;481 #endif
;;;482 os_runtask->full_ctx = __FALSE;
|L1.600|
000258 2100 MOVS r1,#0
00025a 4820 LDR r0,|L1.732|
00025c 6800 LDR r0,[r0,#0] ; os_runtask
00025e 3020 ADDS r0,r0,#0x20
000260 7041 STRB r1,[r0,#1]
;;;483 os_runtask = p_new;
000262 481e LDR r0,|L1.732|
000264 6004 STR r4,[r0,#0] ; os_runtask
;;;484 p_new->state = RUNNING;
000266 2002 MOVS r0,#2
000268 7060 STRB r0,[r4,#1]
;;;485 #if (OS_ROBIN == 1)
;;;486 if (p_new->full_ctx == __TRUE) {
00026a 2021 MOVS r0,#0x21
00026c 5d00 LDRB r0,[r0,r4]
00026e 2801 CMP r0,#1
000270 d102 BNE |L1.632|
;;;487 os_tsk_robin = p_new;
000272 481b LDR r0,|L1.736|
000274 3008 ADDS r0,r0,#8
000276 6004 STR r4,[r0,#0] ; os_tsk_robin
;;;488 }
;;;489 #endif
;;;490 /* Tsk_Unlock */
;;;491 OS_UNLOCK();
|L1.632|
000278 481a LDR r0,|L1.740|
00027a 6900 LDR r0,[r0,#0x10]
00027c 2120 MOVS r1,#0x20
00027e 4308 ORRS r0,r0,r1
000280 4918 LDR r1,|L1.740|
000282 6108 STR r0,[r1,#0x10]
;;;492 } /* end of os_switch_tasks */
000284 bc10 POP {r4}
000286 bc08 POP {r3}
000288 4718 BX r3
ENDP
os_chk_robin PROC
;;;496
;;;497 void os_chk_robin (void) {
00028a b510 PUSH {r4,lr}
;;;498 /* Check if Round Robin timeout expired and switch to the next ready task.*/
;;;499 /* This function is called from the "os_clock_demon()" task scheduler. */
;;;500 #if (OS_ROBIN == 1)
;;;501 P_TCB p_new;
;;;502
;;;503 if (os_rdy.p_lnk != os_tsk_robin) {
00028c 4823 LDR r0,|L1.796|
00028e 6840 LDR r0,[r0,#4] ; os_rdy
000290 4913 LDR r1,|L1.736|
000292 3108 ADDS r1,r1,#8
000294 6809 LDR r1,[r1,#0] ; os_tsk_robin
000296 4288 CMP r0,r1
000298 d008 BEQ |L1.684|
;;;504 os_robin_time = os_time + OS_ROBINTOUT;
00029a 4821 LDR r0,|L1.800|
00029c 8800 LDRH r0,[r0,#0] ; os_time
00029e 1d40 ADDS r0,r0,#5
0002a0 490f LDR r1,|L1.736|
0002a2 1d09 ADDS r1,r1,#4
0002a4 8008 STRH r0,[r1,#0] ; os_robin_time
;;;505 return;
;;;506 }
;;;507 if (os_robin_time == os_time) {
;;;508 /* Round Robin timeout has expired. */
;;;509 os_robin_time += OS_ROBINTOUT;
;;;510 p_new = os_get_first (&os_rdy);
;;;511 os_put_prio ((P_XCB)&os_rdy, p_new);
;;;512 }
;;;513 #endif
;;;514 } /* end of os_chk_robin */
|L1.678|
0002a6 bc10 POP {r4}
0002a8 bc08 POP {r3}
0002aa 4718 BX r3
|L1.684|
0002ac 480c LDR r0,|L1.736| ;507
0002ae 1d00 ADDS r0,r0,#4 ;507
0002b0 8800 LDRH r0,[r0,#0] ;507 ; os_robin_time
0002b2 491b LDR r1,|L1.800| ;507
0002b4 8809 LDRH r1,[r1,#0] ;507 ; os_time
0002b6 4288 CMP r0,r1 ;507
0002b8 d10e BNE |L1.728| ;507
0002ba 4809 LDR r0,|L1.736| ;509
0002bc 1d00 ADDS r0,r0,#4 ;509
0002be 8800 LDRH r0,[r0,#0] ;509 ; os_robin_time
0002c0 1d40 ADDS r0,r0,#5 ;509
0002c2 4907 LDR r1,|L1.736| ;509
0002c4 1d09 ADDS r1,r1,#4 ;509
0002c6 8008 STRH r0,[r1,#0] ;509 ; os_robin_time
0002c8 4814 LDR r0,|L1.796| ;510
0002ca f7ff fffe BL os_get_first ;510
0002ce 0004 MOVS r4,r0 ;510
0002d0 0021 MOVS r1,r4 ;511
0002d2 4812 LDR r0,|L1.796| ;511
0002d4 f7ff fffe BL os_put_prio ;511
|L1.728|
0002d8 e7e5 B |L1.678|
0002da 0000 DCW 0000
|L1.732|
0002dc 00000000 DCD os_runtask
|L1.736|
0002e0 00000000 DCD ||.data$0||
|L1.740|
0002e4 fffff000 DCD 0xfffff000
|L1.744|
0002e8 e0008000 DCD 0xe0008000
|L1.748|
0002ec 00000000 DCD os_clock_TCB
|L1.752|
0002f0 000249ef DCD 0x000249ef
|L1.756|
0002f4 00000000 DCD os_def_interrupt
|L1.760|
0002f8 00000000 DCD os_clock_interrupt
|L1.764|
0002fc fffff100 DCD 0xfffff100
|L1.768|
000300 fffff200 DCD 0xfffff200
|L1.772|
000304 00000000 DCD os_active_TCB
|L1.776|
000308 00000000 DCD ||.bss$5||
|L1.780|
00030c 00000130 DCD ||.bss$5|| + 304
|L1.784|
000310 00000798 DCD ||.bss$5|| + 1944
|L1.788|
000314 40000010 DCD 0x40000010
|L1.792|
000318 e25a2ea5 DCD 0xe25a2ea5
|L1.796|
00031c 00000000 DCD os_rdy
|L1.800|
000320 00000000 DCD os_time
ENDP
AREA |area_number.1|, CODE, READONLY, ALIGN=2
EXPORTAS |area_number.1|, ||.text||
ARM
os_def_interrupt PROC
;;;280
;;;281 void os_def_interrupt (void) __irq {
000000 e92d0003 PUSH {r0,r1}
;;;282 /* Default Interrupt Function: may be called when timer ISR is disabled */
;;;283 OS_IACK();
000004 e3a00000 MOV r0,#0
000008 e3a01000 MOV r1,#0
00000c e5010fd0 STR r0,[r1,#-0xfd0]
;;;284 }
000010 e8bd0003 POP {r0,r1}
000014 e25ef004 SUBS pc,lr,#4
ENDP
AREA ||.data||, DATA, ALIGN=2
||.data$0||
||task_id@os_stk_overflow_0||
DCD 0x00000000
os_robin_time
DCB 0x00,0x00
DCB 0x00,0x00
os_tsk_robin
DCD 0x00000000
os_del_flag
DCB 0x00
AREA ||.constdata||, DATA, READONLY, ALIGN=2
||.constdata$1||
VIC
DCD 0xfffff000
PINSEL
DCD 0xe002c000
MAM
DCD 0xe01fc000
PLL
DCD 0xe01fc080
||P0||
DCD 0xe0028000
||P1||
DCD 0xe0028010
||U0||
DCD 0xe000c000
||U1||
DCD 0xe0010000
||T0||
DCD 0xe0004000
||T1||
DCD 0xe0008000
PWM
DCD 0xe0014000
I2C0
DCD 0xe001c000
I2C1
DCD 0xe005c000
||SPI||
DCD 0xe0020000
||SSP||
DCD 0xe0068000
||RTC||
DCD 0xe0024000
WDT
DCD 0xe0000000
ADC0
DCD 0xe0034000
ADC1
DCD 0xe0060000
os_maxtaskrun
DCW 0x0006
DCB 0x00,0x00
os_stackinfo
DCD 0x010000c8
os_clockrate
DCD 0x00002710
os_timernum
DCD 0x00010001
os_rrobin
DCD 0x00010005
AREA ||.bss||, NOINIT, ALIGN=3
||.bss$5||
m_tcb
% 304
m_stk
% 1616
os_active_TCB
% 24
m_tmr
% 24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -