精华内容
下载资源
问答
  • hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。 Hex文件格式解析 Hex文件如果用特殊的程序来查看(一般记事本...

    目录

    Hex文件格式解析

    代码实现:


    前言介绍转载来自 百度百科

    hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。

    Hex文件格式解析

    Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。打开后可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。Hex文件可以按照如下的方式进行拆分来分析其中的内容:

    例如:

    :020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA

    第一个 0x02 为数据长度。

    紧跟着后面的0x00 0x00 为地址。

    再后面的0x04为数据类型,类型共分以下几类:

    '00' Data Record//数据记录

    '01' End of File Record//文件结束记录

    '02' Extended Segment Address Record//扩展段地址记录

    '03' Start Segment Address Record//开始段地址记录

    '04' Extended Linear Address Record//扩展线性地址记录

    '05' Start Linear Address Record//开始线性地址记录

    然后,接着0x04后面的两个 0x00 0x00就是数据。最后一个0xFA是校验码。

    HEX文件的每一行都是这样的格式:

    <0x3a>

    [数据长度1Byte]

    [数据地址2Byte]

    [数据类型1Byte]

    [数据nByte]

    [校验1Byte]

    <0x0d>

    <0x0a>

    在例如:

    :1000000018F09FE518F09FE518F09FE518F09FE5C0

    按照上面的数据行格式分析如下:

    <0x3a>

     

    [数据长度1Byte]

    10(十六进制)

    [数据地址2Byte]

    00 00

    [数据类型1Byte]

    00

    [数据nByte]

    18F09FE518F09FE518F09FE518F09FE5

    [校验1Byte]

    C0

    <0x0d>

     

    <0x0a>

     

    每行中的数据并不是一定有的,第二个字节数据长度为0,那么这行就没有数据。

    由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,就有了Extended Linear Address Record。如果这行的数据类型是0x04,那么,这行的数据就是随后数据的基地址。例如:

    :020000040004F6

    :1000000018F09FE518F09FE518F09FE518F09FE5C0

    :1000100018F09FE5805F20B9F0FF1FE518F09FE51D

    第一行,是Extended Linear Address Record,里面的数据,也就是基地址是0x0004,第二行是Data Record,里面的地址值是0x0000。那么数据18F09FE518F09FE518F09FE518F09FE5要写入FLASH中的地址为 (0x0004 << 16) | 0x0000,也就是写入FLASH的0x40000这个地址。同样,第三行的数据的写入地址为0x40010。当一个HEX文件的数据超过7k的时候,文件中就会出现多个Extended Linear Address Record。

    End of File Record 行是每一个HEX文件的最后一行。例如:

    :00000001FF

    这样的一行数据内容是固定的,数据长度为0,地址为0。

    校验值:每一行的最后一个值为此行数据的校验和。例如:

    :1000000018F09FE518F09FE518F09FE518F09FE5C0 这行中的 0xC0

    :1000100018F09FE5805F20B9F0FF1FE518F09FE51D 这行中的 0x1D

    校验和的算法为:计算从0x3A 以后(不包括0x3A)的所有各字节的和模256的余。即各字节二进制算术和,不计超过256的溢出值,然后用0x100减去这个算数累加和,得出得值就是此行得校验和。

    代码实现:

    /*************************************************************************
    > File Name: file.c
    > Author: sun
    > Mail:
    > Created Time: Mon 08 Oct 2018 01:45:41 AM PDT
    ************************************************************************/
    #include <stdio.h>
    #include <string.h>
    #include "hex_to_bin.h"
    const char* RetString[] =
    {
    	"bin file to hex file success!",
    	"line data of hex file is too large",
    	"line data of hex file is too short",
    	"line data of hex file is no colon",
    	"line data of hex file type is error",
    	"line data of hex file length is error",
    	"line data of hex file check error",
    	"hex file is not exist",
    	"bin file path is error",
    	"hex file is no end"
    };
    
    /********************************************************************************
    input:
    c:单个字符('0'~'9' 'a'~'f', 'A'~'F')
    output:
    单个字符转化为单个字符
    ********************************************************************************/
    static uint8_t HexCharToBinBinChar(char c)
    {
    	if (c >= '0' && c <= '9')
    		return c - '0';
    	else if (c >= 'a' && c <= 'z')
    		return c - 'a' + 10;
    	else if (c >= 'A' && c <= 'Z')
    		return c - 'A' + 10;
    	return 0xff;
    }
    
    /********************************************************************************
    input:
    p: 两个文本字符
    output:
    转化为1个字节
    ********************************************************************************/
    static uint8_t Hex2Bin(const char *p)
    {
    	uint8_t tmp = 0;
    	tmp = HexCharToBinBinChar(p[0]);
    	tmp <<= 4;
    	tmp |= HexCharToBinBinChar(p[1]);
    	return tmp;
    }
    /********************************************************************************
    input:
    src: hex单行字符串
    p->type: 如果函数返回结果正确,这里就存着转化后的类型
    p->len: 如果函数运行正确,这里就存着转化后的bin数据长度
    p->data: 如果函数运行正确,长度并且不为0,该指针就只想转化后的数据
    p->addr[0]: 如果函数返回结果正确,这里就存着地址的低字节
    p->addr[1]: 如果函数返回结果正确,这里就存着地址的低字节
    output:
    返回hex格式流分析的结果
    ********************************************************************************/
    
    static RESULT_STATUS parserLine(char *src, BinFormat *p)
    {
    	static cnt = 0; //count
    	char buf[4];
    	static int flag = 0;
    	uint8_t check = 0, tmp[4], binLen;
    	uint16_t hexLen = strlen(src);
    	uint16_t num = 0, offset = 0;
    	if (hexLen > HEX_MAX_LENGTH)//数据内容过长
    		return RES_DATA_TOO_LONG;
    	if (hexLen < HEX_MIN_LEN)
    		return RES_DATA_TOO_SHORT;//数据内容过短
    	if (src[0] != ':')
    		return RES_NO_COLON;//没有冒号
    	if ((hexLen - 1) % 2 != 0)
    		return RES_LENGTH_ERROR;//hexLen的长度应该为奇数
    	binLen = (hexLen - 1) / 2;//bin总数据的长度,包括长度,地址,类型校验等内容
    	while (num < 4)
    	{
    		offset = (num << 1) + 1;
    		tmp[num] = Hex2Bin(src + offset);
    		check += tmp[num];
    		num++;
    	}
    	//把解析的这些数据保存到结构体中
    	p->len = tmp[0];
    	p->addr = tmp[1];
    	p->addr <<= 8;
    	p->addr += tmp[2];
    	p->type = tmp[3];
    	while (num < binLen)
    	{
    		offset = (num << 1) + 1;//保存真正的bin格式数据流
    		p->data[num - 4] = Hex2Bin(src + offset);
    		check += p->data[num - 4];
    		num++;
    	}
    	//获取扩展地址
    	if (p->type == 4)
    	{
    		strncpy(buf, src + 9, 4);
    		p->base_addr = p->data[0];
    		p->base_addr <<= 8;
    		p->base_addr += p->data[1];
    		cnt++;
    	}
    
    	//检查hex格式流的长度和数据的长度是否一致	
    	if (p->len != binLen - 5)
    		return RES_LENGTH_ERROR;
    	//检查校验是否通过
    	if (check != 0)
    		return RES_CHECK_ERROR;
    	return RES_OK;
    }
    RESULT_STATUS getData(char *src, char *out, unsigned int start_addr, unsigned int *datalen)
    {
    
    	FILE *src_file;
    	uint16_t addr_low = 0;
    	uint32_t addr_hign = 0;
    	char buffer_hex[1024];
    	uint8_t buffer_bin[1024];
    	BinFormat p = {0};
    	SaveInfo sp = {0};
    	RESULT_STATUS res;
    	char read_flag = 0;
    	unsigned int file_pos=0;
    	int filesize = 0;
    	p.data = buffer_bin;
    	src_file = fopen(src, "r");//以文本的形式打开一个hex文件
    	if (!src_file)
    		return RES_HEX_FILE_NOT_EXIST;
    
    	fseek(src_file, 0, SEEK_SET); //定位到开头,准备开始读取数据  
    	while (!feof(src_file))
    	{
    		fscanf(src_file, "%s\r\n", buffer_hex);
    		res = parserLine(buffer_hex, &p);
    		if (res != RES_OK)
    		{
    			fclose(src_file);
    			return res;
    		}
    		switch (p.type)
    		{
    		case 0:	//数据记录
    			addr_low = p.addr;
    			sp.base_addr = addr_low + addr_hign; //地址偏移
    			sp.len = p.len;
    			sp.data = p.data;
    			if ((start_addr <= sp.base_addr)&& ((start_addr+ *datalen - 0x20)>= sp.base_addr))//偏移到指定位置
    			{
    				read_flag = 1;//开始读标志
    			}
    			else
    				read_flag = 0;
    			if (read_flag==1)
    			{
    				memcpy(out + sp.base_addr, sp.data, sp.len);//拷贝数据
    			}
    			break;
    		case 1:	//数据结束
    			return RES_OK;
    			break;
    		case 2:
    			addr_hign = ((uint32_t)p.base_addr) << 2;
    			break;
    		case 3:
    			continue;
    		case 4:
    			//用来标识扩展线性地址的记录
    			addr_hign = ((uint32_t)p.base_addr) << 16;
    			break;
    		case 5:
    			continue;
    		default:
    			fclose(src_file);
    			return RES_TYPE_ERROR;
    		}
    	}
    	
    	fclose(src_file);
    	return RES_LENGTH_ERROR;
    }
    
    

     

    展开全文
  • C语言:Keil5无法生成hex文件

    千次阅读 2019-10-22 00:00:47
    在已设置了创造hex文件的前提下,无法生成hex文件 解决办法 C语言源程序中调用了intrins.h头文件,这个函数可以使用汇编指令 将这个头文件去除后,可以正常生成hex文件。 尝试 在单片机C语言源程序尝试嵌套汇编指令...

    问题
    在已设置了创造hex文件的前提下,无法生成hex文件
    解决办法
    C语言源程序中调用了intrins.h头文件,这个函数可以使用汇编指令
    将这个头文件去除后,可以正常生成hex文件。
    尝试
    在单片机C语言源程序尝试嵌套汇编指令时出现了类似的问题

    展开全文
  • plc生成的pmw转成c语言hex文件
  • PAGE PAGE # / 8 第三课生成HEX文件和最小化系统 在开始C语言地主要内容时我们先来看看如何用KEIL UVISI0N2来编译生成用于烧写芯片地 HEX文件.HEX 文件格式是Intel公司提出地按地址排列地数据信息 数据宽度为字节...
  • 建立了第一个单片机C语言项目,但为了让编译好的程序能通过编程器写入51芯 片中,要先用编译器生成HEX文件,下面来看看如何用KEIL uVISION2来编译生成用于烧写 芯片的HEX文件。HEX文件格式是Intel公司提出的按地址...

    建立了第一个单片机C语言项目,但为了让编译好的程序能通过编程器写入51芯 片中,要先用编译器生成HEX文件,下面来看看如何用KEIL uVISION2来编译生成用于烧写 芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字 节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保 存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。我们先来打开第一个 项目,打开它的所在目录,找到test.Uv2的文件就能打开先前的项目了。然后右击图2-1 中的1项目文件夹,弹出项目功能菜单,选Options for Target’Target1’,弹出项目选项设置窗口, 同样先选中项目文件夹图标,这个时候在Project菜单中也有一样的菜单可选。打开项目选项窗口, 转到Output选项页图2-2所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件 名,3则是决定是否要创建HEX文件,选中它就能输出HEX文件到指定的路径中。选好了? 好,我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径 中了,如图2-3。这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实 验板看结果,至于编程器或仿真器品种繁多具体方法就看它的说明书了,这里也不做讨论。

    (技巧:一、在图2-1中的1里的项目文件树形目录中,先选中对象,再单击它就可对它进 行重命名操作,双击文件图标便可打开文件。二、在Project下拉菜单的最下方有最近编辑过

    的项目路径保存,这里能快速打开最近在编辑的项目。)

    图2-1项目功能菜单

     

    单片机C语言教程:C51HEX文件的生成和单片机最小系统

     

    图2-2 项目选项窗口

     

    http://www.21ic.com/mcu/

     

    图 2-3 编译信息窗口

    或许您已把编译好的文件烧到了芯片上,如果您购买或自制了带串行口输出元件的学习实 验板,那您就能把串行口和 PC 机串行口相联用串行口调试软件或 Windows 的超级终端,将其波特 率设为 1200,就能看到不停输出的“Hello World!”字样。如果您还没有实验板,那这 里先说说 AT89c51 的最小化系统,再以一实例程序验证最小化系统是否在运行,这个最小化 系统也易于自制用于实验。图 2-4 便是 AT89c51 的最小化系统,不过为了让我们能看出它 是在运行的,加了一个电阻和一个 LED,用以显示它的状态,晶体震荡器能根据自己的情况使用, 一般实验板上是用 11.0592MHz 或 12MHz,使用前者的好外是能产生标准的串行口波特率,后 者则一个机器周期为 1 微秒,便于做精确定时。在自己做实验里,注意的是 VCC 是+5V 的, 不能高于此值,不然将损坏单片机,太低则不能正常工作。在 31 脚要接高电平,这样我们 才能执行片内的程序,如接低电平则使用片外的程序存储器。下面建一个新的项目名为 OneLED 来验证最小化系统是否能工作 。程序如下:

    #include < AT89X51.h> //预处理命令

    void main(void) //主函数名

    {

    //这是第一种注释方式

    unsigned int a; //定义变量 a 为 int 类型

    /* 这是第二种注释方式

    */

    do{ //do while 组成循环

    for (a=0; a<50000; a++); //这是一个循环 P1_0 = 0; //设 P1.0 口为低电平,点亮 LED for (a=0; a<50000; a++); //这是一个循环 P1_0 = 1; //设 P1.0 口为高电平,熄灭 LED

    }

    while(1);

    }

     

    http://www.21ic.com/mcu/

     

    图 2-4 AT89c51 最小化系统

    这里先讲讲 KEIL C 编译器所支持的注释语句。一种是以“//”符号开始的语句,符号之后 的语句都被视为注释,直到有回车换行。另一种是在“/*”和“*/”符号之内的为注释。注 释不会被 C 编译器所编译。一个 C 应用程序中应有一个 main 主函数,main 函数能调用别的功能函数,但其它功能函数不允许调用 main 函数。不论 main 函数放在程序中的那个位置, 总是先被执行。用上面学到的知识编译写好的 OneLED 程序,并把它烧到刚做好的最小化系 统中。上电,刚开始时 LED 是不亮的(因为上电复位后所有的 IO 口都置 1 引脚为高电平), 然后延时一段时间(for (a=0; a<50000; a++)这句在运行),LED 亮,再延时,LED 熄灭, 然后交替亮、灭。第一个真正的小实验就做完,如果没有这样的效果那么您就要认真检查一下电路或编译烧写的步骤了。


    展开全文
  • https://blog.csdn.net/hwb_1988/article/details/45132417对于嵌入式而言,hex文件可能大家再熟悉不过了,对,我们大学时学习的51单片机编写的代码在keil上编译后就生成hex文件。那bin文件又是什么意思呢,它又和...

    https://blog.csdn.net/hwb_1988/article/details/45132417

    对于嵌入式而言,hex文件可能大家再熟悉不过了,对,我们大学时学习的51单片机编写的代码在keil上编译后就生成了hex文件。那bin文件又是什么意思呢,它又和hex文件的区别在哪?这也不是本文的重点,下面简单的描述下:

    本来是应该要描述下hex文件的数据格式,这个就留着下一篇文章来描述,其实百度上也有很多。下一张是hex文件转换为bin文件,刚好和本文相反。说了这么多,下面就直接贴出代码了,有不详细的可以给我留言,同时也欢迎大家喷我。

    代码是在VC6.0上面实现的:

    首先新建bin2hex.h文件

    #ifndef BIN2HEX_H

    #define BIN2HEX_H

    typedef unsigned char uint8_t;

    typedef unsigned short uint16_t;

    typedef unsigned long uint32_t;

    /***********************************

    *********************************************

    就是每次读写bin文件N个字节,然后再转化为hex格式流,hex格式流长度计算方式

    : + 长度 + 地址 + 类型 + N个数据(N >= 0) + 校验

    1 + 2 + 4+ 2 + N * 2 + 2

    ********************************************************************************/

    #define NUMBER_OF_ONE_LINE0x20

    #defineMAX_BUFFER_OF_ONE_LINE(NUMBER_OF_ONE_LINE * 2 + 11)

    typedef struct {

    uint8_t len;

    uint8_t addr[2];

    uint8_t type;

    uint8_t *data;

    } HexFormat;

    typedef enum {

    RES_OK = 0,//操作完成

    RES_BIN_FILE_NOT_EXIST,//相当于bin文件不存在,包括输入的路径可能存在不正确

    RES_HEX_FILE_PATH_ERROR//目标文件路径可能输入有误

    } RESULT_STATUS;

    RESULT_STATUS BinFile2HexFile(char *src, char *dest);

    #endif

    新建bin2hex.c 文件

    #include "bin2hex.h"

    #include

    /********************************************************************************

    input:

    dest: 为转换后的结果

    p->addr[0]: 高地址

    p->addr[1]: 低地址

    p->type: 记录类型

    p->data: 为bin格式流有效数据指针

    p->len: 为bin格式流有效数据长度

    output:

    返回有效数据的长度

    ********************************************************************************/

    uint16_t BinFormatEncode(uint8_t *dest, HexFormat *p)

    {

    uint16_t offset = 0;

    uint8_t check = 0, num = 0;//:(1) + 长度(2) + 地址(4) + 类型(2)

    sprintf(&dest[offset], ":%02X%02X%02X%02X", p->len, p->addr[0], p->addr[1], p->type);

    offset += 9;//hex格式流数据指针偏移2

    check = p->len + p->addr[0] + p->addr[1] + p->type;//计算校验和

    while (num < p->len)//当数据长度不为0,继续在之前的hex格式流添加数据

    {

    sprintf(&dest[offset], "%02X", p->data[num]);

    check += p->data[num];//计算校验和

    offset += 2;//hex格式数据流数据指针偏移2

    num++;//下一个字符

    }

    check = ~check + 1;//反码+1

    sprintf(&dest[offset], "%02X", check);

    offset += 2;

    return offset;//返回hex格式数据流的长度

    }

    RESULT_STATUS BinFile2HexFile(char *src, char *dest)

    {

    FILE *src_file, *dest_file;

    uint16_t tmp;

    HexFormat gHexFor;

    uint32_t low_addr = 0, hign_addr = 0;

    uint8_t buffer_bin[NUMBER_OF_ONE_LINE], buffer_hex[MAX_BUFFER_OF_ONE_LINE];

    uint32_t src_file_length;

    uint16_t src_file_quotient, cur_file_page = 0;

    uint8_t src_file_remainder;

    src_file = fopen(src, "rb");//源文件为bin文件,以二进制的形式打开

    if (!src_file)//这里也是相当于用来检查用户的输入是否准备

    {

    return RES_BIN_FILE_NOT_EXIST;

    }

    dest_file = fopen(dest, "w");//目的文件为hex文件,以文本的形式打开

    if (!dest_file)

    {

    return RES_HEX_FILE_PATH_ERROR;

    }

    fseek(src_file, 0, SEEK_END);//定位到文件末

    src_file_length = ftell(src_file);

    fseek(src_file, 0, SEEK_SET);//重新定位到开头,准备开始读取数据

    src_file_quotient = (uint16_t)(src_file_length / NUMBER_OF_ONE_LINE);//商,需要读取多少次

    src_file_remainder = (uint8_t)(src_file_length % NUMBER_OF_ONE_LINE);//余数,最后一次需要多少个字符

    gHexFor.data = buffer_bin;//指向需要转换的bin数据流

    while (cur_file_page < src_file_quotient)

    {

    fread(buffer_bin, 1, NUMBER_OF_ONE_LINE, src_file);

    gHexFor.len = NUMBER_OF_ONE_LINE;

    if ((low_addr & 0xffff0000) != hign_addr && hign_addr != 0)//只有大于64K以后才写入扩展线性地址,第一次一般是没有

    {

    hign_addr = low_addr & 0xffff0000;

    gHexFor.addr[0] = (uint8_t)((hign_addr & 0xff000000) >> 24);

    gHexFor.addr[1] = (uint8_t)((hign_addr & 0xff0000) >> 16);

    gHexFor.type = 4;

    gHexFor.len = 0;//记录扩展地址

    tmp = BinFormatEncode(buffer_hex, &gHexFor);

    fwrite(buffer_hex, 1, tmp, dest_file);

    fprintf(dest_file, "\n"); ;

    }

    gHexFor.addr[0] = (uint8_t)((low_addr & 0xff00) >> 8);

    gHexFor.addr[1] = (uint8_t)(low_addr & 0xff);

    gHexFor.type = 0;//数据记录

    tmp = BinFormatEncode(buffer_hex, &gHexFor);

    fwrite(buffer_hex, 1, tmp, dest_file);

    fprintf(dest_file, "\n"); ;

    cur_file_page++;

    low_addr += NUMBER_OF_ONE_LINE;

    }

    if (src_file_remainder != 0)//最后一次读取的个数不为0,这继续读取

    {

    fread(buffer_bin, 1, src_file_remainder, src_file);

    gHexFor.addr[0] = (uint8_t)((low_addr & 0xff00) >> 8);

    gHexFor.addr[1] = (uint8_t)(low_addr & 0x00ff);

    gHexFor.len = src_file_remainder;

    gHexFor.type = 0;//数据记录

    tmp = BinFormatEncode(buffer_hex, &gHexFor);

    fwrite(buffer_hex, 1, tmp, dest_file);

    fprintf(dest_file, "\n"); ;

    }

    gHexFor.addr[0] = 0;

    gHexFor.addr[1] = 0;

    gHexFor.type = 1;//结束符

    gHexFor.len = 0;

    tmp = BinFormatEncode(buffer_hex, &gHexFor);

    fwrite(buffer_hex, 1, tmp, dest_file);

    fprintf(dest_file, "\n"); ;

    fclose(src_file);

    fclose(dest_file);

    return RES_OK;

    }

    新建main.c文件,这里是带参数的,主要是方便批处理,是另有用途。

    #include

    #include "bin2hex.h"

    int main(int argc, char *argv[])

    {

    RESULT_STATUS res;

    if (argc != 3)

    {

    printf("input para doesn't match\r\n");

    return -1;

    }

    res = BinFile2HexFile(argv[1], argv[2]);

    switch (res)

    {

    case RES_OK:

    printf("hex file to bin file success!\r\n");

    return -1;

    case RES_BIN_FILE_NOT_EXIST:

    printf("bin file doesn't exist!\r\n");

    return -1;

    case RES_HEX_FILE_PATH_ERROR:

    printf("hex file path is error, please check it!\r\n");

    return -1;

    }

    return 0;

    }

    就三个源文件,编译生成bin2hex.c文件。

    下面描述下用法:

    把bin2hex.c文件拷贝到c盘根目录下,再拷贝一个需要转换的bin文件,这里我就拷贝了一个hwb.bin文件。然后点击菜单开始->运行->输入cmd->进入dos窗口->调整当前目录为c:,这个如果不知道的可以百度一下,无法就是就是命令cd.

    最后输入命令:bin2hex hwb.bin hwb.hex,输入后,可以看到提示说转换成功,大家再检查下是否有一个hex文件,本文的代码支持大于64K,大家把转换后的hex下载到单片机上运行试试看。

    往期精彩

    若觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

    展开全文
  • bin文件转换为hex文件C语言实现

    万次阅读 2015-04-19 19:25:22
    对于嵌入式而言,hex文件可能大家再熟悉不过了,对,我们大学时学习的51单片机编写的代码在keil上编译后就生成hex文件。那bin文件又是什么意思呢,它又和hex文件的区别在哪?这也不是本文的重点,下面简单的描述下...
  • 2006-04-28 20:45:58 51单片机C语言学习杂记 0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=30 src="http://www.xie-gang.com/Imag
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一个c程序#include#include"lcd.h"//--定义全局变量--//unsigned char PuZh[]=" hello ";void main(void){unsigned char i;LcdInit();for(i=0;i<...
  • hex文件合并

    2017-12-19 17:24:29
    压缩文件里是hex格式文件的合并源码,用c语言实现将两个hex文件合并成一个hex文件,用于mcu开发中将bootloader和app的合并生成一个烧录文件
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一个c程序#include#include"lcd.h"//--定义全局变量--//unsigned char PuZh[]=" hello ";void main(void){unsigned char i;LcdInit();for(i=0;i<...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一个c程序#include#include"lcd.h"//--定义全局变量--//unsigned char PuZh[]=" hello ";void main(void){unsigned char i;LcdInit();for(i=0;i<...
  • 51单片机控制的心形流水灯,为想要DIY的提供比较全面的参考。资源包含成果实物图片/视频/C语言代码/keil生成hex文件(对应STC89C515A60S2芯片)
  • 在FPGA开发里经常用到查表,查表的数据一般是放在ROM里的,而ROM里的数据一般都是从mif文件里导入的(还有是从HEX文件导入的方法)。自己在分析了QuartusII软件自动生成的mif文件的内容后,发现该文件的结构还是很简单...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一个c程序#include#include"lcd.h"//--定义全局变量--//unsigned char PuZh[]=" hello ";void main(void){unsigned char i;LcdInit();for(i=0;i<...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一个c程序#include#include"lcd.h"//--定义全局变量--//unsigned char PuZh[]=" hello ";void main(void){unsigned char i;LcdInit();for(i=0;i<...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一个c程序#include#include"lcd.h"//--定义全局变量--//unsigned char PuZh[]=" hello ";void main(void){unsigned char i;LcdInit();for(i=0;i<...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一个c程序#include#include"lcd.h"//--定义全局变量--//unsigned char PuZh[]=" hello ";void main(void){unsigned char i;LcdInit();for(i=0;i<...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一个c程序#include#include"lcd.h"//--定义全局变量--//unsigned char PuZh[]=" hello ";void main(void){unsigned char i;LcdInit();for(i=0;i<...
  • 本文简单介绍一下博主对MBD中C语言的认识。 文章目录1 MBD中为什么会用到C语言...但是编译器是无法将Simulink模型编译为Hex文件刷到ECU中的,只能编译C代码。所以在编译前要用到Embedded Coder工具先把模型生成代码,然
  • 1.关于制止LIB库文件的几点经验 1. 一个工程如何生成lib文件: ...3. 由上面一点可得出一个生成lib文件的工程改成生成hex文件或者bin文件那么可能编译错误(找不到未声明函数的原型),但是如果是生成li
  • 跑马灯 C语言

    2018-02-04 19:57:06
    该代码是C语言编写,十分简单,容易上手,直接用keil c编程软件打开,编译就行,生成HEX文件可以用烧录软件烧录到单片机中去,也可以用来仿真
  • 1.关于制止LIB库文件的几点经验 1. 一个工程如何生成lib文件: ...3. 由上面一点可得出一个生成lib文件的工程改成生成hex文件或者bin文件那么可能编译错误(找不到未声明函数的原型),但是如果是生成lib的可以...
  • bin2HEX 脚本

    2018-07-16 11:10:07
    bin2c bin2hex 将bin文件转换成 HEX格式, 并且生成C语言.h文件
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼第一个c程序#include#include"lcd.h"//--定义全局变量--//unsigned char PuZh[]=" hello ";void main(void){unsigned char i;LcdInit();for(i=0;i<...
  • 在Keil编写好程序以后,在左侧项目栏中单击鼠标右键,点击Options for Target’Target1’选项,在Target标签中将Xtal...再点击编译,生成Hex文件。再在Proteus中双击的51芯片,修改晶振频率,添加hex文件即可运行。
  • 上一篇建立了第一个单片机C语言项目,但为了让编译好的程序能通过编程器写入51芯 片中,要先用编译器生成HEX文件,下面来看看如何用KEIL uVISION2来编译生成用于烧写 芯片的HEX文件。HEX文件格式是Intel公司提出的按...
  • 智能温度巡检仪设计C语言程序,keil编译通过,可生成.hex文件,模块化,具有串口通讯,看门狗存储,报警,输入范围可调等功能。
  • 编译器(如TI集成开发环境CCS)编译C语言或者汇编语言程序生成二进制机器代码,然后由机器代码生成X0和Hex这两种十六进制文件格式。本文首先介绍这两种文件格式,然后介绍如何在CCS编译环境中产生这两种文件格式,...
  • C语言杂记2

    2019-05-06 20:35:45
    三、生成烧写HEX文件 (技巧:一、在图3-1中的1里的项目文件树形目录中,先选中对象,再单击它就可对它进 行重命名操作,双击文件图标便可打开文件。二、在Project下拉菜单的最下方有最近编辑过 的项目路径保存,...

空空如也

空空如也

1 2 3 4 5 6
收藏数 118
精华内容 47
热门标签
关键字:

c语言生成hex文件

c语言 订阅