前情提要:如果你是因为芯片进行了写保护,你可以不用看本篇文章,此篇文章不是就解决芯片写保护问题而写,但是如果芯片进行了写保护MDK确实会这种报错。
先说结论:FLASH的大小不足以存储程序。
stm32的内部存储器分为RAM、ROM(只读存储器,掉电不丢失),其中,FLASH属于ROM。
stm32的各类型号对其内部ROM区分的分明确
例如C8T6就是64K的flash,ZET6为512Kflash
FLASH(falsh memory)的存储文件与大小:
FLASH的主要作用进行存储烧写的程序,用户如果要操作FLASH存储数据,要将FLASH在内部进行了分块,程序占一块,自行添加的数据占一块,两者一定要进行区分,避免造成程序问题
在学习stm32的过程中,我们大部分人认为程序编译成了.hex二进制文件,FLASH存储的数据就是这些二进制文件,其实不然,FLASH内部存储的文件实则是.bin文件,bin文件属于.hex文件内部一类,FLASH的大小与.hex文件没有任何关系,.hex文件关乎于.bin文件,而需要看程序能否储存则是要看.bin文件与FLASH大小的关系。
那么如何来计算.bin文件?
我们来看MDK编译窗口
其中有四种参数罗列出来
CODE(代码大小)
RO_data(只读变量)
RW_data(已初始化读写变量)
ZI_data(未初始化读写变量)
而ROM(flash)中bin文件大小的计算方法为
bin大小=RO_DATA+RW_DATA+CODE
以本图为例,计算一下bin文件大小总和,再除以1024便可以读出文件所占用kb。
所占用内存为36kb多
本人最近在移植某款芯片的驱动代码,从ZET6到st公司的某一款低成本芯片,最终选定了C6T6,而C6T6的FLASH内存为32KB,出现了此错误,现在真相大白,以上bin文件的大小就是我移植文件的大小,原因是FLASH的内存不足。
当我把代码进行裁剪
编译成功!