单片机实际可用的程序存储空间的问题
在用c8051f350单片机做温度采集和发送的项目,在项目的进展中,为不使得程序所占空间超过单片机的容量(8K),逐步的添加功能,但当程序写到6.6K时,程序便开始出现问题,程序执行一次后便无法再次执行. 说明FLASH擦除出现了问题,难道此单片机的真正可用容量只有这么大吗?减小几百个字节后,程序可以运行,但AD采集温度前两个通道出现错误;
再减小几个字节,程序运作正常,温度采集也正常。
why?标称8KFLASH的单片机可用空间仅仅是6.6K么?目前程序所占空间为:
Program Size: data=79.4 xdata=712 code=6613;
这时候正常,再增加程序会出现意想不到的错误·······
***************************************************************
这是一位网友的帖子,ms没有一个满意的答案, 前几天俺也遇到类似的问题请问 大家有没有遇到这样的坑是怎么爬出来的. 没用过c8051。。。我把65536字节的stm32写到过65520还是多少,也没问题啊。不过之后就换128k的了。 可能编译器出bug了。我之前是AVR代码超过8KB之后开始出现各种异常情况,折腾一段时间无果切换riscv了。。 应该不会,看一下MAP文件 c8051应该最后512bytes不让用,Flash用满也没出现问题 相当古老的片子了,不知现在价格如何? 我用过C8051F410和411,是量产的产品(每月差不多能k的量吧),写得满满的,没问题啊
后来是因为要增加代码,优化、压缩后还是几乎用完Flash,所以才改了STM32
wincom 发表于 2019-11-6 22:58
我用过C8051F410和411,是量产的产品(每月差不多能k的量吧),写得满满的,没问题啊
后来是因为要增加代码 ...
哈哈,8位机代码量还真不一定比32位机少多少。反而32位机的压缩指令集吊打8位机。 看楼主的意思,程序中有对flash的擦除操作?
是把flash当作EEPROM使用么?
万一地址与代码段有重叠自然是会把有代码的地方给擦掉的。 如果有对片内Flash的读写的操作,是不是这些函数的区域超过规定的地址。有些芯片对于操作flash的函数的地址有要求,要在某一个地址范围之内! lcw_swust 发表于 2019-11-7 08:38
看楼主的意思,程序中有对flash的擦除操作?
是把flash当作EEPROM使用么?
万一地址与代码段有重叠自然是会 ...
我也是这么认为的 yangbo18416 发表于 2019-11-7 09:04
如果有对片内Flash的读写的操作,是不是这些函数的区域超过规定的地址。有些芯片对于操作flash的函数的地址 ...
这个有可能,所以我们公司要求程序运行前要做MD5检验。 关注这个问题,等待答案
页:
[1]