打印
[STM32F1]

关于变量定义顺序导致程序不能运行的问题

[复制链接]
511|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如下图所示,如果将变量定义放在main函数前面,程序可以正常运行,
如果将变量定义放在main函数里面,程序不能运行运行。想问一下大家为什么会出现中情况?
如果在一个.C文件中封装一个函数,其中需要在函数内部定义一些变量,因为这个函数是在main函数中调用,如何操作才能避免因为次序导致的程序不能运行?

main函数.png (65.46 KB )

main函数.png

使用特权

评论回复
沙发
dalarang| | 2020-2-18 22:53 | 只看该作者
压根就不是什么顺序的问题,函数内不能定义这么大的局部变量,uint32_t ADC_volume[400]这个一定义,栈就爆了

使用特权

评论回复
评论
Hufei1994 2020-2-19 12:15 回复TA
@dalarang :非常感谢帮助解惑!!!全局变量和static都试了一下,static方便点。 
dalarang 2020-2-19 11:28 回复TA
@Hufei1994 :这跟堆栈设置的大小有关,一般原则上函数内的局部变量要尽量少,十几二十个字节没什么问题,但是这个占用1600个字节明显不行。 一般需要用到这么大的内存时有3个办法 1、定义在函数外作全局变量。 2、前面加static作为静态变量。 3、用malloc申请内存空间。 前两者占用全局内存空间,最后一个方式需堆空间足够,用完要free释放。 初学者的最好用方法1 
Hufei1994 2020-2-19 09:52 回复TA
函数内部最大能定义多少字节?那这个只能在函数外部定义一个全局变量了吧? 
板凳
Hufei1994|  楼主 | 2020-2-19 13:28 | 只看该作者
dalarang 发表于 2020-2-18 22:53
压根就不是什么顺序的问题,函数内不能定义这么大的局部变量,uint32_t ADC_volume[400]这个一定义,栈就爆 ...

您好,还有个问题想问一下,如果在一个函数中定义了一个static数组。函数第一次运行的时候会创建一个静态数组,如果函数在运行一次,第二次是覆盖前面的static数组里的数据还是在重新换一个地址创建一个static数组?

使用特权

评论回复
地板
dalarang| | 2020-2-19 14:06 | 只看该作者
Hufei1994 发表于 2020-2-19 13:28
您好,还有个问题想问一下,如果在一个函数中定义了一个static数组。函数第一次运行的时候会创建一个静态 ...

第二次这个数组里面的数据会保持第一次改完后的状态,你可以将static修饰的静态数组理解为只能在此函数内可见的全局数组
它实际上就是全局数组,只不过只在此函数内可以引用而已。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

160

帖子

0

粉丝