Embedded 单片机中十六进制文件如何转换成二进制文件

Embedded 单片机中十六进制文件如何转换成二进制文件,embedded,hex,microcontroller,Embedded,Hex,Microcontroller,我是嵌入式编程新手。我正在使用一个编译器将源代码转换成十六进制,我将烧成微控制器。我的问题是:Microtroller(所有IC)将只支持二进制数(0和1)。那么它是如何使用十六进制文件的呢?将程序/数据加载到闪存中的软件可以读取它支持的任何格式,这些格式可以是英特尔十六进制、摩托罗拉srecord、elf、coff或原始二进制或其他格式。然后正确地使用相关的1和0对闪存进行编程。将程序/数据加载到闪存中的软件可以读取其支持的任何格式,这些格式可以是intel hex、motorola srec

我是嵌入式编程新手。我正在使用一个编译器将源代码转换成十六进制,我将烧成微控制器。我的问题是:Microtroller(所有IC)将只支持二进制数(0和1)。那么它是如何使用十六进制文件的呢?

将程序/数据加载到闪存中的软件可以读取它支持的任何格式,这些格式可以是英特尔十六进制、摩托罗拉srecord、elf、coff或原始二进制或其他格式。然后正确地使用相关的1和0对闪存进行编程。

将程序/数据加载到闪存中的软件可以读取其支持的任何格式,这些格式可以是intel hex、motorola srecord、elf、coff或原始二进制或其他格式。然后做正确的事情,只使用相关的1和0对闪存进行编程。

首先,您现在使用的PC机内部有一个处理器,其工作原理与任何其他微控制器一样。你用它来浏览互联网,虽然里面都是“1和0”。我想你的实际固件还没有达到你电脑目前运行的水平

microntroller仅支持二进制数(0和1)

你认为“microntroller只支持二进制数(0和1)”是一个误解。是的,在非常低的层次上,微控制器包含一堆晶体管,每个晶体管只能存储两种状态的信息(一位)。 但这样做的原因很简单,因为这是一种物理存储一小块数据的实用方法

如果查看uC体系结构的组装说明手册,您将看到大量指令在不同的数据宽度上运行(位分组为8、16或更大的块)。如果您的控制器是,比如说,16位,那么这将是大多数指令的基本字长,也是最有效的。当用C编程时,这也是所有较小的整数类型扩展到的“特殊”
int
类型的大小

换句话说,bits只是硬件的构建块,大多数情况下甚至不应该涉及固件级别,更不用说更高的应用程序级别。把它比作人类的生命形式:人体是由细胞组成的,但也能做比单细胞生物体更多的事情,不是吗

我正在使用编译器将源代码转换为十六进制

实际上,您正在使用编译器为特定的微控制器体系结构创建机器代码。“Hex”,或者更准确地说,“Hex”只是用于将机器代码存储到文件中的几种文件格式之一,而且它是一种方便的纯文本ASCII文件,可以在记事本中轻松打开

为了澄清,假设您编写了一行简单的C代码,如下所示:

a = b + c;
为了将其转换为机器代码,编译器需要知道所针对的体系结构。对于虚构的uC架构,首先将其编译为以下虚构内容:

//编译器决定a、b、c将存储在地址0x1000、1004、1008处
mov ax,(0x1004)//将值从地址0x1004移动到累加器
add ax,(0x1008)//将地址0x1008中的值添加到累加器
mov(0x1000),ax//将值从累加器移动到地址0x1000
这些说明中的每一个都有自己的说明,可在组装说明手册中找到。如果指令在一个或多个参数上运行,uC将知道指令后面的字节是数据字节:

//mov-ax,(addr)-->操作码0x10
//添加ax,(addr)-->操作码0x20
//mov(地址),ax-->操作码0x30
mov ax(0x1004)//0x10(0x10 0x04)
添加ax,(0x1008)//0x20(0x10 0x08)
mov(0x1000),ax//0x30(0x10 0x00)
现在您已经有了机器代码,它被写成十六进制值,变成:

10 10 04 20 10 08 30 10 00
并转换为二进制:

0001000000010000000010000100000...
要将其传输到控制器,您将使用闪存上传程序知道如何读取的文件格式,这是Intel Hex最常用的格式


一旦传输到微控制器,它将作为一组位存储在闪存中,但控制器设计为以8位或更多位的块读取这些位,并根据上下文将其作为指令操作码或数据进行评估。对于上面的示例,它将读取前8位,并且看到它是一个指令操作码
0x10
(它需要一个额外的地址参数),它将读取下两个字节以形成地址
0x1004
。然后,它将执行该指令并推进。

首先,您现在使用的PC机内部有一个处理器,其工作原理与任何其他微控制器一样。你用它来浏览互联网,虽然里面都是“1和0”。我想你的实际固件还没有达到你电脑目前运行的水平

microntroller仅支持二进制数(0和1)

你认为“microntroller只支持二进制数(0和1)”是一个误解。是的,在非常低的层次上,微控制器包含一堆晶体管,每个晶体管只能存储两种状态的信息(一位)。 但这样做的原因很简单,因为这是一种物理存储一小块数据的实用方法

如果查看uC体系结构的组装说明手册,您将看到大量指令在不同的数据宽度上运行(位分组为8、16或更大的块)。如果您的控制器是,比如说,16位,那么这将是大多数指令的基本字长,也是最有效的。当用C编程时,这也是所有较小的整数类型扩展到的“特殊”
int
类型的大小

换句话说,bits只是构建ha的