小编vin*_*i_i的帖子

使用中断处理程序时如何避免全局变量?

我大多是用C自学的。我对嵌入式微控制器进行编程。(例如,dsPIC33fj128gp804)我通常使用全局变量,而我曾经读过的所有内容都使用全局变量来谴责,因为它们就像瘟疫一样。我一直在努力减少使用,但是有一种情况我不知道如何不使用全局变量。

微控制器配有中断。中断是硬件外部触发的事件。触发中断后,将停止执行主代码,保存当前工作变量,执行预分配的功能,然后从停止的地方重新开始选择主代码。由于中断是一个独立的函数,可以随时触发,因此无法传入或传出任何函数。

例如,当UART硬件接收到一个字节的数据时,该数据需要先移出硬件缓冲区,然后才能被覆盖。

void __attribute__((interrupt, no_auto_psv)) _U2RXInterrupt(void)
{
    GlobalVariable = U2RXREG; // Move data to global variable
    IFS4bits.U2RXIF = 0; // Clear the UART2 Receive Interrupt Flag
}
Run Code Online (Sandbox Code Playgroud)

有没有全局变量的方法吗?还是这是例外?

c embedded global-variables microchip

8
推荐指数
2
解决办法
9668
查看次数

中断内的静态变量

使用 PIC32MZ 等微控制器时,可以在中断内使用静态变量吗?这将是一个时间计数器。如果中断每隔一毫秒触发一次,那么每秒都需要一个标志。

是否有必要使该变量成为易失性变量,或者它在中断内的存在使其变得易失性?

microcontroller

5
推荐指数
1
解决办法
4908
查看次数