STM32报错:L6971E: system_stm32h7xx.o(.data) type RW incompatible with malloc.o(.ARM.__AT_地址) type ZI

   日期:2020-06-03     浏览:862    评论:0    
核心提示:MDK报错:Error:L6971E:system_stm32h7xx.o(.data)typeRWincompatiblewithmalloc.o(.ARM.__AT_地址)typeZIinerRW_IRAM1.机器翻译后,大概意思是:“Error:L6971E:system_stm32h7xx.o(.data)typeRWincompatiblewithmalloc.o(.ARM.__AT_地址)typeZIinerRW_IRAM1.”原因:使用了内存

MDK报错:Error: L6971E: system_stm32h7xx.o(.data) type RW incompatible with malloc.o(.ARM.__AT_地址) type ZI in er RW_IRAM1.

机器翻译后,大概意思是:“错误:L6971E:system_stm32h7xx.o(.data)类型RW与er RW_IRAM1中的malloc.o(.ARM._AT址)类型ZI不兼容。.”

原因:使用了内存管理(估计大家也是学习的正点原子的学习资料),导致可由系统自由分配的内存减少,当你又在程序中定义了许多变量或数组,编译系统无内存给他们分配,与内存管理中设置的内存池冲突。

解决方法

方法1、在内存管理中减小内存池的大小。(这样系统可自由分配的内存就增多)
以原子程序为例:
这个是内存池的定义(如下):

//内存池(64字节对齐)
__align(64) u8 mem1base[MEM1_MAX_SIZE];													//内部SRAM内存池
__align(64) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0xC01F4000)));		//外部SDRAM内存池,前面2M给LTDC用了(1280*800*2)
__align(64) u8 mem3base[MEM3_MAX_SIZE] __attribute__((at(0x30000000)));			//内部SRAM1+SRAM2内存池
__align(64) u8 mem4base[MEM4_MAX_SIZE] __attribute__((at(0x38000000)));			//内部SRAM4内存池
__align(64) u8 mem5base[MEM5_MAX_SIZE] __attribute__((at(0x20000000)));			//内部DTCM内存池
__align(64) u8 mem6base[MEM6_MAX_SIZE] __attribute__((at(0x00000000)));			//内部ITCM内存池 

在头文件中定义了内存池大小(如下):

//mem1内存参数设定.mem1是H7内部的AXI内存.
#define MEM1_BLOCK_SIZE 64 //内存块大小为64字节
#define MEM1_MAX_SIZE 300*1024 //最大管理内存 448K,H7的AXI内存总共512KB
#define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE/MEM1_BLOCK_SIZE //内存表大小

我这里已经改成了300K大小。大家可以再头文件里更改MEM1_MAX_SIZE,来控制定义在H7内部的AXI内存的内存池mem1的大小。

方法2、把你程序中定义的大数组用内存管理的方式分配空间,即用malloc函数(内存管理中定义)为你的大数组在内存池中分配空间。(不利用留给系统自由分配的空间)
就是利用内存管理实验malloc.c里定义的这个内存分配函数了(如下):

//分配内存(外部调用)
//memx:所属内存块
//size:内存大小(字节)
//返回值:分配到的内存首地址.
void *mymalloc(u8 memx,u32 size)  
{  
    u32 offset;   
	offset=my_mem_malloc(memx,size);  	   	 	   
    if(offset==0xFFFFFFFF)return NULL;  
    else return (void*)((u32)mallco_dev.membase[memx]+offset);  
} 

可以自己选择方法1或方法2解决问题。

注:我用的是正点原子的内存管理的方法遇到了这个问题。以上为个人遇到这个报错后的解决办法和个人理解,仅供参考。若有错误,欢迎指出。谢谢

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服