问答

汇集网友智慧,解决技术难题

21ic问答首页 - 请教STM32中到底可以定义多少变量

STM32 idata RAM SRAM 内存

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

gdszzyq2021-09-25
是根据SRAM的大小来定的吗?还是象51那样也分DATA\IDATA,但又支持那样的修饰符,有时不敢定义太多变量,担心象51那样内存不够用。
回答 +关注 16
18088人浏览 17人回答问题 分享 举报
17 个回答
  • STM32中有flash和sram两个存储设备,对于程序员来说需要存储的主要包括以下六个数据段:代码(text) 、常量(constdata)、初始化为非零的静态和全局变量(data)、未初始化和初始化为零的静态和全局变量、局部变量(bss)、动态分配的堆(heap)、系统自动  分配的栈(stack) 。按照存储属性来分为:只读数据(RO)、可读写数据(RW)、零初始化数据(ZI)。1)只读数据(RO):在flash中存储,主要存储代码、常量、初始化为非零的静态和全局变量(这部分数据程序运行后会复制到SRAM中);
    2)可读写数据(RW):在SRAM中存储,主要存储初始化为非零的静态和全局变量(从flash中复制过来的数据);
    3)零初始化数据(ZI):在SRAM中存储,主要包括未初始化和初始化为零的静态和全局变量、局部变量、动态分配的堆、系统自动  分配的栈。
  • 本帖最后由 aple0807 于 2021-12-7 15:04 编辑

    51分5个地址空间,分别bits, sfr, idata, xdata, code。 arm一个地址空间,变量、代码在同一空间的不同地址范围内。 变量多少只和sram容量有关,就像51中的xdata有多大容量就可以创建多少xdata区的变量。
  • 合理使用,绝不浪费,实在不够也只能换片子了。
  • 担心是必要的!
    在编程中特别是功能函数中,最后实用内部变量,减少全局变量的实用,可有效防止RAM超出。实再不行换片子了,不要纠结。
  • 在C语言里,局部变量分配在栈里(除非你用 static 修饰),静态分配的全局变量分配在堆里,动态分配的全局变量也在堆里。所以,具体能分配多少变量,和这些存储区域的大小有关。而这些区域的大小,是通过配置链接参数决定的。动态分配还要更复杂一点,分配变量的上限不仅和容量有关,还和块大小,以及内存碎片化的程度等因素有关。
  • 看型号有的RAM 64K 除去堆和栈(4k足够了),你差不多可以定义60k个 字符变量或者30K个整形或者15k个长整型或者浮点数
  • 只要不是用系统里的一些非常复杂的计算函数,内存还是够用的,我曾经在stm8s003里想用一个对数函数,结果就报错了,用stm8s207是可以的
  • 放心大胆的定义,不够用的时候是编译不过去的
  • 编译结果基本上就能知道个大概了,关键还是看怎么用吧。
12下一页

您需要登录后才可以回复 登录 | 注册