IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> windows bat脚本学习三(ARM相关执行文件,armar.exe | armasm.exe | armcc.exe | fromelf.exe) -> 正文阅读

[嵌入式]windows bat脚本学习三(ARM相关执行文件,armar.exe | armasm.exe | armcc.exe | fromelf.exe)

在使用ARM机型进行开发的时候,都会用到ARM底层提供的执行文件,今天就来分析一下这几个文件。

1.fromelf.exe

该文件的主要功能是生成.bin文件。该工具的语法为

fromelf????????[options]????????input_file

详细参数如下:

可选参数

--help 显示帮助

--vsn 显示版本信息

--output_file 输出文件(默认文本格式)

--nodebug 在生成的镜像中不包含调试信息

--nolinkview 在生成的镜像中不包含段信息

二进制输出格式

--bin 二进制输出

--m32 摩托罗拉32位hex

--i32 因特尔32位hex

--vhx 适配字节hex格式

--base addr 可选择设置基础地址对于m32i32

需要调试信息的输出格式

--fieldoffsets 结构/类的汇编语言描述

--expandarrays 被扩展的内部或外部数组

其他输出格式

--elf ELF(Executable and Linking Format)格式

--text 文本格式

??????? 文本格式的标志

??????? -v 打印详细信息

??????? -a 打印数据地址(针对镜像调试编译)

??????? -c 打印反汇编代码

??????? -d 打印数据段的内容

??????? -e 打印异常表

??????? -g 打印调试表

??????? -r 打印重定位信息

??????? -s 打印字符表

??????? -t 打印字符串表

??????? -y 打印动态段的内容

??????? -z 打印代码和数据大小信息

??????? 因为keil是默认生成.axf文件的,该文件包含了二进制和调试信息。现在就是通过.axf文件通过这个工具转换成bin文件。

路径/fromelf.exe --bin -o [输出Bin文件的路径] [.axf的路径]

正常我们输入的路径应该是这样的

G:\keil_5\ARM\ARMCC\bin\fromelf.exe --bin -o? ./bin/输出名.bin? ./Objects/输出名.axf

这里可以简化一下

G:\keil_5\ARM\ARMCC\bin\fromelf.exe --bin -o? ./bin/@L.bin? ./Objects/@L.axf

@L的意思是自己再keil中设置的输出文件名。

可以再简化一下

$KARM\ARMCC\bin\fromelf.exe --bin -o? ./bin/@L.bin? ./Objects/@L.axf

$K的意思是MDK的安装路径。

这里也可以写成

$J\..\bin\fromelf.exe --bin -o? ./bin/@L.bin? ./Objects/@L.axf

$J是编译器的绝对地址,通常是MDK安装路径\ARM\ARMCC\include

再简单一点可以写成

$J\..\bin\fromelf.exe --bin -o? ./bin/@L.bin #L

#L就是.axf完整路径和文件名

再简单一点可以写成

$J\..\bin\fromelf.exe --bin -o? $L@L.bin #L

$L本工程的输出路径。在Output->create Executable中。

详细可以看windows bat脚本学习一(基础指令)_qq_34981的博客-CSDN博客_bat设置环境变量文章的第7小节。

注:这里有时候在生成bin文件的时候会生成一个.bin的文件夹。可以将参数bin修改为bincombined来解决。这个生成文件夹的原因目前只知道跟修改了ROM的起始地址有关,具体的原因还未知。

2.armar.exe

该文件主要是从.a和lib文件中提取信息。

命令格式:armar options archive [file_list]

?-r???????? 在 <file_list> 插入文件, 替换掉已经存在的同名成员.
?-d???????? 在 <file_list> 中删除成员.
?-x???????? 在 <file_list> 中提取同名的成员.
?-m???????? 在 <file_list> 中移动文件.
?-p???????? 打印文件到标准输出设备.
?-a pos???? 插入/删除 <pos> 后面的文件.
?-b pos???? 插入/删除 <pos> 前面的文件.
?-u???????? 只更新旧的文件, 与 -r 一起使用.

