【ARM】解析MDK生成的C Compiler list文件的具体内容

1、 文档目标

用于解析MDK生成的C Compiler list文件的具体内容。

2、 问题场景

在MDK的options窗口中的Listing栏中有生成对应的源文件的编译列表(如图2-1)。但是,对于这个生成的列表中包含什么具体的信息就不太清楚了。

图2-1

3、软硬件环境

1、软件版本:Keil MDK 5.38a

2、电脑环境:Windows 11

3、外设硬件:无

4、解决方法

1)、在Project窗口中,选中对应的文件,右键选择打开list文件(如图4-1)。

图 4-1

2)、在生成的C Compiler List文件中包含以下的内容:

(1)、第一行,显示该文件所使用的编译器型号,第二行显示编译器的所执行的编译参数有哪些。第三行显示所用的指令集。

; 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..\obj\main.o --asm_dir=..\OBJ\ --list_dir=..\OBJ\ --depend=..\obj\main.d --cpu=Cortex-M4.fp.sp --apcs=interwork -O3 --diag_suppress=9931 -I..\CORE -I..\SYSTEM\delay -I..\SYSTEM\sys -I..\SYSTEM\usart -I..\USER -I..\HARDWARE\LED -I..\FWLIB\inc -I.\RTE\_LED -IC:\Users\USER\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.16.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -D__UVISION_VERSION=538 -D_RTE_ -DSTM32F407xx -D_RTE_ -DSTM32F40_41xxx -DUSE_STDPERIPH_DRIVER --omf_browse=..\obj\main.crf main.c]
                          THUMB

(2)、第一行表示用AREA中定义了一个名为i.main的内存区域,Code表示这个区域是存储代码的,READOLY表示该区域是只读的,ALIGN=2表示该区域的对齐方式是2字节。

第二行main PROC表示main 函数开始的位置。

然后,后面的就都是对应语句的汇编指令了,到最后的ENDP表示结束位置

                          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);		  //³õʼ»¯ÑÓʱº¯Êý
000002  f7fffffe          BL       delay_init
;;;18     	add(3,4);
;;;19     	LED_Init();		        //³õʼ»¯LED¶Ë¿Ú
000006  f7fffffe          BL       LED_Init
;;;20     	
;;;21       /**ÏÂÃæÊÇͨ¹ýÖ±½Ó²Ù×÷¿âº¯ÊýµÄ·½Ê½ÊµÏÖ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¶ÔÓ¦Òý½ÅGPIOF.10À­¸ß£¬Ãð µÈͬ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¶ÔÓ¦Òý½ÅGPIOF.0À­¸ß£¬Ãð  µÈͬ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¶ÔÓ¦Òý½Å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,world\r\n");  
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这个部分是表示编译器开始处理内嵌汇编代码(inline assembler)。列出具体的汇编指令和它们如何映射到内存地址的情况。

;*** 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 ***

————————————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

关于亿道电子

亿道电子技术有限公司(www.emdoor.cn)是国内资深的研发工具软件提供商,公司成立于2002年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值