关于Keil MDK 中使用了指定变量地址属性后,编译统计出错的解决办法

在MDK中,只要你程序里面有类似这样的代码:
__align(4) u8 mem2base[MEM2_MAX_SIZE] (0X02000200))); //外部SRAM内存池)));

MDK在最后统计RAM使用空间时,就会出现偏差,如果你将RAM中的最后一页保留作为以上代码的专用地址,那么,你就要将最后一页的内存空间从MDK的编译环境中脱离出来。

关于Keil MDK 中使用了指定变量地址属性后,编译统计出错的解决办法_第1张图片

原来的RAM大小为0x20000,更改为0x1FC00,这样就将最后一页RAM从MDK的统计中脱离出来,不会将其与统计为和前面的未使用空间连在一起,而产生过多统计。

也就是说,MDK在安排RAM时是连续的,所有在统计RAM大小时,简单地将最后使用的RAM地址减去RAM的开始地址--即0x20000000,就认为是使用的RAM大小,但是使用了__attribute__((at 这样的代码后,就会跳过连续安排的RAM,这样用最后安排的RAM地址减去开始地址,中间未使用的空间也会被错误的统计在内,更改了上述图片中的大小后,MDK统计使用的RAM大小时就将其剔除,真正使用的大小还要加上__attribute__((at代码使用的大小,就是使用的RAM大小了。

那么知道了RAM大小统计错误修正方式后,ROM空间大小的修正就按图索骥,一样的方式修正就可以了。

你可能感兴趣的:(关于Keil MDK 中使用了指定变量地址属性后,编译统计出错的解决办法)