C语言 全局变量 中断,c – 使用中断处理程序时如何避免全局变量?

您应该区分具有外部链接的全局变量和文件范围静态变量.你可以用后者来解决你的问题.

static volatile int shared_variable ;

int getShared(){ return shared_variable ; }

static void isr_handler()

{

shared_variable++ ;

}

因此,在上面的示例中,对转换单元外部的共享变量的唯一访问是通过访问函数getShared().这种方法当然依赖于使用单独的编译,但由于许多原因,这不是坏事.

对于其他避免全局变量的技巧,以及为什么要这样做的解释,请参阅Jack Ganssle的A Pox on Globals

要考虑的另一件事,以及全局变量在这种情况下特别成问题的原因是共享变量必须是原子的或在关键部分中访问.例如,在16位dsPIC上,32位访问不是原子的,在这种情况下,必要的保护可以放在访问函数中,而如果它是全局的,则每个访问都必须单独保护:

例如:

static volatile uint32_t shared_variable ;

int getShared()

{

uint32_t ret ;

_disable_interrupts() ;

ret = shared_variable ;

_enable_interrupts() ;

return ret ;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值