?-n???????? 不要向object文件中添加符号表.
?-s???????? 强制重新生成文档符号表.
?-t???????? 打印文档的内容表.
--zs??????? 显示符号表.
--zt??????? 汇总文档内容 (大小和输入).
?-c???????? 当一个新文档被创建的时候不显示警告.
?-C???????? 提取的时候不要覆盖一个已经存在的文件.
?-T???????? 截取系统最大长度文件名.
?-v???????? 提供详细输出.
--create??? 强制创建一个新的文档.
--via file? 从 via 文件中获取额外参数.
--sizes???? 列出所有成员大小与库的总大小.
--entries?? 列出包括入口点的部分.
--vsn?????? 打印最新的armar版本.
--help????? 打印帮助信息.

?比如要打印一个.a或lib的相关信息,可以调用如下指令armar.exe -zt 路径\文件.a。

结果如图

3.armasm.exe

命令格式:armasm [options] sourcefile

--list 生成列表文件

-o outputfile 最终输出文件名

--depend 保留make源文件的依赖

--errors 把标准错误判断放入errorsfile

-I dir 添加源文件的搜索目录

--pd

--predefine 预执行SET{L,A,S}指令

--maxcache <n> 最大闪存空间(默认 8MB)

--no_esc 忽略C文件

--no_warn 关闭警告信息

-g 输出调试表

--apcs 编译预定义去匹配已选择的过程调度回调

--checkreglist 警告关于输出指令LDM/STM寄存器列表

--li ARM小段模式、

--bi ARM大端模式

-M 写源文件依赖列表到stdout

--MD 写源文件依赖列表到inputfile.d文件

--keep 保持本地列表在目标文件的同步列表中

--regname none 不预定义寄存器名

--split_ldm 错误长LDM/STM

--unsafe 下载明确的错误到警告表

--via <file> 从file中读取更多的参数

--cpu <target-cpu> 设置目标ARM内核类型

--cpu list 输出所有可选择的CPU列表

--fpu <target-arch> 设置目标FP体系结构版本

--fpu_list 输出所有可选择的FP体系结构

--thumb 以thumb指令集编译

--arm 以ARM指令集编译

4.armcc.exe

链接编译器

命令格式:armcc [options] file1 file2......file n

--arm 创建ARM代码

--thumb 创建Thumb代码

--c90 切换到C模式(默认是.c文件)

--cpp 切换到C++模式(默认是.cpp文件)

-00 最小优先级

-01 受限的调试级别优化

-02 高优化

-03 最大优化

-Ospace 对代码大小进行优化

-Otime 优化最大优化级别的运行时间

--cpu <cpu> 选择CPU

--cpu list 输出所有被选中的CPU列表

-o <file> 最终输出文件的名字

-c 只进行编译,不链接

-asm 输出汇编以及obj文件

-s 只输出汇编文件

--interleave 交叉反汇编(同--asm 或 -s共同使用)

-E 仅仅预处理C代码

-D <symbol> 定义<symbol>符号并且传入编译过程

-g 为高级别调试创建表

-I <directory> 在编译的时候包含<directory>作为头文件搜索目录

5.armlink.exe

ARM链接工具

命令格式:armlink option-list input-file-list

?

option-list 不区分大小写的选项列表

input-file-file 输入对象或者库文件列表

--output file 指定输出文件名

--via file 从文件中读更多的参数

--partial 创建一个被分数链接的对象文件

--scatter file 分散加载文件

--ro-base n 设置执行地址空间域,包含RO只读数据段

--rw-base n 设置执行地址空间域,包含RW/ZI段

--bestdebug 添加调试信息为image 提供调试视图

--datacompressor off 不要压缩RW数据段

--no_debug 不要添加调试信息

--entry 指定输入段与输入点

--libpath 指定系统库文件路径

--userlibpath 指定用户库文件路径

--no_locals 不要添加局部标号到image的标号列表

--no_remove 不要移除image的未使用段

--callgraph 创建一个函数静态调用图

--info topic 列出镜像信息

?--map 显示镜像内存映射

--symbols 列出惊险符号

--xref 列出输入的段之间所有的交叉引用,最终输出会放在.map 文件里面

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:45:28  更:2022-03-10 22:46:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:38:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码