用gcc编译带函数memcpy(dest,src,size)的程序仿真时,如果size小于等于64,程序执行没有问题,如果size大于64会出现程序跑飞的情形。通过看波形确认,跑飞的原因在于执行完2条memcpy子函数的指令后,就会突然跳转到一个没初始化过的指令地址取指令,从而导致系统全部乱掉。查看过跑飞时系统的所有外部状态,没有任何中断。处理器型号为cm3。
备注:通过查阅资料,如果memcpy的size小于等于64,处理器会用一种更高效的方式来实现memcpy的功能,并不会执行memcpy函数本身内容。
用arm程序编译同样的程序执行,没有任何问题。 |