我大多是用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)
有没有全局变量的方法吗?还是这是例外?
使用 PIC32MZ 等微控制器时,可以在中断内使用静态变量吗?这将是一个时间计数器。如果中断每隔一毫秒触发一次,那么每秒都需要一个标志。
是否有必要使该变量成为易失性变量,或者它在中断内的存在使其变得易失性?