📄 task.lst
字号:
EXTERN CODE16 (OSTaskSuspend?T)
EXTERN CODE16 (OSTaskCreat?T)
EXTERN CODE16 (OSSendMsg?T)
EXTERN CODE16 (OSGetDeviceAddr?T)
EXTERN CODE16 (OSRequestDevice?T)
EXTERN CODE16 (OSFreeDevice?T)
EXTERN CODE16 (prints?T)
EXTERN CODE16 (print_uint32?T)
EXTERN DATA (Key)
EXTERN CODE16 (ScanKey?T)
*** PUBLICS:
PUBLIC Task1?T
PUBLIC Task2?T
PUBLIC Task3?T
PUBLIC Task4?T
PUBLIC Task5?T
*** DATA SEGMENT '?CON?Task':
00000000 ??S_13:
00000000 DB 'Task2',0x00
00000006 ??S_12:
00000006 DB 'Task1',0x00
0000000C ??S_11:
0000000C DB 'HaHa,Running in Task4! ',0x00
00000024 ??S_10:
00000024 DB 'HaHa,Running in Task3! ',0x00
0000003C ??S_9:
0000003C DB 'Time out!',0x00
00000046 ??S_8:
00000046 DB 'I have not got a message in 1 second!',0x00
0000006C ??S_7:
0000006C DB 'The message value is',0x00
00000081 ??S_6:
00000081 DB 'The message type is:',0x00
00000096 ??S_5:
00000096 DB 'The sender's PID is: ',0x00
000000AC ??S_4:
000000AC DB 'Haha,I have got a message from: ',0x00
000000CD ??S_3:
000000CD DB ':',0x00
000000CF ??S_2:
000000CF DB ' Start..........................',0x00
000000F0 ??S_1:
000000F0 DB 0x00
*** CODE SEGMENT '?PR?Task1?T?Task':
33: void Task1(void)
00000000 B510 PUSH {R4,LR}
34: {
00000002 ; SCOPE-START
37: PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID); //获取打印机设备地址
00000002 2001 MOV R0,#0x1
00000004 F7FF BL OSGetDeviceAddr?T ; T=0x0001 (1)
00000006 FFFC BL OSGetDeviceAddr?T ; T=0x0001 (2)
00000008 1C04 MOV R4,R0 ; PrinterDeviceAddr
0000000A ---- Variable 'PrinterDeviceAddr' assigned to Register 'R4' ----
38: OSRequestDevice(PrinterDeviceAddr,0); //申请使用打印机
0000000A 1C20 MOV R0,R4 ; PrinterDeviceAddr
0000000C 2100 MOV R1,#0x0
0000000E F7FF BL OSRequestDevice?T ; T=0x0001 (1)
ARM COMPILER V2.50a, Task 25/08/06 23:22:56 PAGE 6
00000010 FFF7 BL OSRequestDevice?T ; T=0x0001 (2)
40: prints("",1);
00000012 4800 LDR R0,=??S_1 ; ??S_1
00000014 2101 MOV R1,#0x1
00000016 F7FF BL prints?T ; T=0x0001 (1)
00000018 FFF3 BL prints?T ; T=0x0001 (2)
41: prints(OSCurrentPcb->Title,0); //显示任务启动
0000001A 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
0000001C 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
0000001E 3034 ADD R0,#0x34
00000020 2100 MOV R1,#0x0
00000022 F7FF BL prints?T ; T=0x0001 (1)
00000024 FFED BL prints?T ; T=0x0001 (2)
42: prints(" Start..........................",1);
00000026 4800 LDR R0,=??S_2 ; ??S_2
00000028 2101 MOV R1,#0x1
0000002A F7FF BL prints?T ; T=0x0001 (1)
0000002C FFE9 BL prints?T ; T=0x0001 (2)
44: OSFreeDevice(PrinterDeviceAddr); //释放打印机
0000002E 1C20 MOV R0,R4 ; PrinterDeviceAddr
00000030 F7FF BL OSFreeDevice?T ; T=0x0001 (1)
00000032 FFE6 BL OSFreeDevice?T ; T=0x0001 (2)
46: EN_LED1(); //使能LED1
00000034 4800 LDR R1,=0x40000
00000036 4800 LDR R0,=0xE0028018
00000038 6802 LDR R2,[R0,#0x0]
0000003A 430A ORR R2,R1
0000003C 6002 STR R2,[R0,#0x0]
0000003E 4800 LDR R0,=0xE0028014
00000040 6001 STR R1,[R0,#0x0]
48: while(1)
00000042 L_3:
50: OSTaskSuspend(OSCurrentPcb); //任务挂起
00000042 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
00000044 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
00000046 F7FF BL OSTaskSuspend?T ; T=0x0001 (1)
00000048 FFDB BL OSTaskSuspend?T ; T=0x0001 (2)
51: if(OSCurrentPcb->Msg) //如果收到消息
0000004A 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
0000004C 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
0000004E 6B00 LDR R0,[R0,#0x30]
00000050 2800 CMP R0,#0x0
00000052 D0F6 BEQ L_3 ; T=0x00000042
53: OSRequestDevice(PrinterDeviceAddr,0); //申请打印机
00000054 1C20 MOV R0,R4 ; PrinterDeviceAddr
00000056 2100 MOV R1,#0x0
00000058 F7FF BL OSRequestDevice?T ; T=0x0001 (1)
0000005A FFD2 BL OSRequestDevice?T ; T=0x0001 (2)
55: prints("",1);
0000005C 4800 LDR R0,=??S_1 ; ??S_1
0000005E 2101 MOV R1,#0x1
00000060 F7FF BL prints?T ; T=0x0001 (1)
00000062 FFCE BL prints?T ; T=0x0001 (2)
56: prints("",1);
00000064 4800 LDR R0,=??S_1 ; ??S_1
00000066 2101 MOV R1,#0x1
00000068 F7FF BL prints?T ; T=0x0001 (1)
0000006A FFCA BL prints?T ; T=0x0001 (2)
57: prints(OSCurrentPcb->Title,0); //显示任务标题
0000006C 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
0000006E 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
00000070 3034 ADD R0,#0x34
00000072 2100 MOV R1,#0x0
00000074 F7FF BL prints?T ; T=0x0001 (1)
00000076 FFC4 BL prints?T ; T=0x0001 (2)
58: prints(":",1);
ARM COMPILER V2.50a, Task 25/08/06 23:22:56 PAGE 7
00000078 4800 LDR R0,=??S_3 ; ??S_3
0000007A 2101 MOV R1,#0x1
0000007C F7FF BL prints?T ; T=0x0001 (1)
0000007E FFC0 BL prints?T ; T=0x0001 (2)
59: prints("Haha,I have got a message from: ",0); //显示相关信息
00000080 4800 LDR R0,=??S_4 ; ??S_4
00000082 2100 MOV R1,#0x0
00000084 F7FF BL prints?T ; T=0x0001 (1)
00000086 FFBC BL prints?T ; T=0x0001 (2)
60: prints(OSCurrentPcb->Msg->Sender->Title,1); //显示发送者的标题
00000088 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
0000008A 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
0000008C 6B00 LDR R0,[R0,#0x30]
0000008E 6880 LDR R0,[R0,#0x8]
00000090 3034 ADD R0,#0x34
00000092 2101 MOV R1,#0x1
00000094 F7FF BL prints?T ; T=0x0001 (1)
00000096 FFB4 BL prints?T ; T=0x0001 (2)
61: prints("The sender's PID is: ",0);
00000098 4800 LDR R0,=??S_5 ; ??S_5
0000009A 2100 MOV R1,#0x0
0000009C F7FF BL prints?T ; T=0x0001 (1)
0000009E FFB0 BL prints?T ; T=0x0001 (2)
62: print_uint32(OSCurrentPcb->Msg->Sender->PID); //显示发送者的PID
000000A0 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
000000A2 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
000000A4 6B00 LDR R0,[R0,#0x30]
000000A6 6880 LDR R0,[R0,#0x8]
000000A8 6880 LDR R0,[R0,#0x8]
000000AA F7FF BL print_uint32?T ; T=0x0001 (1)
000000AC FFA9 BL print_uint32?T ; T=0x0001 (2)
63: prints("",1);
000000AE 4800 LDR R0,=??S_1 ; ??S_1
000000B0 2101 MOV R1,#0x1
000000B2 F7FF BL prints?T ; T=0x0001 (1)
000000B4 FFA5 BL prints?T ; T=0x0001 (2)
64: prints("The message type is:",0); //消息类型
000000B6 4800 LDR R0,=??S_6 ; ??S_6
000000B8 2100 MOV R1,#0x0
000000BA F7FF BL prints?T ; T=0x0001 (1)
000000BC FFA1 BL prints?T ; T=0x0001 (2)
65: print_uint32(OSCurrentPcb->Msg->MsgType);
000000BE 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
000000C0 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
000000C2 6B00 LDR R0,[R0,#0x30]
000000C4 6800 LDR R0,[R0,#0x0]
000000C6 F7FF BL print_uint32?T ; T=0x0001 (1)
000000C8 FF9B BL print_uint32?T ; T=0x0001 (2)
66: prints("",1);
000000CA 4800 LDR R0,=??S_1 ; ??S_1
000000CC 2101 MOV R1,#0x1
000000CE F7FF BL prints?T ; T=0x0001 (1)
000000D0 FF97 BL prints?T ; T=0x0001 (2)
67: prints("The message value is",0); //消息的值
000000D2 4800 LDR R0,=??S_7 ; ??S_7
000000D4 2100 MOV R1,#0x0
000000D6 F7FF BL prints?T ; T=0x0001 (1)
000000D8 FF93 BL prints?T ; T=0x0001 (2)
68: print_uint32(*(OSCurrentPcb->Msg->pMsg));
000000DA 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
000000DC 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
000000DE 6B00 LDR R0,[R0,#0x30]
000000E0 68C0 LDR R0,[R0,#0xC]
000000E2 6800 LDR R0,[R0,#0x0]
000000E4 F7FF BL print_uint32?T ; T=0x0001 (1)
000000E6 FF8C BL print_uint32?T ; T=0x0001 (2)
ARM COMPILER V2.50a, Task 25/08/06 23:22:56 PAGE 8
69: prints("",1);
000000E8 4800 LDR R0,=??S_1 ; ??S_1
000000EA 2101 MOV R1,#0x1
000000EC F7FF BL prints?T ; T=0x0001 (1)
000000EE FF88 BL prints?T ; T=0x0001 (2)
70: prints("",1);
000000F0 4800 LDR R0,=??S_1 ; ??S_1
000000F2 2101 MOV R1,#0x1
000000F4 F7FF BL prints?T ; T=0x0001 (1)
000000F6 FF84 BL prints?T ; T=0x0001 (2)
72: OSFreeDevice(PrinterDeviceAddr); //释放打印机
000000F8 1C20 MOV R0,R4 ; PrinterDeviceAddr
000000FA F7FF BL OSFreeDevice?T ; T=0x0001 (1)
000000FC FF81 BL OSFreeDevice?T ; T=0x0001 (2)
74: switch(*(OSCurrentPcb->Msg->pMsg)) //键值散转
000000FE 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
00000100 6801 LDR R1,[R0,#0x0] ; OSCurrentPcb
00000102 6B08 LDR R0,[R1,#0x30]
00000104 68C0 LDR R0,[R0,#0xC]
00000106 6800 LDR R0,[R0,#0x0]
00000108 2802 CMP R0,#0x2
0000010A D005 BEQ L_9 ; T=0x00000118
0000010C 2801 CMP R0,#0x1
0000010E D106 BNE L_6 ; T=0x0000011E
76: case KEY1: ON_LED1();break; //如果是按键1按下,则点亮LED1
00000110 L_7:
00000110 4800 LDR R2,=0x40000
00000112 4800 LDR R0,=0xE002801C
00000114 6002 STR R2,[R0,#0x0]
00000116 E002 B L_6 ; T=0x0000011E
77: case KEY2: OFF_LED1();break; //如果是按键2按下,则熄灭LED1
00000118 L_9:
00000118 4800 LDR R2,=0x40000
0000011A 4800 LDR R0,=0xE0028014
0000011C 6002 STR R2,[R0,#0x0]
79: }
0000011E L_6:
80: OSCurrentPcb->Msg=0; //消息处理完毕
0000011E 2000 MOV R0,#0x0
00000120 6308 STR R0,[R1,#0x30]
82: }
00000122 E78E B L_3 ; T=0x00000042
00000124 ; SCOPE-END
83: }
00000124 BC10 POP {R4}
00000126 BC08 POP {R3}
00000128 4718 BX R3
0000012A ENDP ; 'Task1?T'
*** CODE SEGMENT '?PR?Task2?T?Task':
92: void Task2(void)
00000000 B510 PUSH {R4,LR}
93: {
00000002 ; SCOPE-START
96: PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID); //获取打印机设备地址
00000002 2001 MOV R0,#0x1
00000004 F7FF BL OSGetDeviceAddr?T ; T=0x0001 (1)
00000006 FFFC BL OSGetDeviceAddr?T ; T=0x0001 (2)
00000008 1C04 MOV R4,R0 ; PrinterDeviceAddr
0000000A ---- Variable 'PrinterDeviceAddr' assigned to Register 'R4' ----
97: OSRequestDevice(PrinterDeviceAddr,0); //申请使用打印机
0000000A 1C20 MOV R0,R4 ; PrinterDeviceAddr
0000000C 2100 MOV R1,#0x0
0000000E F7FF BL OSRequestDevice?T ; T=0x0001 (1)
00000010 FFF7 BL OSRequestDevice?T ; T=0x0001 (2)
99: prints("",1);
00000012 4800 LDR R0,=??S_1 ; ??S_1
ARM COMPILER V2.50a, Task 25/08/06 23:22:56 PAGE 9
00000014 2101 MOV R1,#0x1
00000016 F7FF BL prints?T ; T=0x0001 (1)
00000018 FFF3 BL prints?T ; T=0x0001 (2)
100: prints(OSCurrentPcb->Title,0); //显示任务启动
0000001A 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
0000001C 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
0000001E 3034 ADD R0,#0x34
00000020 2100 MOV R1,#0x0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -