最近调试HC32F460出现各种奇怪问题,程序不断的从不同位置崩溃,比如增加了堆栈大小(注意,是增加,而且是增加的足够大),修改了一些无关代码,增加了一个啥都不做的线程,等等都会导致程序各种异常,而且调试也找不出原因,表现为与内存溢出一样,内存无然无故变了,但是可以肯定是内存没有溢出,还有的内存竟然无法修改,修改后自己复原了,心里一万个曹尼玛,还有这样的单片机。
但是通过两天的调试,最后怀疑可能是内存问题,之前发现HC32无法使用1,2,1这种方式对齐访问,而其他单片机则不影响,带着怀疑测试,将SRAMH与SRAM3屏蔽掉(不让编译器使用)
LR_IROM1 0x0010000 (416*1024) { ; load region size_region
ER_IROM1 0x0010000 (416*1024) { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM3 0x20020000 (28*1024) { ; RW data SRAM3 28KB 支持ECC
; .ANY (+RW +ZI)
.ANY (IRAM3)
}
RW_IRAM2 0x20010000 (64*1024) { ; RW data SRAM2 64KB
.ANY (+RW +ZI)
.ANY (IRAM2)
}
RW_IRAM1 0x20000000 (64*1024) { ; RW data SRAM1 64KB
.ANY (+RW +ZI)
.ANY (IRAM1)
}
;SRAMH内存,高速内存;
RW_IRAMH 0x1FFF8000 (32*1024) {
; .ANY (+RW +ZI)
.ANY (SRAMH)
}
;Ret_SRAM 掉电保持SRAM 4KB
RW_IRAM4 0x200F0000 (4*1024) {
.ANY (Ret_SRAM)
}
}
注意,上面的SRAMH与IRAM3都没有被使用,这个时候程序奇迹般正常了,测试了很久都正常(之前也是没有开启SRAMH与IRAM3),最近才开启的,出现各种奇怪问题,带着疑问找资料(其实通过2天测试,发现UCOS如果分配的内存空间在IRAM3或者SRAMH则出问题几率很大)。
|