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

news2024/12/28 22:27:50

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年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2043650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧安防/一网统管/视频监控EasyCVR视频汇聚平台的视频轻量化特点及应用

在数字化时代,视频监控已成为保障公共安全、提升管理效率的重要手段。随着技术的不断进步,EasyCVR视频汇聚平台应运而生,平台以其独特的视频轻量化特点在安防监控领域展现出强大的应用潜力。本文将详细探讨EasyCVR视频汇聚平台的视频轻量化特…

空间变换其参数化二

目录 刚性变换的问题描述 最优平移向量求解 最优旋转矩阵求解 反射矩阵消除 基于SVD刚性变换矩阵计算流程总结 刚性变换的问题描述 令P{p_1,p_2,...,p_n}和Q{q_1,q_2,...,q_n}是R^d空间内的两组对应的点。希望找到一个刚性的变换,在最小二乘的意义上最优地对齐…

如何使用pholcus库进行多线程网页标题抓取以提高效率?

在当今信息爆炸的时代,数据抓取已成为获取信息的重要手段。Go语言因其高效的并发处理能力而成为编写爬虫的首选语言之一。pholcus库,作为一个强大的Go语言爬虫框架,提供了多线程抓取的能力,可以显著提高数据抓取的效率。本文将介绍…

搭建内网开发环境(四)|基于nexus搭建maven私服

引言 在前面一篇教程中,通过 docker-compose 快速搭建好了开发环境所需的应用,本文介绍基于 nexus 搭建 maven 私服;虽然本篇教程是基于内网的,但是本文会分别介绍在拥有外网的情况下配置私服和内网的情况下配置私服,…

【论文阅读03】用于海洋物体检测的多注意力路径聚合网络

来源:用于海洋物体检测的多注意力路径聚合网络 |应用智能 (springer.com) 一、背景: 水下图像存在偏色、对比度低、能见度低等问题,使得海洋物体难以被探测到。这些都增加了海上目标探测的难度。 目前流行的检测器方法是基于卷积神经网络&…

怎么将pdf转为ppt文件?pdf转ppt的8个方法

在诸多职场与学术交流的场合中,我们时常面临将详尽的PDF文件转化为生动且易于编辑的PPT演示文稿的需求。这一转换不仅是为了满足演示时的灵活性,更是为了提升信息传递的效率与观众的理解度。从简单的在线工具到功能全面的专业软件,我们拥有多…

使用balenaEtcher制作 macOS 系统启动u盘

第一步:首先准备一个U盘要求8G(macOS Catalina 10.15.x及以上要求16G)或以上的空U盘,有资料会被格式化 第二步:下载并安装etcher https://www.apple114.com/threads/83/ 第三步:下载macOS引导镜像 (通过序列号查询电脑确认电脑…

Hive3:常用查询语句整理

一、数据准备 建库 CREATE DATABASE itheima; USE itheima;订单表 CREATE TABLE itheima.orders (orderId bigint COMMENT 订单id,orderNo string COMMENT 订单编号,shopId bigint COMMENT 门店id,userId bigint COMMENT 用户id,orderStatus tinyint COMMENT 订单状态 -3:用…

记录前后端接口使用AES+RSA混合加解密

一、前言 由于项目需求,需要用到前后端数据的加解密操作。在网上查找了了相关资料,但在实际应用中遇到了一些问题,不能完全满足我的要求。 以此为基础(前后端接口AESRSA混合加解密详解(vueSpringBoot)附完…

讲解 狼人杀中的买单双是什么意思

买单双这个概念通常出现在有第三方的板子中 比如 咒狐板子 丘比特板子 咒狐板子 第一天狼队只要推掉预言家 第二天就可以与咒狐协商绑票 推出其他好人 以及丘比特板子 如果拉出一个人狼链 那么如果孤独再连一个狼人 那么 狼队第一天就可以直接派人上去拿警徽,这样…

NDP(Neighbor Discovery Protocol)简介

定义 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由设备发现(Router Discovery),…

萌啦数据插件使用情况分析,萌啦数据插件下载

在当今数字化时代,数据已成为企业决策与个人分析不可或缺的重要资源。随着数据分析工具的日益丰富,一款高效、易用的数据插件成为了众多用户的心头好。其中,“萌啦数据插件”凭借其独特的优势,在众多竞品中脱颖而出,成…

[数据集][图像分类]肾脏病变分类数据集识别囊肿肿瘤结石数据集11756张4类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):11756 分类类别数:4 类别名称:["cyst","normal&…

上海晋名室外危化品暂存柜助力燃料电池行业

近日又有一个SAVEST室外危化品暂存柜项目成功验收交付使用。 用户是一家致力于为燃料电池行业提供研发、创新解决方案和技术支持的科技型中小企业。 用户在日常经营活动中涉及到氢气实验过程中的安全问题, 4月初在网上看到上海晋名室外暂存柜系列很感兴趣&#xf…

[EC Final 2020] ICPC2020 东亚赛区决赛重现赛题解

比赛链接:EC Final 2020 和 cyx20110930 组的队,用他的号交的题。顺便帮助他橙名,好耶!(rk 25,我俩各写 2 道) Problem B: 这道是 cyx20110930 写的,顺便安利(copy)一下他的题解。 题目意思…

html+css网页制作 化妆品电商4个页面

htmlcss网页制作 化妆品电商4个页面 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#xff…

操作系统(Linux实战)-进程创建、同步与锁、通信、调度算法-学习笔记

1. 进程的基础概念 1.1 进程是什么? 定义: 进程是操作系统管理的一个程序实例。它包含程序代码及其当前活动的状态。每个进程有自己的内存地址空间,拥有独立的栈、堆、全局变量等。操作系统通过进程来分配资源(如 CPU 时间、内…

LabVIEW光纤管道泄漏检测系统

光纤管道泄漏定位系统利用干涉型光纤传感器和数据采集卡进行信号获取与处理,实现了高灵敏度的泄漏点定位。通过软件对泄漏信号进行实时降噪处理和数据库管理,提高了系统的自动化和智能化水平。 项目背景: 长输管道在石油、天然气等行业中发挥…

【C++第十二课-多态】多态概念、多态原理

目录 多态的概念概念多态形成的条件虚函数的重写虚函数重写的两个例外 多态的题目C11增加的关于多态的关键字finaloverride 多态原理虚函数表指针 vfptr多态的实现静态绑定和动态绑定打印虚函数表补充 抽象类概念接口继承和实现继承 多态的概念 概念 具体点就是去完成某个行为…

Centos安装Kafka

安装Kafka 安装Java,因为Kafka运行需要JDK运行环境 sudo yum install java-1.8.0-openjdk-devel.x86_64如果不知道JDK版本,可以使用下面命令查看可用的JDK版本 sudo yum search openjdk添加EPEL仓库 sudo yum install epel-release下载Kafka 先去查看…