单片机的C,无论是哪家的芯片亦或编译器,跟PC上的C是不一样的。
PC上C是被OS所调用,以Windows平台为例,Windows会先初始化你程序所需要的环境,然后call你的main或者WinMain函数,你这个函数一return就又把控制权交还给了OS
在单片机上一般在main之前也会初始化一些变量堆栈之类,然后jmp到main(不用call还可以节约1个单位的堆栈)。但是main函数的retrun问题来了,main根本不是call的,何来return?实际上一些C编译器会在用户的程序最后追加一个踏步指令,相当于C的一个while(1);也有C编译器是不管的,飞掉了你就自认倒霉吧。 |