📄 task.lst
字号:
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,Task4! ',0x00
00000019 ??S_10:
00000019 DB 'HaHa,Task3! ',0x00
00000026 ??S_9:
00000026 DB 'Time out!',0x00
00000030 ??S_8:
00000030 DB 'I have not got a message in 1 second!',0x00
00000056 ??S_7:
00000056 DB 'The message value is',0x00
0000006B ??S_6:
0000006B DB 'The message type is:',0x00
00000080 ??S_5:
00000080 DB 'The sender's PID is: ',0x00
00000096 ??S_4:
00000096 DB 'Haha,I have got a message from: ',0x00
000000B7 ??S_3:
000000B7 DB ':',0x00
000000B9 ??S_2:
000000B9 DB ' Start.',0x00
000000C1 ??S_1:
000000C1 DB 0x00
*** CODE SEGMENT '?PR?Task1?T?Task':
32: void Task1(void)
00000000 B510 PUSH {R4,LR}
33: {
00000002 ; SCOPE-START
36: 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' ----
37: 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 16/05/06 14:55:46 PAGE 6
00000010 FFF7 BL OSRequestDevice?T ; T=0x0001 (2)
39: 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)
40: 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)
41: 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)
43: OSFreeDevice(PrinterDeviceAddr); //释放打印机
0000002E 1C20 MOV R0,R4 ; PrinterDeviceAddr
00000030 F7FF BL OSFreeDevice?T ; T=0x0001 (1)
00000032 FFE6 BL OSFreeDevice?T ; T=0x0001 (2)
45: EN_LED4(); //使能LED4
00000034 220F MOV R2,#0xF
00000036 4800 LDR R0,=0xFFFFF40C
00000038 6801 LDR R1,[R0,#0x0]
0000003A 4391 BIC R1,R2
0000003C 6001 STR R1,[R0,#0x0]
0000003E 4800 LDR R2,=0x1000000
00000040 4800 LDR R0,=0xFFFFF450
00000042 6801 LDR R1,[R0,#0x0]
00000044 4311 ORR R1,R2
00000046 6001 STR R1,[R0,#0x0]
47: while(1)
00000048 L_3:
49: OSTaskSuspend(OSCurrentPcb); //任务挂起
00000048 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
0000004A 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
0000004C F7FF BL OSTaskSuspend?T ; T=0x0001 (1)
0000004E FFD8 BL OSTaskSuspend?T ; T=0x0001 (2)
50: if(OSCurrentPcb->Msg) //如果收到消息
00000050 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
00000052 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
00000054 6B00 LDR R0,[R0,#0x30]
00000056 2800 CMP R0,#0x0
00000058 D0F6 BEQ L_3 ; T=0x00000048
52: OSRequestDevice(PrinterDeviceAddr,0); //申请打印机
0000005A 1C20 MOV R0,R4 ; PrinterDeviceAddr
0000005C 2100 MOV R1,#0x0
0000005E F7FF BL OSRequestDevice?T ; T=0x0001 (1)
00000060 FFCF BL OSRequestDevice?T ; T=0x0001 (2)
54: prints("",1);
00000062 4800 LDR R0,=??S_1 ; ??S_1
00000064 2101 MOV R1,#0x1
00000066 F7FF BL prints?T ; T=0x0001 (1)
00000068 FFCB BL prints?T ; T=0x0001 (2)
55: prints("",1);
0000006A 4800 LDR R0,=??S_1 ; ??S_1
0000006C 2101 MOV R1,#0x1
0000006E F7FF BL prints?T ; T=0x0001 (1)
00000070 FFC7 BL prints?T ; T=0x0001 (2)
56: prints(OSCurrentPcb->Title,0); //显示任务标题
00000072 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
00000074 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
00000076 3034 ADD R0,#0x34
00000078 2100 MOV R1,#0x0
ARM COMPILER V2.50a, Task 16/05/06 14:55:46 PAGE 7
0000007A F7FF BL prints?T ; T=0x0001 (1)
0000007C FFC1 BL prints?T ; T=0x0001 (2)
57: prints(":",1);
0000007E 4800 LDR R0,=??S_3 ; ??S_3
00000080 2101 MOV R1,#0x1
00000082 F7FF BL prints?T ; T=0x0001 (1)
00000084 FFBD BL prints?T ; T=0x0001 (2)
58: prints("Haha,I have got a message from: ",0); //显示相关信息
00000086 4800 LDR R0,=??S_4 ; ??S_4
00000088 2100 MOV R1,#0x0
0000008A F7FF BL prints?T ; T=0x0001 (1)
0000008C FFB9 BL prints?T ; T=0x0001 (2)
59: prints(OSCurrentPcb->Msg->Sender->Title,1); //显示发送者的标题
0000008E 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
00000090 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
00000092 6B00 LDR R0,[R0,#0x30]
00000094 6880 LDR R0,[R0,#0x8]
00000096 3034 ADD R0,#0x34
00000098 2101 MOV R1,#0x1
0000009A F7FF BL prints?T ; T=0x0001 (1)
0000009C FFB1 BL prints?T ; T=0x0001 (2)
60: prints("The sender's PID is: ",0);
0000009E 4800 LDR R0,=??S_5 ; ??S_5
000000A0 2100 MOV R1,#0x0
000000A2 F7FF BL prints?T ; T=0x0001 (1)
000000A4 FFAD BL prints?T ; T=0x0001 (2)
61: print_uint32(OSCurrentPcb->Msg->Sender->PID); //显示发送者的PID
000000A6 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
000000A8 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
000000AA 6B00 LDR R0,[R0,#0x30]
000000AC 6880 LDR R0,[R0,#0x8]
000000AE 6880 LDR R0,[R0,#0x8]
000000B0 F7FF BL print_uint32?T ; T=0x0001 (1)
000000B2 FFA6 BL print_uint32?T ; T=0x0001 (2)
62: prints("",1);
000000B4 4800 LDR R0,=??S_1 ; ??S_1
000000B6 2101 MOV R1,#0x1
000000B8 F7FF BL prints?T ; T=0x0001 (1)
000000BA FFA2 BL prints?T ; T=0x0001 (2)
63: prints("The message type is:",0); //消息类型
000000BC 4800 LDR R0,=??S_6 ; ??S_6
000000BE 2100 MOV R1,#0x0
000000C0 F7FF BL prints?T ; T=0x0001 (1)
000000C2 FF9E BL prints?T ; T=0x0001 (2)
64: print_uint32(OSCurrentPcb->Msg->MsgType);
000000C4 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
000000C6 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
000000C8 6B00 LDR R0,[R0,#0x30]
000000CA 6800 LDR R0,[R0,#0x0]
000000CC F7FF BL print_uint32?T ; T=0x0001 (1)
000000CE FF98 BL print_uint32?T ; T=0x0001 (2)
65: prints("",1);
000000D0 4800 LDR R0,=??S_1 ; ??S_1
000000D2 2101 MOV R1,#0x1
000000D4 F7FF BL prints?T ; T=0x0001 (1)
000000D6 FF94 BL prints?T ; T=0x0001 (2)
66: prints("The message value is",0); //消息的值
000000D8 4800 LDR R0,=??S_7 ; ??S_7
000000DA 2100 MOV R1,#0x0
000000DC F7FF BL prints?T ; T=0x0001 (1)
000000DE FF90 BL prints?T ; T=0x0001 (2)
67: print_uint32(*(OSCurrentPcb->Msg->pMsg));
000000E0 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
000000E2 6800 LDR R0,[R0,#0x0] ; OSCurrentPcb
000000E4 6B00 LDR R0,[R0,#0x30]
000000E6 68C0 LDR R0,[R0,#0xC]
ARM COMPILER V2.50a, Task 16/05/06 14:55:46 PAGE 8
000000E8 6800 LDR R0,[R0,#0x0]
000000EA F7FF BL print_uint32?T ; T=0x0001 (1)
000000EC FF89 BL print_uint32?T ; T=0x0001 (2)
68: prints("",1);
000000EE 4800 LDR R0,=??S_1 ; ??S_1
000000F0 2101 MOV R1,#0x1
000000F2 F7FF BL prints?T ; T=0x0001 (1)
000000F4 FF85 BL prints?T ; T=0x0001 (2)
69: prints("",1);
000000F6 4800 LDR R0,=??S_1 ; ??S_1
000000F8 2101 MOV R1,#0x1
000000FA F7FF BL prints?T ; T=0x0001 (1)
000000FC FF81 BL prints?T ; T=0x0001 (2)
71: OSFreeDevice(PrinterDeviceAddr); //释放打印机
000000FE 1C20 MOV R0,R4 ; PrinterDeviceAddr
00000100 F7FF BL OSFreeDevice?T ; T=0x0001 (1)
00000102 FF7E BL OSFreeDevice?T ; T=0x0001 (2)
73: switch(*(OSCurrentPcb->Msg->pMsg)) //键值散转
00000104 4800 LDR R0,=OSCurrentPcb ; OSCurrentPcb
00000106 6801 LDR R1,[R0,#0x0] ; OSCurrentPcb
00000108 6B08 LDR R0,[R1,#0x30]
0000010A 68C0 LDR R0,[R0,#0xC]
0000010C 6800 LDR R0,[R0,#0x0]
0000010E 2802 CMP R0,#0x2
00000110 D005 BEQ L_9 ; T=0x0000011E
00000112 2801 CMP R0,#0x1
00000114 D106 BNE L_6 ; T=0x00000124
75: case KEY1: ON_LED4();break; //如果是按键1按下,则点亮LED4
00000116 L_7:
00000116 4800 LDR R2,=0x10000
00000118 4800 LDR R0,=0xFFFFF458
0000011A 6002 STR R2,[R0,#0x0]
0000011C E002 B L_6 ; T=0x00000124
76: case KEY2: OFF_LED4();break; //如果是按键2按下,则熄灭LED4
0000011E L_9:
0000011E 4800 LDR R2,=0x10000
00000120 4800 LDR R0,=0xFFFFF454
00000122 6002 STR R2,[R0,#0x0]
78: }
00000124 L_6:
79: OSCurrentPcb->Msg=0; //消息处理完毕
00000124 2000 MOV R0,#0x0
00000126 6308 STR R0,[R1,#0x30]
81: }
00000128 E78E B L_3 ; T=0x00000048
0000012A ; SCOPE-END
82: }
0000012A BC10 POP {R4}
0000012C BC08 POP {R3}
0000012E 4718 BX R3
00000130 ENDP ; 'Task1?T'
*** CODE SEGMENT '?PR?Task2?T?Task':
91: void Task2(void)
00000000 B510 PUSH {R4,LR}
92: {
00000002 ; SCOPE-START
95: 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' ----
96: 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 16/05/06 14:55:46 PAGE 9
00000010 FFF7 BL OSRequestDevice?T ; T=0x0001 (2)
98: 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)
99: 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)
100: prints(" Start.",1);
00000026 4800 LDR R0,=??S_2 ; ??S_2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -