• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

程序中全局变量的使用问题

great_CC 2018-04-02 浏览量:1658

程序中有一组类似于AT命令的常用指令。

如果定义成全局数组,每次函数中需要使用的时候比较方便;但是这样就多占用了FLASH;

如果在函数内,每次都定义个数组,然后给数组元素赋值,这样做有必要吗。整体比较的话,大家会怎么用。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 还是用全局数组吧,单片机的FLASH没那么紧张;如果每次函数执行都要来一遍局部变量赋值,太繁琐。
    • 发布于 2018-04-03
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了 :NDS331N-NL参数值高,厂牌是微碧 回复

其他答案 数量:16
  • 这样并不节省flash,你加载到ram的数据编译器也是给他放在flash中的。
    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :INA321E/250,Texas Instruments ,供参考 回复

  • 全局数组就很好啊,不会多占用Flash的。在函数内定义,字符串也是保存在Flash中的,而且每次都要生成,效率也不高。
    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :尾缀包装区别,产品同一物料
回复

  • 应该是选后者定义数组,每次赋值。这样更合理吧。一般很少会去大量的定义数组做定量吧

    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :S6-3528RGBTA供参考 回复

  • 全局数组应该不大吧,除非你定义的特别大,一般不用考虑数值占用的内存吧
    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :前缀“S”符合车规级。 回复

  • 1. 你需要理清一个概念,无论那种方式,只要是程序中的,编译下载后都会进入flash中存储起来,无论是全局变量还是局部变量(有初始化值时),因为这些值都需要通过存储区(flash)加载到ram中的,所以都会占同样多的flash空间

    2. 由此肯定是全局变量更好了,反而局部变量,因为每个程序(子片段)定义初始化时的值不完全一样,所以更可能的是多占用空间存储初始化值(有可能有重复的),编译时优化又可能优化不到,所以反而有占用更多空间的可能(极致情况也就是和全局存储一样了)

    综上,如果这些指令存在复用,且一次定义多次运行,肯定是一次定义全局变量,再调用,即方便,又节省空间的。

    ----------------------------------------

    不过你的程序是AT指令,按理应该有一些是需要临时格式化的(一些具体操作数的),是否还需要个别拼接?

    如果这样,你应该是重复部分全局存储,分别部分才有字符串临时拼接的形式临时产生,这样对flash的占用就会降低很多。

    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :TP1:代表reel或者管装 F:环保含义 回复

  • 不会多占空间 可以采用定义数组然后赋值的方式更好
    • 发布于2018-04-02
    • 举报
    • 评论 2
    • 0
    • 0
电子老工程师 回复了  :https://assets.nexperia.com/documents/data-sheet/74HC_HCT4060_Q100.pdf 回复
电子老工程师 回复了  :https://assets.nexperia.com/documents/data-sheet/74HC_HCT4060_Q100.pdf 回复

  • 如果flash 够用,就全局变量吧。如果设计成可重入函数 就局部变量。

    局部数组要考虑栈够不够大。

    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :镀锡铜材质。 回复

  • 局部变量,然后初始化的方式不省flash空间,但是可能会让RAM复用,如果数组是固定值,RAM速度比FLASH快,放RAM里为了提速的话就在启动的时候初始化它,如果没有这个想法,就声明成const放flash就好啦
    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :尾缀包装区别,产品同一物料
回复

  • 不管你怎么定义,都是会写入flash的
    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :没有国产替代 回复

  • 全局变量吧,设计成一个table,然后查表。
    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :https://atta.szlcsc.com/upload/public/pdf/source/20210426/C2828223_55E7EC600AAB0ED8E9E00B27AAD57ADE.pdf 回复

  • 全局变量,定义成常量放flash,你单片机flash资源比ram资源紧张吗
    • 发布于2018-04-03
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :以下图纸中有1pin脚位置。 回复

电子老工程师 回复了  :SBAS21LT1G,onsemi,没有国产的,供参考 回复

  • 全局变量吧,你的程序不可能会占用全部的flash,也不差这么几个字节了
    • 发布于2018-04-03
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :没有找到合适的替代,同封装的都没货 回复

  • 这种搞个全局变量就行了,占不了多少空间的
    • 发布于2018-04-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 采用全局变量,或者用#define标识符定义相关功能
    • 发布于2018-04-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 感觉你这样还不如就把数组放在全局变量中呢,如果是在函数中赋值,本质上也是要调用全局变量中的数据,存储空间没有改变治之余还浪费了进出堆栈的时间。

    • 发布于2018-04-30
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

程序中全局变量的使用问题