How to build program code larger than 32KB

17 posts / 0 new
Last post
toughworld
Offline
Last seen:3年3个月前
Joined:2015-05-12 09:55
How to build program code larger than 32KB

My program came to be larger than 32kb,Then can I build progam larger than 32KB.Of cource the code has to be store in external memory instead of the 32KB OTP.

Device:
MT_dialog
Offline
Last seen:2 months 3 days ago
Staff
Joined:2015-06-08 11:34
Hi toughworld,

Hi toughworld,

If your program exceeds the 32KB of the keil evaluation limit you can either aquire a full licence of keil or you can try to port you project to the GNU toolchain. There is a corresponding document in the application Notes section AN-B-024.pdf that has a short explanation about the porting procedure. The document isn't fully explanatory and the procedure isn't stable, the team is working on that in order to have a better description and a more standarized procedure.

Thanks MT_dialog

toughworld
Offline
Last seen:3年3个月前
Joined:2015-05-12 09:55
对不起,我没有达成我的

对不起,我没有让我的问题清除。我有一个完整的keil许可证。我编译时的错误是错误:l6406e:匹配prf_utils.o(.constdata)的执行区域中没有空间。..似乎与scartter文件有关。

MT_dialog
Offline
Last seen:2 months 3 days ago
Staff
Joined:2015-06-08 11:34
Hi toughworld,

Hi toughworld,

似乎从散射文件分配的空间是不够的,你必须重新排列散点文件才能容纳更大的应用程序,以便执行此操作,考虑到您使用的延长睡眠,您可以尝试以下提示以及您的代码驻留到OTP:

1. Increase the ER_IROM5 by changing the scatterfile and setting the ER_IROM5 to ER_IROM5 0x20000440 0x7bc0 to gain 0xff space.

2.通过删除RW_IRAM50并在ER_IROM5部分中添加可用空间来增加ER_IROM5中的代码空间。您也可以在不同的地址中移动RW_IRAM51。包含非保留堆的可能候选者是Zi_Ret20部分。通过执行此源代码和RW数据的0x20000440至0x20009000的连续存储区域将可用于源代码和RW数据。为了实现这一顺序下面的说明。

a. Remove the RW_IRAM50 and RW_IRAM51 sections

湾将ER_IROM5的大小更改为ER_IROM5 0x20000440(0x9000 - 0x440)

c. The non retention heap will be moved, say in ZI_RET20, by adding the following line jump_table.o(heap_mem_area_not_ret) in both ZI_RET20 definitions.

Please check the UM-B-011.pdf file for more info regarding the memory map and the scatter files.

Thanks MT_dialog

toughworld
Offline
Last seen:3年3个月前
Joined:2015-05-12 09:55
谢谢,我得到它。

谢谢,我得到它。

盲文
Offline
Last seen:2年4个月前
Joined:2016-07-29 10:01
嗨,对话

嗨,对话

然后,如果我在分散文件中所说的那样进行修改,那么代码RO和数据RW尺寸将大于32KB,小于35KB。我记得Smartsnippets有一个限制十六进制闪烁(32KB)。我怎么能在那种情况下闪存它?

Thanks a lot.

MT_dialog
Offline
Last seen:2 months 3 days ago
Staff
Joined:2015-06-08 11:34
Hi caiziee,

Hi caiziee,

I dont think that Smart Snippets will complain if you try to burn a binary 35KB, but you can always use hex2bin utilty in order to convert the .hex file into a .bin and then burn it to your flash.

Thanks MT_dialog

盲文
Offline
Last seen:2年4个月前
Joined:2016-07-29 10:01
嗨,对话

嗨,对话
When I use fromelf.exe from Keil, the bin file generated from hex turns to be quite big.
hex file size: 103KB.
bin file size: 515KB.

盲文
Offline
Last seen:2年4个月前
Joined:2016-07-29 10:01
嗨,对话

嗨,对话
I have tried this, but it failed.
因为在我们的应用程序中,存在许多分布配置文件中定义的部分。地址不连续。当我使用hex2bin.exe时,我得到了这个输出:
Lowest address = 00000000
Highest address = 00080857
Pad Byte = FF
8-bit Checksum = 9C
当我用智能片段闪过,I got an error "Size of data of selected file plus offset exceeds SPI FLASH memory size (131072 bytes)".

Could you please give me more hints about this? Thank you in advance.

MT_dialog
Offline
Last seen:2 months 3 days ago
Staff
Joined:2015-06-08 11:34
Hi caiziee,

Hi caiziee,

This is something related with your application, as mentioned in the other posthttps://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...is responsible that the linker outputs such a large binary. Please check your other post.

Thanks MT_dialog

盲文
Offline
Last seen:2年4个月前
Joined:2016-07-29 10:01
Thanks, Dialog.

Thanks, Dialog.

Ankit
Offline
Last seen:2 months 2 weeks ago
Joined:2017-05-24 07:42
Hi,

Hi,

I am using keil evaluation version. I am also facing same error.

1. Can I change ER_IROM5 and RW_IRAM50 section size? What will happen if I do so in keil evaluation version?
2.关于ER_IROM5和RW_IRAM50截面尺寸的参数?
3. Is there any documentation which explains about ER_IROM5 , RW_IRAM50 and other section mentioned in scatter file?

MT_dialog
Offline
Last seen:2 months 3 days ago
Staff
Joined:2015-06-08 11:34
Hi Ankit,

Hi Ankit,

1. By just changing the scatter file, the keil wont complain, but if you try to build a code that is larger than 32K then keil will notify you about the limitation.

2. What do you mean on what parameters ? due to the OTP image space limitation, the available amount of memory in the scatter file is decided to be 32K.

3. You will be able to find some info regarding the memory placement in the UM-B-011.pdf document.

Thanks MT_dialog

zwffcb
Offline
Last seen:6 months 1 day ago
Joined:2017-04-18 10:26
Hi !

Hi !
I modified the .sct file according to the steps you said.
Remove the RW_IRAM50 and RW_IRAM51 sections and move jump_table.o(heap_mem_area_not_ret) in ZI_RET20 .
但rw_iram50怎么样?忽略它 ?

#if (USE_MEMORY_MAP == EXT_SLEEP_SETUP)
.ANY (retention_mem_area0) ; application data
#endif
.ANY (+ZI)

thanks!

MT_dialog
Offline
Last seen:2 months 3 days ago
Staff
Joined:2015-06-08 11:34
Hi zwffcb,

Hi zwffcb,

Yes, you can totally remove the IRAM50 area, this area is reserved on the sysram since the map file is designed in order to operate under the 32KB limitation so any extra space should be allocated for additional uses, since you are trying to enlarge your code, you wont be using the OTP (for deep sleep etc), thus you can eliminate that area.

Thanks MT_dialog

zwffcb
Offline
Last seen:6 months 1 day ago
Joined:2017-04-18 10:26
嗨mt_dialog.

嗨mt_dialog.
谢谢您的回答。

1. Can I change these space address (LR_IROM1 to LR_IROM5) ,Because I still need little space to store my code.
谢谢。

MT_dialog
Offline
Last seen:2 months 3 days ago
Staff
Joined:2015-06-08 11:34
Hi zwffcb,

Hi zwffcb,

更改分散文件以获取一些额外的代码空间并不简单,内存区域中存在的位置(由分散文件定义)无法注释,以回答您的问题,以便在LR_IROM1上更改地址空间。ARM M0要求IVT在0x0开始,这就是LR_IROM1定义的内容,如果您更改此,您将兑现IVT,并且不会最终效果。

Thanks MT_dialog