打印
[STM32F1]

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

[复制链接]
419|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如下图所示,如果将变量定义放在main函数前面,程序可以正常运行,
如果将变量定义放在main函数里面,程序不能运行运行。想问一下大家为什么会出现中情况?

使用特权

评论回复
沙发
heweibig|  楼主 | 2022-2-19 11:20 | 只看该作者
如果在一个.C文件中封装一个函数,其中需要在函数内部定义一些变量,因为这个函数是在main函数中调用,如何操作才能避免因为次序导致的程序不能运行?

使用特权

评论回复
板凳
heweibig|  楼主 | 2022-2-19 11:22 | 只看该作者

使用特权

评论回复
地板
sagade| | 2022-2-19 11:41 | 只看该作者
堆栈爆了吧?

使用特权

评论回复
5
juventus9554| | 2022-2-19 11:54 | 只看该作者
压根就不是什么顺序的问题

使用特权

评论回复
6
zhanghqi| | 2022-2-19 11:56 | 只看该作者
函数内不能定义这么大的局部变量,uint32_t ADC_volume[400]这个一定义,栈就爆了

使用特权

评论回复
7
heweibig|  楼主 | 2022-2-19 12:02 | 只看该作者
全局变量和static都试了一下,static方便点。

使用特权

评论回复
8
stly| | 2022-2-19 12:04 | 只看该作者
跟堆栈设置的大小有关,一般原则上函数内的局部变量要尽量少

使用特权

评论回复
9
xxrs| | 2022-2-19 12:06 | 只看该作者
十几二十个字节没什么问题,但是这个占用1600个字节明显不行

使用特权

评论回复
10
heweibig|  楼主 | 2022-2-19 12:07 | 只看该作者
一般需要用到这么大的内存时有3个办法 1、定义在函数外作全局变量。 2、前面加static作为静态变量。 3、用malloc申请内存空间。

使用特权

评论回复
11
heweibig|  楼主 | 2022-2-19 12:10 | 只看该作者
前两者占用全局内存空间,最后一个方式需堆空间足够,用完要free释放。 初学者的最好用方法1

使用特权

评论回复
12
zhanghqi| | 2022-2-19 12:16 | 只看该作者
函数内部最大能定义多少字节?那这个只能在函数外部定义一个全局变量了吧?

使用特权

评论回复
13
heweibig|  楼主 | 2022-2-19 12:20 | 只看该作者
还有个问题想问一下,如果在一个函数中定义了一个static数组。函数第一次运行的时候会创建一个静态数组,如果函数在运行一次,第二次是覆盖前面的static数组里的数据还是在重新换一个地址创建一个static数组?

使用特权

评论回复
14
stly| | 2022-2-19 12:22 | 只看该作者
第二次这个数组里面的数据会保持第一次改完后的状态,你可以将static修饰的静态数组理解为只能在此函数内可见的全局数组。

使用特权

评论回复
15
renyaq| | 2022-2-19 12:25 | 只看该作者
它实际上就是全局数组,只不过只在此函数内可以引用而已。

使用特权

评论回复
16
heweibig|  楼主 | 2022-2-19 12:29 | 只看该作者

哦,那我就知道怎么回事了,多谢大家

使用特权

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

本版积分规则

869

主题

13089

帖子

7

粉丝