如何构建大于32KB的程序代码

17个帖子/ 0新
最后一篇
强奸
离线
最后一次露面:3年4小时前
加入:2015-05-12 09:55
如何构建大于32KB的程序代码

我的节目比32KB大于32KB,那么我可以建立大于32KB的progam .Fecce必须在外部存储器中存储代码而不是32KB OTP。

设备:
mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨Tengworld,

嗨Tengworld,

如果您的程序超过了Keil评估限制的32KB,则可以使用keil的完整许可证,或者您可以尝试将您投影到GNU Toolchain。应用程序注意事项AN-B-024.PDF中有一个相应的文档,对移植过程有简短的解释。该文件并不完全解释,程序不稳定,该团队正在努力,以便有更好的描述和更单位的程序。

谢谢mt_dialog.

强奸
离线
最后一次露面:3年4小时前
加入:2015-05-12 09:55
sorry,I didn't make my

sorry,I didn't make my question clear.I have a full licence of keil.The error when i compile is Error: L6406E: No space in execution regions with .ANY selector matching prf_utils.o(.constdata)......which seems to be relevant to scartter file.

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨Tengworld,

嗨Tengworld,

Seems that the space allocated from the scatterfile is not enough, you will have to rearrange the scatterfile in order to accomodate a larger application in order to do this, you can try the following tips considering that you are using extended sleep and your code wont reside to the OTP:

1.通过更改散射文件并将ER_IROM5设置为ER_IROM5 0x20000440 0x7BC0来增加ER_IROM5以获得0xFF空间。

2.增加的代码空间ER_IROM5雷莫ving the RW_IRAM50 and add the available space in the ER_IROM5 section. Also you can move the RW_IRAM51 in a different address. A possible candidate to include the non-retained heap is the ZI_RET20 section. By doing this a continuous memory area from 0x20000440 to 0x20009000 of almost 35kB will be available for source code and RW data. In order to implement this follow the below instructions.

一种。删除RW_IRAM50和RW_IRAM51部分

b. Change the size of the ER_IROM5 to ER_IROM5 0X20000440(0x9000 - 0x440)

C。通过在zi_ret20定义中添加以下行Jump_table.o(heap_mem_area_not_ret),将在zi_ret20中移动,在zi_ret20中移动非保留堆。

请查看UM-B-011.PDF文件,以获取有关内存映射和分散文件的更多信息。

谢谢mt_dialog.

强奸
离线
最后一次露面:3年4小时前
加入:2015-05-12 09:55
thanks,I get it.

thanks,I get it.

caiziee
离线
最后一次露面:2年1个月前
加入:2016-07-29 10:01
你好,Dialog

你好,Dialog

Then if I do the modification as you said in scatter file, then the CODE RO and DATA RW size will be bigger than 32KB, smaller than 35KB. I remembered that the smartsnippets has a limitation for hex flashing (32KB). How can I flash it in that case?

非常感谢。

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨caiziee,

嗨caiziee,

我不认为如果您尝试刻录二进制35KB,则智能代码段将抱怨,但您可以始终使用Hex2bin Utilty才能将.hex文件转换为.bin,然后将其刻录到闪光灯。

谢谢mt_dialog.

caiziee
离线
最后一次露面:2年1个月前
加入:2016-07-29 10:01
你好,Dialog

你好,Dialog
当我从keil使用flofelf.exe时,从hex生成的bin文件转变为相当大。
十六进制文件大小:103KB。
Bin文件大小:515kb。

caiziee
离线
最后一次露面:2年1个月前
加入:2016-07-29 10:01
你好,Dialog

你好,Dialog
我已经尝试过这个,但它失败了。
Because in our application, there are many parts which are defined in scatter config file. The address are not continuous. When I use the hex2bin.exe, I got this output:
最低地址= 00000000
最高地址= 00080857
PAD BYTE = FF
8位校验和= 9C
当我用智能片段闪烁时,我收到了一个错误,所以所选文件加偏移量的数据大小超过SPI闪存大小(131072字节)“。

你能给我更多关于这个的提示吗?先感谢您。

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨caiziee,

嗨caiziee,

如上所述,这与您的申请有关https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl...负责链接器输出如此大的二进制。请检查您的其他帖子。

谢谢mt_dialog.

caiziee
离线
最后一次露面:2年1个月前
加入:2016-07-29 10:01
谢谢,对话。

谢谢,对话。

ankit.
离线
最后一次露面:10个月3周前
加入:2017-05-24 07:42
你好,

你好,

我正在使用Keil评估版。我也面临着同样的错误。

1.我可以更改ER_IROM5和RW_IRAM50段大小吗?如果我在keil评估版本中这样做会发生什么?
2.On what parameters ER_IROM5 and RW_IRAM50 section size are decided?
3.是否有任何关于SISTS文件中提到的ER_IROM5,RW_IRAM50和其他部分的文档?

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨ankit,

嗨ankit,

1.只需更改分散文件,Keil不会抱怨,但如果您尝试构建大于32k的代码,那么Keil会将您通知您的限制。

2.你是什么意思在什么参数?由于OTP图像空间限制,分散文件中的可用存储量决定为32K。

3.您将能够在UM-B-011.PDF文档中找到一些关于内存放置的信息。

谢谢mt_dialog.

zwffcb.
离线
最后一次露面:2个月1周前
加入:2017-04-18 10:26
你好 !

你好 !
我根据你说的步骤修改了.sct文件。
删除rw_iram50和rw_iram51部分,然后在zi_ret20中移动jump_table.o(heap_mem_area_not_ret)。
But what about RW_IRAM50? ignore it ?

#if(use_memory_map == ext_sleep_setup)
.any(Retention_mem_area0);应用程序数据
#万一
.any(+ zi)

谢谢!

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
zwffcb,

zwffcb,

是的,您可以完全删除IRAM50区域,此区域保留在Sysram上,因为地图文件是在32KB限制下运行的,因此应为其他用途分配任何额外的空间,因为您正在尝试放大您的代码,您不会使用OTP(用于深睡眠等),因此您可以消除该区域。

谢谢mt_dialog.

zwffcb.
离线
最后一次露面:2个月1周前
加入:2017-04-18 10:26
Hi MT_dialog

Hi MT_dialog
Thank you for your answer.

1.我可以将这些空间地址(LR_IROM1到LR_IROM5)更改,因为我仍然需要几乎没有空间来存储我的代码。
thanks.

mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
zwffcb,

zwffcb,

Changing the scatter file for getting some extra code space isn't that simple, there are places in the memory region (defined by the scatter file) that cannot be ommited, to answer your question for changing the address space on the LR_IROM1. The ARM M0 requires that the IVT starts at 0x0 and this is what the LR_IROM1 defines, if you change that, you will mess with the IVT and that won't end up nice.

谢谢mt_dialog.