这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 程序在main()函数之前都干了什么?

共3条 1/1 1 跳转至

程序在main()函数之前都干了什么?

高工
2014-01-17 23:28:20     打赏

    之前调试硬件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




关键词: main()     预编译BUG    

高工
2014-01-17 23:40:47     打赏
2楼

真是邪了门了,我将语句:

uint8 ReadData[256]={0};注释掉,或是去掉赋初值,即uint8 ReadData[256]:就可以往下执行了呢,原来可是进不了初始化的啊,不应该啊?愁啊


高工
2014-01-18 13:54:43     打赏
3楼

可以选择执行到哪个语句,main()也就是个特殊的符号,这个在启动文件中可以改,常规的就是在线暂停到main(),预编译的时候会对赋过初值的数组进行分配内存,叫桟更贴切些吧


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]