使用正点原子的stm32mini板,按照原子的教程先移植好ucosIII,使用正常,移植好Fatfs,只跑fatfs,也正常,但两者一起使用编译,就出问题了。
MDK编辑器件报错,内存不足。为了查看是什么文件占用了这么大内存,我更换了大内存device,编译成功后查看 .map文件
Total RO Size (Code + RO Data) 42160 ( 41.17kB)
Total RW Size (RW Data + ZI Data) 52256 ( 51.03kB)
Total ROM Size (Code + RO Data + RW Data) 42492 ( 41.50kB)
原子的mini板用的是stm32f103rct6,sram为48k,而此处的RW Size为51.03K,超了。继续查看.map文件,发现
300 30 0 20 38080 4873 malloc.o
144 16 0 0 0 1869 misc.o
主要是malloc.c中的
//ÄÚ´æ²ÎÊýÉ趨.
#define MEM_BLOCK_SIZE 32
#define MEM_MAX_SIZE 35*1024
#define MEM_ALLOC_TABLE_SIZE MEM_MAX_SIZE/MEM_BLOCK_SIZE
太占用内存了。
因而我将malloc的内存池改小点,便可以编译成功了。
通过对比原子的综合例程,发现,原子的综合例程也占用了sram 44.80k,我的工程与其的主要SRAM占用区别在于系统,原子用的为UCOSII,我的工程为UCOSIII,UCOSII系统文件所用SRAM较小,而UCOSIII的几个文件的SRAM占用较大,因而导致了超出48K。