address space overflow:ecode的问题
我的code使用才显示80多K啊怎么就溢出了?不会是函数占的code超过64K了? code超过64K,keil中需要设置,参见技术手册:2.14.7设置项目4(超64K代码的相关设置) “Options for Target ' Target 1'”窗口中选择“Output”选项页,勾选其中的“Create HEX File”选项。若程序空间超过64K,则“HEX format”必须选择“HEX-386”模式。 推荐使用“XSmall”模式,默认将变量定义在内部RAM(edata),单时钟存取,访问速度快,STC32G12K128系列芯片有4K的edata可以使用;
不推荐使用“Large”模式,默认将变量定义在内部扩展RAM(xdata),存取需要2~3个时钟,访问速度慢。 https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=6319&pid=53627
整个程序区如超过 64K 必须使用 Huge,
并且必须使用多文件,
并且每个文件不能超过 64K
看超版的: STC32G12K128系列超64K程序演示
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1678
(出处: 国芯技术交流网站)
深圳国芯人工智能有限公司-产品_STC32系列https://www.stcai.com/cp_stc32xl
OKOK感谢大佬指点 按那个设置就不报错了 哦对还有个问题,那就不单独发帖问了。
就是访问外扩的32K RAM能不用指针直接用数组的形式定义吗?
我外扩了32K RAM,按照例程的define
((unsigned char volatile far*)0x7f0000)弄没有问题可以读写。但有没有法直接把数组放在EXRAM里像正常的那样访问呢?不然太不方便了 关于这个XSMALL,我勾选XSMALL之后就该报错了因为编译器显示把我的5K多东西全放进EDATA+HDATA了,我该怎么把一些数组定义在XDATA里?xdata关键字修饰为什么还不管用?编译器硬是放着XDATA不用去把EDATA塞爆,也不理会我的xdata修饰?!
这是两次的编译结果,加或不加xdata修饰为什么结果都一样?(两个都是在XSAMLL模式下的编译结果)
页:
[1]
2