jianhong_wu 发表于 2015-6-4 14:54:58

STC15W104的RAM是128,实际用到108就不可以了,为什么,有什么方法解决?已解答。

海-深圳:
大家早上好,有个问题请教一下:
我用的是STC15W104 这款单片机
存储空间4K,SRAM128byte,
当keil生成data超过108时,下载到单片机工作不正常,减小变量使data小于108下载到单片机正常,请问有没有一些方法满足变量比较多的情况?

坚鸿-深圳:
这种怪异情况跟编译器有关,我感觉keil本身是不完美的,128字节的ram能用到105也可以接受了。

海-深圳:
是的,128byte RAM用到105是可以了,但是还有部分程序没完成,要增加变量才行。在网上找了资料说是将不常用变量定义为xdata、标志性变量定义为bit,memory Model设置为large模式等等,尝试修改,结果还是不理想。


丁远:
我一般用51时候,全局变量都是pdata。

海-深圳:
现在暂时还没有用pdata,而是用的是bit位定义的标志位。如下:
1、data为105,下载到MCU后正常。


2、只改一个bit位,如红色标记,data=104.1,下载进去不正常,可对比上图:


3、为了验证,先删除程序中的其他两个unsigned char变量,降低data,并继续用bit位,下载进去正常,如下图:


4、继续将标志位 用bit替换原来的unsigned char,降低data,测试正常。


结论:以下结论不一定完全正确,可以大家一起讨论。
1、这款单片机SRAM为128,实际data用到108以上就不能增加了,可能多余的空间用到堆栈什么的上了吧。
2、通过上述测试,发现最好要留有足够的data空间才保险,比如用到data为104.1也不行。
3、重点是如何降低data使用率,针对51,一些标志位,用bit替换unsigned char对节约data空间是有效的,code大小也在减小。


页: [1]
查看完整版本: STC15W104的RAM是128,实际用到108就不可以了,为什么,有什么方法解决?已解答。