我的程序大于32kb,那么我可以构建大于32kb的程序。当然,代码必须存储在外部内存中,而不是32KB的OTP。
嗨toughworld,
如果您的程序超过了keil计算限制的32KB,那么您可以获得一个完整的keil许可证,或者尝试将您的项目移植到GNU工具链。在应用程序Notes部分AN-B-024.pdf中有一个相应的文档,其中有关于移植过程的简短说明。该文档没有完全的解释性,流程也不稳定,团队正在为此努力,以便获得更好的描述和更标准化的流程。
由于MT_dialog
对不起,我没有让我的问题清除。我有一个完整的keil许可证。我编译时的错误是错误:l6406e:匹配prf_utils.o(.constdata)的执行区域中没有空间。..似乎与scartter文件有关。
似乎从散射文件分配的空间是不够的,你必须重新排列散点文件才能容纳更大的应用程序,以便执行此操作,考虑到您使用的延长睡眠,您可以尝试以下提示以及您的代码驻留到OTP:
1.通过更改scatterfile并将ER_IROM5设置为ER_IROM5 0x20000440 0x7bc0来增加ER_IROM5以获得0xff空间。
2.通过删除RW_IRAM50并在ER_IROM5部分中添加可用空间来增加ER_IROM5中的代码空间。您也可以在不同的地址中移动RW_IRAM51。包含非保留堆的可能候选者是Zi_Ret20部分。通过执行此源代码和RW数据的0x20000440至0x20009000的连续存储区域将可用于源代码和RW数据。为了实现这一顺序下面的说明。
a.删除RW_IRAM50和RW_IRAM51
湾将ER_IROM5的大小更改为ER_IROM5 0x20000440(0x9000 - 0x440)
c.通过在两个ZI_RET20定义中添加下面的jump_table.o(heap_mem_area_not_ret)行,非保留堆将被移动,比如在ZI_RET20中。
请查看UM-B-011.pdf文件,以获得关于内存映射和散点文件的更多信息。
谢谢,我得到它。
嗨,对话
然后,如果我在分散文件中所说的那样进行修改,那么代码RO和数据RW尺寸将大于32KB,小于35KB。我记得Smartsnippets有一个限制十六进制闪烁(32KB)。我怎么能在那种情况下闪存它?
非常感谢。
嗨caiziee,
我不认为Smart Snippets会抱怨如果你试图烧一个二进制35KB,但你总是可以使用hex2bin实用程序,以将。hex文件转换成。bin,然后烧到你的flash。
嗨,对话当我从Keil使用frommelf .exe时,十六进制生成的bin文件变得相当大。十六进制文件大小:103KB。bin文件大小:515KB。
嗨,对话我试过了,但失败了。因为在我们的应用程序中,存在许多分布配置文件中定义的部分。地址不连续。当我使用hex2bin.exe时,我得到了这个输出:最低地址= 00000000最高地址= 00080857Pad Byte = FF8位校验和= 9C当我闪烁它与智能片段,我得到一个错误“所选文件的数据大小加上偏移量超过SPI FLASH内存大小(131072字节)”。
关于这个你能给我更多的提示吗?先谢谢你。
这与你的应用程序有关,正如在另一篇文章中提到的https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...负责链接器输出如此大的二进制文件。请查看你的其他帖子。
谢谢,对话框。
你好,
我使用的是keil评估版本。我也面临着同样的错误。
1.我可以改变ER_IROM5和RW_IRAM50段大小吗?如果我在keil评价版本中这么做会发生什么?2.关于ER_IROM5和RW_IRAM50截面尺寸的参数?3.是否有任何文档,其中解释了ER_IROM5, RW_IRAM50和其他部分中提到的分散文件?
嗨Ankit,
1.通过改变分散文件,keil不会抱怨,但是如果你试图构建一个大于32K的代码,那么keil会通知你这个限制。
2.什么条件是什么意思?由于OTP映像空间的限制,分散文件中可用的内存数量被决定为32K。
3.您可以在UM-B-011.pdf文档中找到一些关于内存位置的信息。
这就跟你问声好!我按照你说的步骤修改了.sct文件。删除RW_IRAM50和RW_IRAM51部分,并移动ZI_RET20中的jump_table.o(heap_mem_area_not_ret)。但rw_iram50怎么样?忽略它 ?
#if (USE_MEMORY_MAP == EXT_SLEEP_SETUP).ANY (retention_mem_area0);应用程序数据# endif.ANY(+子)
谢谢!
嗨zwffcb,
是的,你可以完全移除IRAM50区域,这个区域是保留sysram自映射文件的目的是为了操作下32 kb的限制所以任何额外的空间应该分配给额外的使用,因为你正试图扩大你的代码,你不会使用OTP(深度睡眠等),因此您可以消除。
嗨mt_dialog.谢谢您的回答。
1.我可以将这些空间地址(LR_IROM1)更改为LR_IROM5吗?因为我仍然需要很少的空间来存储代码。谢谢。
更改分散文件以获取一些额外的代码空间并不简单,内存区域中存在的位置(由分散文件定义)无法注释,以回答您的问题,以便在LR_IROM1上更改地址空间。ARM M0要求IVT在0x0开始,这就是LR_IROM1定义的内容,如果您更改此,您将兑现IVT,并且不会最终效果。
嗨toughworld,
如果您的程序超过了keil计算限制的32KB,那么您可以获得一个完整的keil许可证,或者尝试将您的项目移植到GNU工具链。在应用程序Notes部分AN-B-024.pdf中有一个相应的文档,其中有关于移植过程的简短说明。该文档没有完全的解释性,流程也不稳定,团队正在为此努力,以便获得更好的描述和更标准化的流程。
由于MT_dialog
对不起,我没有让我的问题清除。我有一个完整的keil许可证。我编译时的错误是错误:l6406e:匹配prf_utils.o(.constdata)的执行区域中没有空间。..似乎与scartter文件有关。
嗨toughworld,
似乎从散射文件分配的空间是不够的,你必须重新排列散点文件才能容纳更大的应用程序,以便执行此操作,考虑到您使用的延长睡眠,您可以尝试以下提示以及您的代码驻留到OTP:
1.通过更改scatterfile并将ER_IROM5设置为ER_IROM5 0x20000440 0x7bc0来增加ER_IROM5以获得0xff空间。
2.通过删除RW_IRAM50并在ER_IROM5部分中添加可用空间来增加ER_IROM5中的代码空间。您也可以在不同的地址中移动RW_IRAM51。包含非保留堆的可能候选者是Zi_Ret20部分。通过执行此源代码和RW数据的0x20000440至0x20009000的连续存储区域将可用于源代码和RW数据。为了实现这一顺序下面的说明。
a.删除RW_IRAM50和RW_IRAM51
湾将ER_IROM5的大小更改为ER_IROM5 0x20000440(0x9000 - 0x440)
c.通过在两个ZI_RET20定义中添加下面的jump_table.o(heap_mem_area_not_ret)行,非保留堆将被移动,比如在ZI_RET20中。
请查看UM-B-011.pdf文件,以获得关于内存映射和散点文件的更多信息。
由于MT_dialog
谢谢,我得到它。
嗨,对话
然后,如果我在分散文件中所说的那样进行修改,那么代码RO和数据RW尺寸将大于32KB,小于35KB。我记得Smartsnippets有一个限制十六进制闪烁(32KB)。我怎么能在那种情况下闪存它?
非常感谢。
嗨caiziee,
我不认为Smart Snippets会抱怨如果你试图烧一个二进制35KB,但你总是可以使用hex2bin实用程序,以将。hex文件转换成。bin,然后烧到你的flash。
由于MT_dialog
嗨,对话
当我从Keil使用frommelf .exe时,十六进制生成的bin文件变得相当大。
十六进制文件大小:103KB。
bin文件大小:515KB。
嗨,对话
我试过了,但失败了。
因为在我们的应用程序中,存在许多分布配置文件中定义的部分。地址不连续。当我使用hex2bin.exe时,我得到了这个输出:
最低地址= 00000000
最高地址= 00080857
Pad Byte = FF
8位校验和= 9C
当我闪烁它与智能片段,我得到一个错误“所选文件的数据大小加上偏移量超过SPI FLASH内存大小(131072字节)”。
关于这个你能给我更多的提示吗?先谢谢你。
嗨caiziee,
这与你的应用程序有关,正如在另一篇文章中提到的https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...负责链接器输出如此大的二进制文件。请查看你的其他帖子。
由于MT_dialog
谢谢,对话框。
你好,
我使用的是keil评估版本。我也面临着同样的错误。
1.我可以改变ER_IROM5和RW_IRAM50段大小吗?如果我在keil评价版本中这么做会发生什么?
2.关于ER_IROM5和RW_IRAM50截面尺寸的参数?
3.是否有任何文档,其中解释了ER_IROM5, RW_IRAM50和其他部分中提到的分散文件?
嗨Ankit,
1.通过改变分散文件,keil不会抱怨,但是如果你试图构建一个大于32K的代码,那么keil会通知你这个限制。
2.什么条件是什么意思?由于OTP映像空间的限制,分散文件中可用的内存数量被决定为32K。
3.您可以在UM-B-011.pdf文档中找到一些关于内存位置的信息。
由于MT_dialog
这就跟你问声好!
我按照你说的步骤修改了.sct文件。
删除RW_IRAM50和RW_IRAM51部分,并移动ZI_RET20中的jump_table.o(heap_mem_area_not_ret)。
但rw_iram50怎么样?忽略它 ?
#if (USE_MEMORY_MAP == EXT_SLEEP_SETUP)
.ANY (retention_mem_area0);应用程序数据
# endif
.ANY(+子)
谢谢!
嗨zwffcb,
是的,你可以完全移除IRAM50区域,这个区域是保留sysram自映射文件的目的是为了操作下32 kb的限制所以任何额外的空间应该分配给额外的使用,因为你正试图扩大你的代码,你不会使用OTP(深度睡眠等),因此您可以消除。
由于MT_dialog
嗨mt_dialog.
谢谢您的回答。
1.我可以将这些空间地址(LR_IROM1)更改为LR_IROM5吗?因为我仍然需要很少的空间来存储代码。
谢谢。
嗨zwffcb,
更改分散文件以获取一些额外的代码空间并不简单,内存区域中存在的位置(由分散文件定义)无法注释,以回答您的问题,以便在LR_IROM1上更改地址空间。ARM M0要求IVT在0x0开始,这就是LR_IROM1定义的内容,如果您更改此,您将兑现IVT,并且不会最终效果。
由于MT_dialog