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

共10条 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 09:58:44     打赏
3楼

在iar的程序时,有一个 run to main 的选框 如果不选中

那么调试就从startup.s里开始执行。


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

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


高工
2014-01-20 16:46:15     打赏
5楼
太深奥了,表示压力很大

专家
2014-01-20 16:49:24     打赏
6楼
哦了。明了

院士
2014-01-21 20:01:10     打赏
7楼
来听听高手们的聊天,围观一下。

高工
2014-01-25 15:50:29     打赏
8楼
很高深,学习学习

高工
2014-01-25 20:49:23     打赏
9楼
对此问题,我只能严重围观中,,,,,

菜鸟
2014-01-27 14:14:54     打赏
10楼
围观一下,看看说法

共10条 1/1 1 跳转至

回复

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