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

之前用这个,还被训了。

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

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

最佳答案

  • yuxiangs 发表于2018-05-17

    静态变量,我认为这个是针对于static定义的局部变量而言的,除了只能在定义它的函数内局部使用外其他的和全局变量是一样的(只在第一次调用时初始化,用完后空间不会释放,已存值不会改变)。比方说以上的a在第一次调用时被初始化为0.然后自加为1,那么第二次调用时(无论谁调用)a的初始值就是1,运行完就是2。

    举报 评论 0

其他答案

  • 靳飞 发表于 2018-05-17 云汉达人

    用了static的全局变量只能在这个文件中使用,出了文件就不可以使用了。

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

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

    举报 评论 1 0

    xhuaihe 回复了 汉云:也就是使用邮箱之类的传递了?然后哪个函数使用,就保存在函数的栈内? 回复

  • jn1989 发表于 2018-05-17

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

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

    举报 评论 0

  • skawu 发表于 2018-05-17

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

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

    举报 评论 2 0

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

  • liangeeg 发表于 2018-05-17

    加了static后全局变量只是本文件的全局变量,别的文件不可访问,没加的花整个工程可以

    举报 评论 0

  • US 发表于 2018-05-19

    static修饰全局变量,表示这个变量不能被外界访问,访问编译会报错,这个对于低耦合,高内聚代码很常用

    举报 评论 0

  • 菜鸟冷虎 发表于 2018-06-15

    这个一般都是静态变量,便于程序的接口隐藏

    举报 评论 0

我来回答

试用推荐

ESP32 WIFI+蓝牙

产品总数:50个  申请人数:161

距离结束时间:

推荐达人 更多>

  • 王奕 向ta提问

    Eagleson

    在学习FPGA的道路上 我们一起成长吧!

    在行: FPGA/CPLD

  • 靳飞 向ta提问

    汉云

    在路上的Linuxer

    在行: DSP技术 Linux 系统 STM32讨论区 PIC单片机 PCB技术/设计/定制

  • Angel Cherry 向ta提问

    MOP

    用愛和熱忱寫好每一行Code

    在行: FPGA/CPLD Linux 系统 热门单片机

  • 徐珂靖 向ta提问

    xukejing

    Linux系统 、热门开发板

    在行: Linux 系统

  • 袁建明 向ta提问

    河北博联科技有限公司 研发部经理

    日知其所亡

    在行: Linux 系统 灵动微MCU 电源技术

完成答题
赶快去开启您的宝箱吧
回答问题攒积分送开发板