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

大家怎么看到单片机程序中使用static修饰的全局变量?

xhuaihe 2018-05-17 浏览量:1207

static修饰全局变量,为何就不能用了?

之前用这个,还被训了。

平时使用RTOS时,大家是怎么处理必须用到的全局变量,尤其是各个线程都用的数据?

用邮箱发送地址,然后保存在线程栈中的局部变量吗?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 静态变量,我认为这个是针对于static定义的局部变量而言的,除了只能在定义它的函数内局部使用外其他的和全局变量是一样的(只在第一次调用时初始化,用完后空间不会释放,已存值不会改变)。比方说以上的a在第一次调用时被初始化为0.然后自加为1,那么第二次调用时(无论谁调用)a的初始值就是1,运行完就是2。
    • 发布于 2018-05-17
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 用了static的全局变量只能在这个文件中使用,出了文件就不可以使用了。

    如果整个工程都要用的全局,不要用static就可以了。当然这样不严谨;

    严谨些,就使用RTOS中的进程通讯的方法吧

    • 发布于2018-05-17
    • 举报
    • 评论 1
    • 0
    • 0
xhuaihe 回复了 汉云 :也就是使用邮箱之类的传递了?然后哪个函数使用,就保存在函数的栈内? 回复

  • 我也喜欢用static修饰全局变量和函数,用于保证该函数和变量只能在该文件内起作用。防止多文件函数和变量重名。

    如果进程间通讯,还是用信号量吧,严谨些比较好

    • 发布于2018-05-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 各个线程都用到的数据就需要考虑进程间通信机制,因为一个变量,可能有多个线程去修改或者读取值,每个线程的执行顺序不是可预测的,所以会有冲突,进程间通信机制就是解决这类问题的

    用static修饰的全局变量限定了作用域,只在当前文件可用,如果做个封装,封装成get、set函数extern外部,其它文件就也可以使用

    • 发布于2018-05-17
    • 举报
    • 评论 2
    • 0
    • 0
xhuaihe 回复了 skawu :但是很多时候还是一个线程写数据,其他线程读数据吧。这样写,速度快还简单 回复
skawu 回复了 skawu :这是生产者和消费者问题,你如果不用IPC机制,你能知道一个线程读的时候,另外一个线程是不是在写呢? 回复

  • 加了static后全局变量只是本文件的全局变量,别的文件不可访问,没加的花整个工程可以
    • 发布于2018-05-17
    • 举报
    • 评论 0
    • 0
    • 0

  • static修饰全局变量,表示这个变量不能被外界访问,访问编译会报错,这个对于低耦合,高内聚代码很常用
    • 发布于2018-05-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个一般都是静态变量,便于程序的接口隐藏
    • 发布于2018-06-15
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

大家怎么看到单片机程序中使用static修饰的全局变量?