📄 minitos.s
字号:
} for ( irqno = 0 ; irqno < 32 ; irqno++ ) 100025c: e3a01000 mov r1, #0 ; 0x0 1000260: e3a00102 mov r0, #-2147483648 ; 0x80000000 1000264: e59fe024 ldr lr, [pc, #24] ; 1000290 <at91_init_aic+0x68> 1000268: e1a009c0 mov r0, r0, asr #19 100026c: e59fc020 ldr r12, [pc, #20] ; 1000294 <at91_init_aic+0x6c> { __arch_putl((eb01_irq_prtable[irqno] >> 5) | eb01_irq_type[irqno],AIC_SMR(irqno)); 1000270: e7de2001 ldrb r2, [lr, r1] 1000274: e7dc3001 ldrb r3, [r12, r1] 1000278: e18332a2 orr r3, r3, r2, lsr #5 100027c: e7803101 str r3, [r0, r1, lsl #2] 1000280: e2811001 add r1, r1, #1 ; 0x1 1000284: e351001f cmp r1, #31 ; 0x1f 1000288: dafffff8 ble 1000270 <at91_init_aic+0x48> }} 100028c: e91ba800 ldmdb r11, {r11, sp, pc} 1000290: 0100601c tsteq r0, r12, lsl r0 1000294: 0100603c tsteq r0, r12, lsr r001000298 <init_IRQ>: 1000298: e1a0c00d mov r12, sp 100029c: e92dd800 stmdb sp!, {r11, r12, lr, pc} 10002a0: e24cb004 sub r11, r12, #4 ; 0x4 void init_IRQ(void){ at91_init_aic(); 10002a4: ebffffdf bl 1000228 <at91_init_aic> install_irqhandler(); 10002a8: ebffff9c bl 1000120 <install_irqhandler> 10002ac: e91ba800 ldmdb r11, {r11, sp, pc}010002b0 <init_console>: 10002b0: e1a0c00d mov r12, sp 10002b4: e92dd800 stmdb sp!, {r11, r12, lr, pc} 10002b8: e24cb004 sub r11, r12, #4 ; 0x4 10002bc: e91ba800 ldmdb r11, {r11, sp, pc}010002c0 <do_IRQ>: 10002c0: e1a0c00d mov r12, sp 10002c4: e92dd800 stmdb sp!, {r11, r12, lr, pc} 10002c8: e24cb004 sub r11, r12, #4 ; 0x4}void init_console(void){ int i; i=0;}void do_IRQ(void){ atmel_timer_interrupt(); 10002cc: ebffffc2 bl 10001dc <atmel_timer_interrupt> 10002d0: e91ba800 ldmdb r11, {r11, sp, pc}010002d4 <init_kernel>: 10002d4: e1a0c00d mov r12, sp 10002d8: e92dd800 stmdb sp!, {r11, r12, lr, pc} 10002dc: e24cb004 sub r11, r12, #4 ; 0x4 10002e0: e91ba800 ldmdb r11, {r11, sp, pc}010002e4 <at91_init_kernel>: 10002e4: e1a0c00d mov r12, sp 10002e8: e92dd800 stmdb sp!, {r11, r12, lr, pc} 10002ec: e24cb004 sub r11, r12, #4 ; 0x4}void init_kernel(void){ //init_IRQ(); //init_console(); //init_timer();}void at91_init_kernel(void){ init_IRQ(); 10002f0: ebffffe8 bl 1000298 <init_IRQ> init_console(); 10002f4: ebffffed bl 10002b0 <init_console> init_timer(); 10002f8: ebffff95 bl 1000154 <init_timer> 10002fc: e91ba800 ldmdb r11, {r11, sp, pc}01000300 <UserTest>: 1000300: e1a0c00d mov r12, sp 1000304: e92dd830 stmdb sp!, {r4, r5, r11, r12, lr, pc} 1000308: e24cb004 sub r11, r12, #4 ; 0x4int gX1,gX2;void UserTest(int argc,void*argv){ int i; gX1=0; 100030c: e59f3038 ldr r3, [pc, #38] ; 100034c <UserTest+0x4c> 1000310: e3a02000 mov r2, #0 ; 0x0 gX2=0; 1000314: e59f1034 ldr r1, [pc, #34] ; 1000350 <UserTest+0x50> for(i=0;i<10;i++,gX1++) 1000318: e1a04002 mov r4, r2 100031c: e5832000 str r2, [r3] 1000320: e1a05003 mov r5, r3 1000324: e5812000 str r2, [r1] { // SendOneChar(1,argc); DelayTicks(2); 1000328: e3a00002 mov r0, #2 ; 0x2 100032c: eb0002ba bl 1000e1c <DelayTicks> 1000330: e2844001 add r4, r4, #1 ; 0x1 1000334: e5953000 ldr r3, [r5] 1000338: e3540009 cmp r4, #9 ; 0x9 100033c: e2833001 add r3, r3, #1 ; 0x1 1000340: e5853000 str r3, [r5] 1000344: dafffff7 ble 1000328 <UserTest+0x28> if(i==5) { // SuspendProcess(pUserTest);//挂起本进程 } }} 1000348: e91ba830 ldmdb r11, {r4, r5, r11, sp, pc} 100034c: 01007858 tsteq r0, r8, asr r8 1000350: 0100785c tsteq r0, r12, asr r801000354 <UserTest2>: 1000354: e1a0c00d mov r12, sp 1000358: e92dd810 stmdb sp!, {r4, r11, r12, lr, pc} 100035c: e24cb004 sub r11, r12, #4 ; 0x4void UserTest2(int argc,void *argv){ gX2=0; 1000360: e59f2020 ldr r2, [pc, #20] ; 1000388 <UserTest2+0x34> 1000364: e3a03000 mov r3, #0 ; 0x0 while(1) 1000368: e1a04002 mov r4, r2 100036c: e5823000 str r3, [r2] { DelayTicks(10); 1000370: e3a0000a mov r0, #10 ; 0xa 1000374: eb0002a8 bl 1000e1c <DelayTicks> gX2++; 1000378: e5943000 ldr r3, [r4] 100037c: e2833001 add r3, r3, #1 ; 0x1 1000380: e5843000 str r3, [r4] } 1000384: eafffff9 b 1000370 <UserTest2+0x1c> 1000388: 0100785c tsteq r0, r12, asr r8} 100038c: e91ba810 ldmdb r11, {r4, r11, sp, pc}01000390 <start_kernel>: 1000390: e1a0c00d mov r12, sp 1000394: e92dd9f0 stmdb sp!, {r4, r5, r6, r7, r8, r11, r12, lr, pc} 1000398: e24cb004 sub r11, r12, #4 ; 0x4void start_kernel(void){ gTest=0; 100039c: e3a05000 mov r5, #0 ; 0x0 10003a0: e59f3078 ldr r3, [pc, #78] ; 1000420 <start_kernel+0x90> 10003a4: e24dd00c sub sp, sp, #12 ; 0xc 10003a8: e5835000 str r5, [r3] at91_init_kernel(); 10003ac: ebffffcc bl 10002e4 <at91_init_kernel>// start miniTOS MO_InitSystem(); //minitos init 10003b0: eb00018f bl 10009f4 <MO_InitSystem> pUserTest=CreateProcess(UserTest,'1',NULL,TaskStk+900,PROC_PRIO,5,MO_RUN); 10003b4: e3a08009 mov r8, #9 ; 0x9 10003b8: e58d8000 str r8, [sp] 10003bc: e3a07005 mov r7, #5 ; 0x5 10003c0: e58d7004 str r7, [sp, #4] 10003c4: e3a06001 mov r6, #1 ; 0x1 10003c8: e58d6008 str r6, [sp, #8] 10003cc: e59f0050 ldr r0, [pc, #50] ; 1000424 <start_kernel+0x94> 10003d0: e3a01031 mov r1, #49 ; 0x31 10003d4: e59f304c ldr r3, [pc, #4c] ; 1000428 <start_kernel+0x98> 10003d8: e1a02005 mov r2, r5 10003dc: e59f4048 ldr r4, [pc, #48] ; 100042c <start_kernel+0x9c> 10003e0: eb0001f6 bl 1000bc0 <CreateProcess> 10003e4: e5840000 str r0, [r4] pUserTest2=CreateProcess(UserTest2,'2',NULL,TaskStk2+900,PROC_PRIO,5,MO_RUN); 10003e8: e58d8000 str r8, [sp] 10003ec: e58d7004 str r7, [sp, #4] 10003f0: e58d6008 str r6, [sp, #8] 10003f4: e59f0034 ldr r0, [pc, #34] ; 1000430 <start_kernel+0xa0> 10003f8: e3a01032 mov r1, #50 ; 0x32 10003fc: e59f3030 ldr r3, [pc, #30] ; 1000434 <start_kernel+0xa4> 1000400: e1a02005 mov r2, r5 1000404: e59f402c ldr r4, [pc, #2c] ; 1000438 <start_kernel+0xa8> 1000408: eb0001ec bl 1000bc0 <CreateProcess> 100040c: e5840000 str r0, [r4] SelectNewTask(); 1000410: eb00006a bl 10005c0 <SelectNewTask> unlock_int(); 1000414: eb00016d bl 10009d0 <unlock_int> begin_next_proc(); 1000418: eb00000e bl 1000458 <begin_next_proc> 100041c: ea000006 b 100043c <start_kernel+0xac> 1000420: 01006018 tsteq r0, r8, lsl r0 1000424: 01000300 tsteq r0, r0, lsl #6 1000428: 01007404 tsteq r0, r4, lsl #8 100042c: 01007468 tsteq r0, r8, ror #8 1000430: 01000354 tsteq r0, r4, asr r3 1000434: 010077f0 streqsh r7, [r0, -r0] 1000438: 01007854 tsteq r0, r4, asr r8} 100043c: e91ba9f0 ldmdb r11, {r4, r5, r6, r7, r8, r11, sp, pc}01000440 <IRQ_Enter>: 1000440: e24ee004 sub lr, lr, #4 ; 0x4 1000444: e92d5fff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, lr} 1000448: ebffff9c bl 10002c0 <do_IRQ> 100044c: ebffff11 bl 1000098 <IRQ_Shell> 1000450: ea00001d b 10004cc <IRQ_switch_task> 1000454: e8fd9fff ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, pc}^01000458 <begin_next_proc>: 1000458: e59f00ec ldr r0, [pc, #ec] ; 100054c <TisrEntry+0x4> 100045c: e5900000 ldr r0, [r0] 1000460: e8b00002 ldmia r0!, {r1} 1000464: e161f001 msr SPSR_c, r1 1000468: e8b00002 ldmia r0!, {r1} 100046c: e121f001 msr CPSR_c, r1 1000470: e8b02000 ldmia r0!, {sp} 1000474: e8b00006 ldmia r0!, {r1, r2} 1000478: e92d0006 stmdb sp!, {r1, r2} 100047c: e8b05ffe ldmia r0!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, lr} 1000480: e92d5ffe stmdb sp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, lr} 1000484: e8bddfff ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, lr, pc}01000488 <switch_task>: 1000488: e92d0001 stmdb sp!, {r0} 100048c: e59f00bc ldr r0, [pc, #bc] ; 1000550 <TisrEntry+0x8> 1000490: e5900000 ldr r0, [r0] 1000494: e2800048 add r0, r0, #72 ; 0x48 1000498: e9201ffe stmdb r0!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12} 100049c: e1a01000 mov r1, r0 10004a0: e8bd0001 ldmia sp!, {r0} 10004a4: e9210001 stmdb r1!, {r0} 10004a8: e9214000 stmdb r1!, {lr} 10004ac: e9214000 stmdb r1!, {lr} 10004b0: e9212000 stmdb r1!, {sp} 10004b4: e10f0000 mrs r0, CPSR 10004b8: e9210001 stmdb r1!, {r0} 10004bc: e14f0000 mrs r0, SPSR 10004c0: e9210001 stmdb r1!, {r0} 10004c4: eb00003d bl 10005c0 <SelectNewTask> 10004c8: eaffffe2 b 1000458 <begin_next_proc>010004cc <IRQ_switch_task>: 10004cc: e1a0000d mov r0, sp 10004d0: e28dd034 add sp, sp, #52 ; 0x34 10004d4: e59d1000 ldr r1, [sp] 10004d8: e28dd004 add sp, sp, #4 ; 0x4 10004dc: e25ff000 subs pc, pc, #0 ; 0x0 10004e0: e1a00000 nop (mov r0,r0) 10004e4: e1a00000 nop (mov r0,r0) 10004e8: e1a00000 nop (mov r0,r0) 10004ec: e1a00000 nop (mov r0,r0) 10004f0: e59f205c ldr r2, [pc, #5c] ; 1000554 <TisrEntry+0xc> 10004f4: e5922000 ldr r2, [r2] 10004f8: e14f3000 mrs r3, SPSR 10004fc: e8a20008 stmia r2!, {r3} 1000500: e10f3000 mrs r3, CPSR 1000504: e8a20008 stmia r2!, {r3} 1000508: e8a22000 stmia r2!, {sp} 100050c: e8a24000 stmia r2!, {lr} 1000510: e8a20002 stmia r2!, {r1} 1000514: e1a0e000 mov lr, r0 1000518: e1a0d002 mov sp, r2 100051c: e28dd034 add sp, sp, #52 ; 0x34 1000520: e8be1fff ldmia lr!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12} 1000524: e92d1fff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12} 1000528: e59f0028 ldr r0, [pc, #28] ; 1000558 <TisrEntry+0x10> 100052c: e5900000 ldr r0, [r0] 1000530: e8b00002 ldmia r0!, {r1} 1000534: e8b00002 ldmia r0!, {r1} 1000538: e8b02000 ldmia r0!, {sp} 100053c: eb00001f bl 10005c0 <SelectNewTask> 1000540: eaffffc4 b 1000458 <begin_next_proc>01000544 <ProcEntry>: 1000544: 01000b40 tsteq r0, r0, asr #2201000548 <TisrEntry>: 1000548: 01001798 streqb r1, [r0, -r8] 100054c: 010088f4 streqsh r8, [r0, -r4] 1000550: 010088f4 streqsh r8, [r0, -r4] 1000554: 010088f4 streqsh r8, [r0, -r4] 1000558: 010088f4 streqsh r8, [r0, -r4]0100055c <SelectHightestPrioTask>: 100055c: e1a0c00d mov r12, sp 1000560: e92dd800 stmdb sp!, {r11, r12, lr, pc} 1000564: e24cb004 sub r11, r12, #4 ; 0x4*****************************************************************/
struct ProcTbl * SelectHightestPrioTask(void)
{
int i;
for(i=0;i<N_TASK_PRIO;i++)
1000568: e3a03000 mov r3, #0 ; 0x0 100056c: e59f203c ldr r2, [pc, #3c] ; 10005b0 <SelectHightestPrioTask+0x54> {
if(ptrTaskRdy[i]!=NULL)
1000570: e7920103 ldr r0, [r2, r3, lsl #2] 1000574: e3500000 cmp r0, #0 ; 0x0 1000578: 191ba800 ldmnedb r11, {r11, sp, pc} 100057c: e2833001 add r3, r3, #1 ; 0x1 1000580: e3530007 cmp r3, #7 ; 0x7 1000584: dafffff9 ble 1000570 <SelectHightestPrioTask+0x14> return ptrTaskRdy[i];
}
if(ptrServerRdy!=NULL)
1000588: e59f3024 ldr r3, [pc, #24] ; 10005b4 <SelectHightestPrioTask+0x58> 100058c: e5930000 ldr r0, [r3] 1000590: e3500000 cmp r0, #0 ; 0x0 1000594: 191ba800 ldmnedb r11, {r11, sp, pc} return ptrServerRdy;
if(ptrProcRdy!=NULL)
1000598: e59f3018 ldr r3, [pc, #18] ; 10005b8 <SelectHightestPrioTask+0x5c> 100059c: e5930000 ldr r0, [r3] 10005a0: e3500000 cmp r0, #0 ; 0x0 return ptrProcRdy;
return ptrIdle;
10005a4: 059f3010 ldreq r3, [pc, #10] ; 10005bc <SelectHightestPrioTask+0x60> 10005a8: 05930000 ldreq r0, [r3] 10005ac: e91ba800 ldmdb r11, {r11, sp, pc} 10005b0: 01007860 tsteq r0, r0, ror #16 10005b4: 01007880 tsteq r0, r0, lsl #17 10005b8: 01007884 tsteq r0, r4, lsl #17 10005bc: 01007888 tsteq r0, r8, lsl #17010005c0 <SelectNewTask>:}
10005c0: e1a0c00d mov r12, sp 10005c4: e92dd800 stmdb sp!, {r11, r12, lr, pc} 10005c8: e24cb004 sub r11, r12, #4 ; 0x4/****************************************************************
**function:
**
*****************************************************************/
void SelectNewTask(void)
{
ptrCurrProc=SelectHightestPrioTask();
10005cc: ebffffe2 bl 100055c <SelectHightestPrioTask> 10005d0: e59f3004 ldr r3, [pc, #4] ; 10005dc <SelectNewTask+0x1c> 10005d4: e5830000 str r0, [r3] 10005d8: e91ba800 ldmdb r11, {r11, sp, pc} 10005dc: 010088f4 streqsh r8, [r0, -r4]010005e0 <InitTaskRdyPtrToNULL>: 10005e0: e1a0c00d mov r12, sp 10005e4: e92dd800 stmdb sp!, {r11, r12, lr, pc} 10005e8: e24cb004 sub r11, r12, #4 ; 0x4}
/*
why in this is error??
void InitTaskRdy(void)
{
ptrTaskRdy[0]=&Proc[0]; //idle1
//ptrServerRdy=&Proc[1]; //idle2
//ptrProcRdy= &Proc[2]; //idle3
//ptrCurrProc= &(Proc[1]);
}
*/
/*************************************************
**Function:开机启动把进程表初始化
**
*************************************************/
void InitTaskRdyPtrToNULL(void)
{
int i;
for(i=0;i<N_TASK_PRIO;i++)
10005ec: e59f3028 ldr r3, [pc, #28] ; 100061c <InitTaskRdyPtrToNULL+0x3c> 10005f0: e3a01000 mov r1, #0 ; 0x0 10005f4: e283201c add r2, r3, #28 ; 0x1c {
ptrTaskRdy[i]=NULL;
10005f8: e4021004 str r1, [r2], -#4 10005fc: e1520003 cmp r2, r3 1000600: aafffffc bge 10005f8 <InitTaskRdyPtrToNULL+0x18> }
ptrServerRdy=NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -