打印

请教STM32中到底可以定义多少变量

[复制链接]
18162|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdszzyq|  楼主 | 2021-9-25 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ningling_21| | 2021-9-25 17:25 | 只看该作者
根据RAM大小决定,例如16K的RAM可以定义16*1024个char型的变量

使用特权

评论回复
板凳
yangsen| | 2021-9-25 17:43 | 只看该作者
操心这个干吗?硬件选型的时候先选大的,实现功能后再往下降

使用特权

评论回复
地板
jgp886585| | 2021-9-25 21:34 | 只看该作者
最近比较也比较关注这方面,有没有大神详细说道说道

使用特权

评论回复
5
NJZR| | 2021-9-25 23:25 | 只看该作者
不是大神,只是说说我的理解,首先要看你定义什么变量,如果只是局部变量一个函数一个那无论你定义了多少个可能只占用了一个变量的地址空间;其次,不谈变量类型和长度只谈数量那这事弹性很大;最后,在STM32上正常你完成程序逻辑所需要的变量肯定足够你用的,但应当留意一些一般做数据缓冲区的变量数组,敞开用怎么搞都可能不够的,比如一些图像数据,当然这时你也可以用FSMC扩展外部SRAM也有比较快的速度,100脚或以上的型号都有FSMC口。

使用特权

评论回复
评论
单模先声 2022-6-2 08:02 回复TA
语文水平太差 
6
ayb_ice| | 2021-9-26 08:32 | 只看该作者
这当然取决于实际RAM,正常定义就可以了,不够用会报错的

使用特权

评论回复
7
gaobq| | 2021-9-26 09:45 | 只看该作者
RAM大小是总量,堆、栈和变量此消彼长

使用特权

评论回复
8
coody| | 2021-9-26 10:08 | 只看该作者
ARM是统一编址的,SRAM不像51那样分多种,只要使用的变量不超过内存,就不会限制变量个数。

使用特权

评论回复
9
gdszzyq|  楼主 | 2021-9-26 10:21 | 只看该作者
明白了,谢谢各位!

使用特权

评论回复
10
fionababy| | 2021-9-26 10:26 | 只看该作者
编译结果基本上就能知道个大概了,关键还是看怎么用吧。

使用特权

评论回复
11
数码小叶| | 2021-9-26 16:25 | 只看该作者
放心大胆的定义,不够用的时候是编译不过去的

使用特权

评论回复
12
kcfoo1| | 2021-9-26 16:49 | 只看该作者
只要不是用系统里的一些非常复杂的计算函数,内存还是够用的,我曾经在stm8s003里想用一个对数函数,结果就报错了,用stm8s207是可以的

使用特权

评论回复
13
steelen| | 2021-9-27 09:47 | 只看该作者

请教STM32中到底可以定义多少变量

看型号有的RAM 64K 除去堆和栈(4k足够了),你差不多可以定义60k个 字符变量或者30K个整形或者15k个长整型或者浮点数

使用特权

评论回复
14
cool_coder| | 2021-9-27 21:48 | 只看该作者

请教STM32中到底可以定义多少变量

在C语言里,局部变量分配在栈里(除非你用 static 修饰),静态分配的全局变量分配在堆里,动态分配的全局变量也在堆里。所以,具体能分配多少变量,和这些存储区域的大小有关。而这些区域的大小,是通过配置链接参数决定的。动态分配还要更复杂一点,分配变量的上限不仅和容量有关,还和块大小,以及内存碎片化的程度等因素有关。

使用特权

评论回复
15
GlenX| | 2021-9-28 09:12 | 只看该作者
担心是必要的!
在编程中特别是功能函数中,最后实用内部变量,减少全局变量的实用,可有效防止RAM超出。实再不行换片子了,不要纠结。

使用特权

评论回复
16
moticsoft| | 2021-12-6 22:17 | 只看该作者
合理使用,绝不浪费,实在不够也只能换片子了。

使用特权

评论回复
17
aple0807| | 2021-12-7 15:02 | 只看该作者
本帖最后由 aple0807 于 2021-12-7 15:04 编辑

51分5个地址空间,分别bits, sfr, idata, xdata, code。 arm一个地址空间,变量、代码在同一空间的不同地址范围内。 变量多少只和sram容量有关,就像51中的xdata有多大容量就可以创建多少xdata区的变量。

使用特权

评论回复
18
艾伦183| | 2022-6-1 19:17 | 只看该作者

请教STM32中到底可以定义多少变量

STM32中有flash和sram两个存储设备,对于程序员来说需要存储的主要包括以下六个数据段:代码(text) 、常量(constdata)、初始化为非零的静态和全局变量(data)、未初始化和初始化为零的静态和全局变量、局部变量(bss)、动态分配的堆(heap)、系统自动  分配的栈(stack) 。按照存储属性来分为:只读数据(RO)、可读写数据(RW)、零初始化数据(ZI)。1)只读数据(RO):在flash中存储,主要存储代码、常量、初始化为非零的静态和全局变量(这部分数据程序运行后会复制到SRAM中);
2)可读写数据(RW):在SRAM中存储,主要存储初始化为非零的静态和全局变量(从flash中复制过来的数据);
3)零初始化数据(ZI):在SRAM中存储,主要包括未初始化和初始化为零的静态和全局变量、局部变量、动态分配的堆、系统自动  分配的栈。

使用特权

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

本版积分规则

46

主题

322

帖子

3

粉丝