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

[复制链接]
778|6
 楼主| Hufei1994 发表于 2020-2-18 22:26 | 显示全部楼层 |阅读模式
如下图所示,如果将变量定义放在main函数前面,程序可以正常运行,
如果将变量定义放在main函数里面,程序不能运行运行。想问一下大家为什么会出现中情况?
如果在一个.C文件中封装一个函数,其中需要在函数内部定义一些变量,因为这个函数是在main函数中调用,如何操作才能避免因为次序导致的程序不能运行?
main函数.png
dalarang 发表于 2020-2-18 22:53 | 显示全部楼层
压根就不是什么顺序的问题,函数内不能定义这么大的局部变量,uint32_t ADC_volume[400]这个一定义,栈就爆了

评论

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

粉丝
快速回复 在线客服 返回列表 返回顶部