1,程序在一个阻塞函数没有出结果之前跳过了该函数直接运行下一个函数!
结果:函数内的临时枚举变量没有给定初始值,此变量有可能在函数一进去被初始化为枚举内一个正确的结果值,而实际上我们期望的是一个等待值。
2,IAR中程序在运行到某个函数时复位!
结果:IAR中定义的栈空间过小,导致程序分配不到栈空间,所以发生复位现象,另附堆栈总结:
转载:堆栈总结
3,IAR中编译器分配的RAM使用量过大,明显不符合已使用的空间大小
结果:分析map可知,IAR在编译阶段为函数内的初始化后的临时数组分配了空间,例如char buf[500]={0};,如果定义成char buf[500];,则不分配RAM空间,因此暂时用memset手动初始化,至于具体原理待后期分析。
分析结果:以上结论是错误的,IAR在编译阶段并没有给临时数组分配空间,只不过IAR认为内存中字节为0的是已使用的RAM,0XFF是未使用的RAM,因此在定义时将数组初始化为0后编译器认为这段空间被使用了,故给出的RAM用量不准确。
|