📄 main.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 947] for uVision
; commandline ArmCC [--debug -c --asm --interleave -omain.o --device=DARMP -O0 -IC:\Keil\ARM\INC\Philips src\main.c]
ARM
AREA ||.text.7||, CODE, READONLY, ALIGN=2
UART0_SendByte PROC
;;;39 {
;;;40 U0THR = dat;
000000 e59f1148 LDR r1,|L1.336|
000004 e5c10000 STRB r0,[r1,#0]
;;;41 while ((U0LSR & 0x40) == 0); // 等待数据发送完毕
000008 e1a00000 MOV r0,r0
|L1.12|
00000c e59f113c LDR r1,|L1.336|
000010 e5d11014 LDRB r1,[r1,#0x14]
000014 e3110040 TST r1,#0x40
000018 0afffffb BEQ |L1.12|
;;;42 }
00001c e12fff1e BX lr
ENDP
UART0_SendStr PROC
;;;51 void UART0_SendStr (uint8 const *str)
;;;52 {
000020 e52de004 PUSH {lr}
000024 e1a02000 MOV r2,r0
;;;53 while (1)
000028 ea000005 B |L1.68|
;;;54 {
;;;55 if (*str == '\0') break; // 遇到结束符,退出
|L1.44|
00002c e5d20000 LDRB r0,[r2,#0]
000030 e3500000 CMP r0,#0
000034 1a000000 BNE |L1.60|
000038 ea000002 B |L1.72|
;;;56 UART0_SendByte(*str++); // 发送数据
|L1.60|
00003c e4d20001 LDRB r0,[r2],#1
000040 ebfffffe BL UART0_SendByte
|L1.68|
000044 eafffff8 B |L1.44| ;53
|L1.72|
000048 e1a00000 MOV r0,r0 ;55
;;;57 }
;;;58 }
00004c e49df004 POP {pc}
ENDP
Task1 PROC
;;;99 void Task1 (void *pdata)
;;;100 {
|L1.80|
000050 e92d4010 PUSH {r4,lr}
000054 e24dd018 SUB sp,sp,#0x18
000058 e1a04000 MOV r4,r0
;;;101 uint8 err;
;;;102 uint8 str1[]="i am task b.\r\n";
00005c e28d0004 ADD r0,sp,#4
000060 e28f10ec ADR r1,|L1.340|
000064 e891101c LDM r1,{r2-r4,r12}
000068 e880101c STM r0,{r2-r4,r12}
;;;103
;;;104 pdata = pdata;
00006c e1a00000 MOV r0,r0
;;;105
;;;106 while (1)
000070 ea00000a B |L1.160|
;;;107 {
;;;108
;;;109 OSSemPend(DispSem, 0, & err); // 等待信号量
|L1.116|
000074 e28d2014 ADD r2,sp,#0x14
000078 e3a01000 MOV r1,#0
00007c e59f00e0 LDR r0,|L1.356|
000080 e5900000 LDR r0,[r0,#0] ; DispSem
000084 ebfffffe BL OSSemPend
;;;110 UART0_SendStr(str1);
000088 e28d0004 ADD r0,sp,#4
00008c ebfffffe BL UART0_SendStr
;;;111 err = OSSemPost(DispSem); // 发送信号量
000090 e59f00cc LDR r0,|L1.356|
000094 e5900000 LDR r0,[r0,#0] ; DispSem
000098 ebfffffe BL OSSemPost
00009c e58d0014 STR r0,[sp,#0x14]
|L1.160|
0000a0 eafffff3 B |L1.116| ;106
;;;112
;;;113 }
;;;114 }
ENDP
Task0 PROC
;;;74 void Task0 (void *pdata)
;;;75 {
|L1.164|
0000a4 e92d4010 PUSH {r4,lr}
0000a8 e24dd018 SUB sp,sp,#0x18
0000ac e1a04000 MOV r4,r0
;;;76 uint8 err;
;;;77 uint8 str0[]="I AM TASK A.\r\n";
0000b0 e28d0004 ADD r0,sp,#4
0000b4 e28f10ac ADR r1,|L1.360|
0000b8 e891101c LDM r1,{r2-r4,r12}
0000bc e880101c STM r0,{r2-r4,r12}
;;;78
;;;79 pdata = pdata;
0000c0 e1a00000 MOV r0,r0
;;;80 TargetInit ();
0000c4 ebfffffe BL TargetInit
;;;81 OSTaskCreate (Task1,(void *)0, &Task1Stk[TaskStkLengh - 1], 3);
0000c8 e3a03003 MOV r3,#3
0000cc e59f20a4 LDR r2,|L1.376|
0000d0 e3a01000 MOV r1,#0
0000d4 e24f008c ADR r0,|L1.80|
0000d8 ebfffffe BL OSTaskCreate
;;;82
;;;83 while (1)
0000dc ea00000c B |L1.276|
;;;84 {
;;;85 OSSemPend(DispSem, 0, &err); // 等待信号量
|L1.224|
0000e0 e28d2014 ADD r2,sp,#0x14
0000e4 e3a01000 MOV r1,#0
0000e8 e59f0074 LDR r0,|L1.356|
0000ec e5900000 LDR r0,[r0,#0] ; DispSem
0000f0 ebfffffe BL OSSemPend
;;;86 UART0_SendStr(str0);
0000f4 e28d0004 ADD r0,sp,#4
0000f8 ebfffffe BL UART0_SendStr
;;;87 OSTimeDly(50);
0000fc e3a00032 MOV r0,#0x32
000100 ebfffffe BL OSTimeDly
;;;88 err = OSSemPost(DispSem); // 发送信号量
000104 e59f0058 LDR r0,|L1.356|
000108 e5900000 LDR r0,[r0,#0] ; DispSem
00010c ebfffffe BL OSSemPost
000110 e58d0014 STR r0,[sp,#0x14]
|L1.276|
000114 eafffff1 B |L1.224| ;83
;;;89
;;;90 }
;;;91
;;;92 }
ENDP
main PROC
;;;61 int main (void)
;;;62 {
000118 e92d4010 PUSH {r4,lr}
;;;63 OSInit ();
00011c ebfffffe BL OSInit
;;;64 DispSem = OSSemCreate(1);
000120 e3a00001 MOV r0,#1
000124 ebfffffe BL OSSemCreate
000128 e59f1034 LDR r1,|L1.356|
00012c e5810000 STR r0,[r1,#0] ; DispSem
;;;65 OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2);
000130 e3a03002 MOV r3,#2
000134 e59f2040 LDR r2,|L1.380|
000138 e3a01000 MOV r1,#0
00013c e24f00a0 ADR r0,|L1.164|
000140 ebfffffe BL OSTaskCreate
;;;66 OSStart ();
000144 ebfffffe BL OSStart
;;;67 return 0;
000148 e3a00000 MOV r0,#0
;;;68 }
00014c e8bd8010 POP {r4,pc}
|L1.336|
000150 e000c000 DCD 0xe000c000
|L1.340|
000154 6d612069 DCB "i am"
000158 73617420 DCB " tas"
00015c 2e62206b DCB "k b."
000160 00000a0d DCB "\r\n\0\0"
|L1.356|
000164 00000000 DCD DispSem
|L1.360|
000168 4d412049 DCB "I AM"
00016c 53415420 DCB " TAS"
000170 2e41204b DCB "K A."
000174 00000a0d DCB "\r\n\0\0"
|L1.376|
000178 000000fc DCD Task1Stk + 252
|L1.380|
00017c 000000fc DCD TaskStk + 252
ENDP
AREA ||.data||, DATA, ALIGN=2
DispSem
DCD 0x00000000
AREA ||.bss.5||, NOINIT, ALIGN=2
TaskStk
% 256
Task1Stk
% 256
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -