嗨,对话框
我正在使用DA14583,当我使用智能片段下载我的十六进制文件时,它显示从文件xx.hex中读取0个字节,xxx字节已被忽略',因为它们的记录地址大于或等于0x8000'。
这阻碍了我的发展,你能帮我吗?非常感谢。
嗨caiziee,
你能给我一些信息,你想要做什么?烧掉闪光灯,OTP,通过UART下载?当您尝试做什么究竟是什么时候出现此消息?浏览到“选择文件以下载”字段,刻录内存?您使用的是哪个接口(UART,JTAG)?您正在使用的.hex文件,如何生成它以及它有多大?您使用的是哪个版本的智能赛段工作室?
谢谢mt_dialog.
对不起,我的错,我应该提供更多信息。
我正在使用JTAG接口刻录内部1MB闪光灯。当我浏览到下载文件时,无法打开,然后我收到了此错误消息。HEX文件由Keil 5构建。我们将自己的应用程序添加到BLE_Example项目中。十六进制文件大小为103KB。我正在使用智能片段3.9。生成的地图文件如下:==============================================================================
Code (inc. data) RO data RW data ZI data Debug
31936 3532 4656 584 11152 972004总计31936 3532 4656 584 11152 972004 ELF图像总数31936 3532 4656 584 0 0 ROM总数
==============================================================================
总RO尺寸(代码+ RO数据)36592(35.73KB)总RW大小(RW Data + ZI Data)ROM总大小(Code + RO Data + RW Data)
嗨Caizee,
由于您试图在583中刻录一个相当大的文件,因此在浏览大于某个默认值的情况下,似乎在智能片段中检查了智能片段。尝试将您的.hex文件转换为.bin文件后,在执行智能片段后会接受它,然后尝试将其刻录到583的闪光灯。
谢谢你的回复。但是我已经尝试过使用frommelf .exe获取bin文件。但我得到的不是一个bin文件,而是几个bin文件。他们是ER_IROM1 1 kbER_IROM2 1KB.ER_IROM3 1KB.ER_IROM4 1 kbER_IROM5 36 kbZI_RET20 1 kb
我不知道怎么把这些文件刻录到flash里?
在以前的SDK发布中,您应该能够在线查找(在“软件和工具”的“先前的软件版本”部分中,我们包含一个HEX2BIN实用程序,即它应该能够将您的.hex文件转换为适当的.bin文件向您置于智能片段中。例如,在SDK5.0.3中,您将能够在实用程序/ flash_programmer文件夹中找到Hex2bin。此外,您还可以在教程中的教程中找到它,在教程6:Suota工具Zip文件中。
嗨,对话框感谢您的快速回复。我试过了,但失败了。因为在我们的应用程序中,存在许多分布配置文件中定义的部分。地址不连续。当我使用hex2bin.exe时,我得到了这个输出:最低地址= 00000000最高地址= 00080857Pad Byte = FF8位校验和= 9C当我用智能片段闪烁时,我收到了一个错误,所以所选文件加偏移量的数据大小超过SPI闪存大小(131072字节)“。
关于这个你能给我更多的提示吗?先谢谢你。
早上没有与智能片段相关的东西,我假设.bin那是.hex的,如果你的.hex适用填充,那么.bin达到非常大的尺寸,散射文件达到了一些问题或者您已经在FW中的某处应用了固定的初始化值,即链接器无法正常处理(添加一些代码以初始化它)因此导致非常大的.bin文件以便应用value将其写入二进制中的相应地址,而不是使用额外的代码来应用它。
谢谢,对话框。scatter配置文件定义了几个空间,我基于sdk 5.0.5 ble_example项目做了一些更改。为了为代码RO和数据RO获得更多的ram空间,我重新安排了ram设置。你能帮我查一下吗?在我在我们的项目中添加一些新功能之前,使用.hex闪烁可以很好地工作。但当尺寸变大后,我被这个问题困住了。对于一些大数组初始化,我声明它们为__attribute__(((section("retention_mem_area0"),zero_init));,把它们放入留存ram中。
-----------------------------------------------------------------------------------------------------------------------------
#!armcc -E -I .\,. .\..\src\config,. ..\.. \..\ sdk \ common_project_files \——cpu Cortex-M0
# include“da1458x_config_basic.h”# include“da1458x_config_advanced.h”#include“da1458x_scatter_config.h”
;*************************************************************;*** uVision生成的散点加载描述文件;*************************************************************;;该分散文件设置为EM_MAP == 23!;如果应用程序使用不同的内存布局,那么它必须;使用自定义分散文件。; **************************************************************
lr_irom1 0x20000000 0x160 {;加载区域size_region.ER_IROM1 0x20000000 0x160 {;加载地址=执行地址* .o(重置,+第一个)}}
LR_IROM2 0x20000160 0x160 {ER_IROM2 0x20000160 0x160 {*(Jump_Table_Mem_area)}}
LR_IROM3 0x200002C0 0x80 {ER_IROM3 0x200002C0 0x80 {*(timeout_table_area)}}
LR_IROM4 0x20000340 0x100 {ER_IROM4 0x20000340 0x100 {* (nvds_data_storage_area)}}
lr_irom5 0x20000440 0x93c0 {er_irom5 0x20000440 0x8dc0 {* (InRoot $ $部分);类中必须包含的所有库节;根区域,例如__main.o,;__散射* .o,__dc * .o,和*区域$$表boot_vectors。o (+ RO)system_armcm0.o(+ ro); * armlib * (+ RO).any(+ RO).ANY (+ RW)}
RW_IRAM54 0x20009200 UNINIT 0x600 {;堆栈.ANY(栈)}
}
LR_RETENTION_RAM2 0x00080768 0x2898 {;延长睡眠模式;延长潮流:0x80000 - 0x83000ZI_RET20 0x00080768 UNINIT 0x22b8 {;0x80768是ROM代码使用的最后一个地址#if (BLE_CONNECTION_MAX_USER > 4)ARCH_SYSTEM.O(CS_AREA)# endifjump_table。o (heap_env_area)jump_table。o (heap_db_area)jump_table。o (heap_msg_area).ANY (retention_mem_area0);应用程序数据.ANY(+子)#if定义(spotar_patch_area)&&(spotar_patch_area == 1)app_spotar。o (spotar_patch_area);当spotar_patch_syram为1时放置在syram中# endif}
zi_ret21 exchange_memory_base exchange_memory_size {arch_main。o (BLE_exchange_memory)}}# endif
;LR_GUARD_RAM 0x50000000 0x0 {;RW_GRAM0 0x50000000 0x0 {;确保没有东西放在这里!; *。o(exchange_mem_case1);};}
我在你提供的散点图中看到的是,你从原始散点文件中删除了一些区域,如本帖所示(https://support.dialog-semicondiondiondum/how-build-program-code-larger-32kb.)但是,您也没有建议的rw_iram52和rw_iram53,也没有提出,也不是通过上一篇文章所示的替换区域。我无法讲述Keil如何在您附加的分散文件中反应。如果通过使用此散点文件,FW用于运行,但在添加一些附加代码之后,生成的二进制文件太大,那么也许您初始化您放置在保留RAM中的某些变量,并导致.bin文件是那么大的。如果您可以提供项目的地图文件和.hex文件,则会有帮助。
嗨,对话框感谢您的回复。当您提到时,我声明了一个常量数组,初始化号码,但我将其放在保留RAM区域0中。这会导致问题吗?我还仔细阅读了UM-B-011文件,它说“0x80000至0x82FFF应该被声明为包含不必初始化的数据(uninit)的区域。
嗨,对话框还有一个问题,OTP是32KB。在启动之后,OTP将应用程序代码镜像到ram中。但是我想知道OTP会镜像什么样的数据?Code RO或者Code RO+DATA RO,或者其他什么?非常感谢。
是的,这可能会导致您所面临的问题和链接器产生一个大型.hex文件,关于参考,你已经在嗯- b - 011,是的,提到specifiic区域仍然UNINIT自指定的区域由SDK零初始化它的自我开始。
关于OTP和被镜像的内容,在syram中,整个镜像是从OTP镜像出来的,fw运行时,镜像部分和OTP没有交互。
谢谢,我做了一个简短的实验来验证这一点。是的,当我把所有的const值从保留ram,二进制变化很小。那么当我用例23时,Code RO + DATA RO +RW RO的限制是什么?非常感谢您的回复。
使用case 23映射时的syram是38KB。
非常感谢,对话。你真的对我的问题做了很大的帮助。从你身边那么精彩的支持是非常好的。;-)
嗨caiziee,
你能给我一些信息,你想要做什么?烧掉闪光灯,OTP,通过UART下载?当您尝试做什么究竟是什么时候出现此消息?浏览到“选择文件以下载”字段,刻录内存?您使用的是哪个接口(UART,JTAG)?您正在使用的.hex文件,如何生成它以及它有多大?您使用的是哪个版本的智能赛段工作室?
谢谢mt_dialog.
对不起,我的错,我应该提供更多信息。
我正在使用JTAG接口刻录内部1MB闪光灯。当我浏览到下载文件时,无法打开,然后我收到了此错误消息。HEX文件由Keil 5构建。我们将自己的应用程序添加到BLE_Example项目中。十六进制文件大小为103KB。我正在使用智能片段3.9。
生成的地图文件如下:
==============================================================================
Code (inc. data) RO data RW data ZI data Debug
31936 3532 4656 584 11152 972004总计
31936 3532 4656 584 11152 972004 ELF图像总数
31936 3532 4656 584 0 0 ROM总数
==============================================================================
总RO尺寸(代码+ RO数据)36592(35.73KB)
总RW大小(RW Data + ZI Data)
ROM总大小(Code + RO Data + RW Data)
嗨Caizee,
由于您试图在583中刻录一个相当大的文件,因此在浏览大于某个默认值的情况下,似乎在智能片段中检查了智能片段。尝试将您的.hex文件转换为.bin文件后,在执行智能片段后会接受它,然后尝试将其刻录到583的闪光灯。
谢谢mt_dialog.
谢谢你的回复。
但是我已经尝试过使用frommelf .exe获取bin文件。但我得到的不是一个bin文件,而是几个bin文件。他们是
ER_IROM1 1 kb
ER_IROM2 1KB.
ER_IROM3 1KB.
ER_IROM4 1 kb
ER_IROM5 36 kb
ZI_RET20 1 kb
我不知道怎么把这些文件刻录到flash里?
嗨caiziee,
在以前的SDK发布中,您应该能够在线查找(在“软件和工具”的“先前的软件版本”部分中,我们包含一个HEX2BIN实用程序,即它应该能够将您的.hex文件转换为适当的.bin文件向您置于智能片段中。例如,在SDK5.0.3中,您将能够在实用程序/ flash_programmer文件夹中找到Hex2bin。此外,您还可以在教程中的教程中找到它,在教程6:Suota工具Zip文件中。
谢谢mt_dialog.
嗨,对话框
感谢您的快速回复。
我试过了,但失败了。
因为在我们的应用程序中,存在许多分布配置文件中定义的部分。地址不连续。当我使用hex2bin.exe时,我得到了这个输出:
最低地址= 00000000
最高地址= 00080857
Pad Byte = FF
8位校验和= 9C
当我用智能片段闪烁时,我收到了一个错误,所以所选文件加偏移量的数据大小超过SPI闪存大小(131072字节)“。
关于这个你能给我更多的提示吗?先谢谢你。
嗨caiziee,
早上没有与智能片段相关的东西,我假设.bin那是.hex的,如果你的.hex适用填充,那么.bin达到非常大的尺寸,散射文件达到了一些问题或者您已经在FW中的某处应用了固定的初始化值,即链接器无法正常处理(添加一些代码以初始化它)因此导致非常大的.bin文件以便应用value将其写入二进制中的相应地址,而不是使用额外的代码来应用它。
谢谢mt_dialog.
谢谢,对话框。
scatter配置文件定义了几个空间,我基于sdk 5.0.5 ble_example项目做了一些更改。为了为代码RO和数据RO获得更多的ram空间,我重新安排了ram设置。你能帮我查一下吗?在我在我们的项目中添加一些新功能之前,使用.hex闪烁可以很好地工作。但当尺寸变大后,我被这个问题困住了。
对于一些大数组初始化,我声明它们为__attribute__(((section("retention_mem_area0"),zero_init));,把它们放入留存ram中。
-----------------------------------------------------------------------------------------------------------------------------
#!armcc -E -I .\,. .\..\src\config,. ..\.. \..\ sdk \ common_project_files \——cpu Cortex-M0
# include“da1458x_config_basic.h”
# include“da1458x_config_advanced.h”
#include“da1458x_scatter_config.h”
;*************************************************************
;*** uVision生成的散点加载描述文件
;*************************************************************
;
;该分散文件设置为EM_MAP == 23!
;如果应用程序使用不同的内存布局,那么它必须
;使用自定义分散文件。
; **************************************************************
lr_irom1 0x20000000 0x160 {;加载区域size_region.
ER_IROM1 0x20000000 0x160 {;加载地址=执行地址
* .o(重置,+第一个)
}
}
LR_IROM2 0x20000160 0x160 {
ER_IROM2 0x20000160 0x160 {
*(Jump_Table_Mem_area)
}
}
LR_IROM3 0x200002C0 0x80 {
ER_IROM3 0x200002C0 0x80 {
*(timeout_table_area)
}
}
LR_IROM4 0x20000340 0x100 {
ER_IROM4 0x20000340 0x100 {
* (nvds_data_storage_area)
}
}
lr_irom5 0x20000440 0x93c0 {
er_irom5 0x20000440 0x8dc0 {
* (InRoot $ $部分);类中必须包含的所有库节
;根区域,例如__main.o,
;__散射* .o,__dc * .o,和*区域$$表
boot_vectors。o (+ RO)
system_armcm0.o(+ ro)
; * armlib * (+ RO)
.any(+ RO)
.ANY (+ RW)
}
RW_IRAM54 0x20009200 UNINIT 0x600 {;堆栈
.ANY(栈)
}
}
LR_RETENTION_RAM2 0x00080768 0x2898 {
;延长睡眠模式
;延长潮流:0x80000 - 0x83000
ZI_RET20 0x00080768 UNINIT 0x22b8 {;0x80768是ROM代码使用的最后一个地址
#if (BLE_CONNECTION_MAX_USER > 4)
ARCH_SYSTEM.O(CS_AREA)
# endif
jump_table。o (heap_env_area)
jump_table。o (heap_db_area)
jump_table。o (heap_msg_area)
.ANY (retention_mem_area0);应用程序数据
.ANY(+子)
#if定义(spotar_patch_area)&&(spotar_patch_area == 1)
app_spotar。o (spotar_patch_area);当spotar_patch_syram为1时放置在syram中
# endif
}
zi_ret21 exchange_memory_base exchange_memory_size {
arch_main。o (BLE_exchange_memory)
}
}
# endif
;LR_GUARD_RAM 0x50000000 0x0 {
;RW_GRAM0 0x50000000 0x0 {;确保没有东西放在这里!
; *。o(exchange_mem_case1)
;}
;}
嗨Caizee,
我在你提供的散点图中看到的是,你从原始散点文件中删除了一些区域,如本帖所示(https://support.dialog-semicondiondiondum/how-build-program-code-larger-32kb.)但是,您也没有建议的rw_iram52和rw_iram53,也没有提出,也不是通过上一篇文章所示的替换区域。我无法讲述Keil如何在您附加的分散文件中反应。如果通过使用此散点文件,FW用于运行,但在添加一些附加代码之后,生成的二进制文件太大,那么也许您初始化您放置在保留RAM中的某些变量,并导致.bin文件是那么大的。如果您可以提供项目的地图文件和.hex文件,则会有帮助。
谢谢mt_dialog.
嗨,对话框
感谢您的回复。
当您提到时,我声明了一个常量数组,初始化号码,但我将其放在保留RAM区域0中。这会导致问题吗?我还仔细阅读了UM-B-011文件,它说
“0x80000至0x82FFF应该被声明为包含不必初始化的数据(uninit)的区域。
嗨,对话框
还有一个问题,OTP是32KB。在启动之后,OTP将应用程序代码镜像到ram中。但是我想知道OTP会镜像什么样的数据?Code RO或者Code RO+DATA RO,或者其他什么?
非常感谢。
嗨caiziee,
是的,这可能会导致您所面临的问题和链接器产生一个大型.hex文件,关于参考,你已经在嗯- b - 011,是的,提到specifiic区域仍然UNINIT自指定的区域由SDK零初始化它的自我开始。
关于OTP和被镜像的内容,在syram中,整个镜像是从OTP镜像出来的,fw运行时,镜像部分和OTP没有交互。
谢谢mt_dialog.
谢谢,我做了一个简短的实验来验证这一点。是的,当我把所有的const值从保留ram,二进制变化很小。
那么当我用例23时,Code RO + DATA RO +RW RO的限制是什么?
非常感谢您的回复。
嗨caiziee,
使用case 23映射时的syram是38KB。
谢谢mt_dialog.
非常感谢,对话。你真的对我的问题做了很大的帮助。从你身边那么精彩的支持是非常好的。;-)