麻豆一区二区三区蜜桃免费_中文字幕Va一区二区三区 _国产成人综合久久二区_丰满多毛的大隂户毛茸茸_国产麻豆剧果冻传媒免费老狼_无码人妻精品一区二区三区久久久 _亚洲中文无码精品卡通_蜜臀亚洲AV永久无码精品老司机

【ARM】解析MDK生成的C Compiler list文件的具體內(nèi)容

1、 文檔目標(biāo)

用于解析MDK生成的C Compiler list文件的具體內(nèi)容。


2、 問(wèn)題場(chǎng)景

在MDK的options窗口中的Listing欄中有生成對(duì)應(yīng)的源文件的編譯列表(如圖2-1)。但是,對(duì)于這個(gè)生成的列表中包含什么具體的信息就不太清楚了。


圖2-1


3、軟硬件環(huán)境

1、軟件版本:Keil MDK 5.38a

2、電腦環(huán)境:Windows 11

3、外設(shè)硬件:無(wú)


4、解決方法

1)、在Project窗口中,選中對(duì)應(yīng)的文件,右鍵選擇打開list文件(如圖4-1)。



圖 4-1


2)、在生成的C Compiler List文件中包含以下的內(nèi)容:

(1)、第一行,顯示該文件所使用的編譯器型號(hào),第二行顯示編譯器的所執(zhí)行的編譯參數(shù)有哪些。第三行顯示所用的指令集。

; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--c99 --list --split_sections --debug -c --asm --interleave -o..objmain.o --asm_dir=..OBJ --list_dir=..OBJ --depend=..objmain.d --cpu=Cortex-M4.fp.sp --apcs=interwork -O3 --diag_suppress=9931 -I..CORE -I..SYSTEMdelay -I..SYSTEMsys -I..SYSTEMusart -I..USER -I..HARDWARELED -I..FWLIBinc -I.RTE_LED -IC:UsersUSERAppDataLocalArmPacksKeilSTM32F4xx_DFP2.16.0DriversCMSISDeviceSTSTM32F4xxInclude -D__UVISION_VERSION=538 -D_RTE_ -DSTM32F407xx -D_RTE_ -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER --omf_browse=..objmain.crf main.c]
THUMB

(2)、第一行表示用AREA中定義了一個(gè)名為i.main的內(nèi)存區(qū)域,Code表示這個(gè)區(qū)域是存儲(chǔ)代碼的,READOLY表示該區(qū)域是只讀的,ALIGN=2表示該區(qū)域的對(duì)齊方式是2字節(jié)。

第二行main PROC表示main 函數(shù)開始的位置。

然后,后面的就都是對(duì)應(yīng)語(yǔ)句的匯編指令了,到最后的ENDP表示結(jié)束位置

                          AREA ||i.main||, CODE, READONLY, ALIGN=2

main PROC
;;;13 }
;;;14 int main(void)
000000 20a8 MOVS r0,#0xa8
;;;15 {
;;;16 //int num = 9;
;;;17 delay_init(168); //3?ê??ˉ?óê±oˉêy
000002 f7fffffe BL delay_init
;;;18 add(3,4);
;;;19 LED_Init(); //3?ê??ˉLED???ú
000006 f7fffffe BL LED_Init
;;;20
;;;21 /**????ê?í¨1y?±?ó2ù×÷?aoˉêyμ?·?ê?êμ??IO????**/
;;;22 while(1)
;;;23 {
;;;24 GPIO_ResetBits(GPIOF,GPIO_Pin_9);
00000a f44f7400 MOV r4,#0x200
00000e 4d0f LDR r5,|L2.76|
;;;25 GPIO_SetBits(GPIOF,GPIO_Pin_10); //LED1??ó|òy??GPIOF.10à-??£??e μèí?LED1=1;
000010 0066 LSLS r6,r4,#1
;;;26 delay_ms(500); //?óê±300ms
000012 f44f77fa MOV r7,#0x1f4
|L2.22|
000016 4621 MOV r1,r4 ;24
000018 4628 MOV r0,r5 ;24
00001a f7fffffe BL GPIO_ResetBits
00001e 4631 MOV r1,r6 ;25
000020 4628 MOV r0,r5 ;25
000022 f7fffffe BL GPIO_SetBits
000026 4638 MOV r0,r7
000028 f7fffffe BL delay_ms
;;;27 GPIO_SetBits(GPIOF,GPIO_Pin_9); //LED0??ó|òy??GPIOF.0à-??£??e μèí?LED0=1;
00002c 4621 MOV r1,r4
00002e 4628 MOV r0,r5
000030 f7fffffe BL GPIO_SetBits
;;;28 GPIO_ResetBits(GPIOF,GPIO_Pin_10); //LED1??ó|òy??GPIOF.10à-μí£?áá μèí?LED1=0;
000034 4631 MOV r1,r6
000036 4628 MOV r0,r5
000038 f7fffffe BL GPIO_ResetBits
;;;29 delay_ms(500); //?óê±300ms
00003c 4638 MOV r0,r7
00003e f7fffffe BL delay_ms
;;;30
;;;31 printf("hello,worldrn");
000042 a003 ADR r0,|L2.80|
000044 f7fffffe BL __2printf
000048 e7e5 B |L2.22|
;;;32
;;;33 }
;;;34 }
;;;35
ENDP

3)、最后面的Start embedded assembler到End embedded assembler這個(gè)部分是表示編譯器開始處理內(nèi)嵌匯編代碼(inline assembler)。列出具體的匯編指令和它們?nèi)绾斡成涞絻?nèi)存地址的情況。

;*** Start embedded assembler ***

#line 1 "main.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___6_main_c_add____REV16|
#line 129 "..\CORE\core_cmInstr.h"
|__asm___6_main_c_add____REV16| PROC
#line 130

rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___6_main_c_add____REVSH|
#line 144
|__asm___6_main_c_add____REVSH| PROC
#line 145

revsh r0, r0
bx lr
ENDP

;*** End embedded assembler ***

【更多軟件使用問(wèn)題請(qǐng)站內(nèi)搜索或關(guān)注B站:億道電子查看視頻教學(xué)】