⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 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 + -