gpt4 book ai didi

c - 这个策略是为了避免 C 中的全局变量,对吗?

转载 作者:太空狗 更新时间:2023-10-29 17:04:02 25 4
gpt4 key购买 nike

<分区>

在我的(个人)嵌入式项目中,全局变量堆积如山。我需要这些变量可以从 ISR(中断服务例程)和/或菜单系统(以便用户可以修改它们)访问,但同时我想避免使用太多全局变量。

因为它们可以按模块分组,我想我可以将它们封装在它们自己的 .c 文件中,声明为 staticstatic volatile ,并暴露给外部world 一些函数来处理它们。

类似的东西:

在module1.c

#include module1.h

static volatile int module1_variable;

int getModule1Var(void){
return module1_variable;
}

void setModule1Var(int i){
//some code to disable interrupts for atomic operations
module1_variable = i;
//some other code to re-enable interrupts
return;
}

module1.h 将包含函数原型(prototype)、结构和使模块正常工作的所有其他元素,当然静态变量定义除外

在 main.c 中

#include module1.h

void main(){
//setting the variable value, could be done from a menu
setModule1Var(15);
//remaining application code
}

void generic_ISR(){
//trivial usage example
doSomething(getModule1Var());
return;
}

这个方案自然会扩展到其他模块。

现在我的问题是:
这是一个好方法吗?简单地拥有一堆全局变量是一样的吗?有什么主要缺点吗?

我还认为我可以使用某种混合方式,比如仍然让全局变量允许 ISR 直接操作(因为来自 ISR 的函数调用有时不受欢迎)和其他所有情况下的函数。这样会更好吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com