程序文件超过64 部分功能不好用了
我用的是stc32g12k128程序超过了64k了Program Size: data=9.5 edata+hdata=2128 xdata=5782 const=5343 code=85546
我现在设置如下:程序可以编译,可以下载,但是有部分功能不好用了,比如oled屏幕的主页不显示了,eeprom里的数据也变了。除了这些设置还需要做其他的操作吗?
STCAI-32位8051 发表于 2023-3-21 14:59
版主,我设置和你发的图是样的,依旧不好使的,是部分功能不行,是不是中断地址啥的都不一样了
你需要根据你实际的代码来合理分配EEPROM空间和程序空间
按照你上面的设置,代码区一定会覆盖EEPROM区
因为EEPROM的起始地址是从逻辑地址FE:0000H开始的
而按照你上面的设置,Keil也会将没有指定绝对地址的代码从FE:0000H开始放
上面的信息显示你实际的代码空间需求大约为90K,你可以按照下面的设置试试看
上面的设置分配如下:
FE:0000~FE:7FFF的32K字节FLASH为EEPROM空间
FE:8000~FF:FFFF的96K字节FLASH为代码空间
zhp 发表于 2023-3-21 18:39
你需要根据你实际的代码来合理分配EEPROM空间和程序空间
按照你上面的设置,代码区一定会覆盖EEPROM区
因为 ...
收到,谢谢,我实验一下。 高度关注!最近我也在做项目,代码大小也是会超过64K的,到时候也注意一下这点。 zhp 发表于 2023-3-21 18:39
你需要根据你实际的代码来合理分配EEPROM空间和程序空间
按照你上面的设置,代码区一定会覆盖EEPROM区
因为 ...
大哥,人家90K,那人家把按照手册 128K全部将FLASH设置为了代码空间,这也没啥问题啊, 就算是STC-ISP (EEPROM最小1K),STC-ISP 也会自动将 代码空间往后偏移挪动1K地址,这没问啥!而且你留出这么大的32K EEPROM做什么?没必要! 人家原先设置的没毛病,问题不是出在这里! a) 单个文件的代码大小必须小余64K。若大于或等于64K,则需要将代码分割为多个代码文件
b) 单个代码数据表格的数据量必须小余64K。若大于或等于64K,则需要将数据表格分割为多个数据表格
c) 使用code关键字定义的数据表格,Keil会强制分配到FF:0000H~FF:FFFFH区域(例如:char code CODE_STR[] ="64K地址范围内数\xfd据表格定义演示";)若需要定义超64K地址范围的数据表格,则需要使用ecode关键字,(例如:char ecode ECODE_STR[] = "超64K地址范围内数\xfd据表格定义演示";)
我的问题1:
我想问一下, 这里如何判定一个单文件的代码 是否大于 64K ? 是肉眼观察比如 char ecode HUGE_STR1 ,char ecode HUGE_STR2 还是 看哪个文件的后缀(是编译后Objects内的 .obj文件吗?.obj文件 是否大于 64K)?
我的问题2:
STC32G12K128 作为主控, 搭配FreeRTOS, 当KEIL编译出的代码总量code小于64K时, 将 configUSE_ROMHUGE = 0时, 且KEIL内的 Code Rom Size 设置为 Large, 程序烧录后, 能正常运行显示效果
但是后期添加了OLED相关程序(oled.c很大,且搭配了 oledfont.c 大量的字符编码和图画数组. 且我将code 数组 全部改写了 ecode数组 ), 将 configUSE_ROMHUGE = 1时, 且KEIL内的 Code Rom Size 设置为 Huge, ROM 设置了程序空间从地址 0xFE0400 开始,大小为127K(0x1FC00),STC-ISP EEPROM也配合进行了上述地址/大小设置, 但是程序烧录后, 却不能正常运行显示效果, 到底是出了什么问题? 有没有哪个大佬指出到底哪个地方出问题了? 章鱼小丸子 发表于 2026-6-8 15:33
a) 单个文件的代码大小必须小余64K。若大于或等于64K,则需要将代码分割为多个代码文件
b) 单个代码数 ...
为啥在这挖一个23年的帖子
新建个帖子可让更多人看到,把你正常的,异常的,工程代码打包都上传下
OS参考的哪个链接也都附下
ercircle 发表于 2026-6-8 22:25
为啥在这挖一个23年的帖子
帖子不怕早,能解决相同的技术问题就好,我的问题链接如下
https://www.stcaimcu.com/thread-24139-1-1.html
页:
[1]