之前调试硬件I2C的时候发现会随机的挂在某个地方(while),就怀疑是STM32的自身故障,毕竟网上铺天盖地的都是讨论被I2C折磨的前辈们,今天改用模拟的试了试,发现问题还是之前那样,数据量少的时候没事,多了就会跑飞。。。(确定不是Flash内存的问题)。将几个数组取消初始化赋值会好些,但是最终还是会死到硬件故障。
索性又新建个工程,将相关的代码复制过来,这次更神奇了,直接main()就结束了,单击单步运行就死到硬件故障了,所以怀疑是main()之前的问题导致我的程序跑飞了,那么main之前都干了些什么呢?
main函数执行之前,主要就是初始化系统相关资源:
1.设置栈指针
2.初始化static静态和global全局变量,即data段的内容
3.将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容
4.运行全局构造器,估计是C++中构造函数之类的吧
5.将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数
那么我的代码在main之前都干了些什么不该干的呢?原由待我慢慢寻来。。。
这有篇博文是介绍main()之前的启动流程的,发个链接吧:http://blog.csdn.net/kvs112219/article/details/6151393