共享变量状态未在包含文件

时间:2016-07-25 21:38:41

标签: c embedded

使用无线UART功能对EFM32ZG嵌入式系统进行编程。

UART正确接收来自无线地面站的数据。如果是这样,我只需将布尔值切换为" true"。当UART检测到RX缓冲区中的信息时,布尔值在中断服务处理程序中设置。为了测试这个功能,我指示微处理器在正确解码数据包时将LED设置为高电平,确实如此,因此我确信问题不在于接收UART数据。

从UART.h文件中我声明了我的布尔值:

 `volatile bool Sweep_CW`

在UART.c文件中,我有一个将值设置为True的函数:

    if(received_packet[1] == '1' && received_packet[2] == '1'){
    Sweep_CW = true;
    ...
}

我的代码的另一部分读取此布尔值。接口文件在其头文件中包含以下内容:

extern volatile bool Sweep_CW;

在接口文件" .c"文件,我有一个函数,当它读取布尔值为true时,将LED设置为高。在UART上接收到新数据时调用此函数,否则CPU将循环等待。我相信这部分代码也可以使用,因为它经过了广泛的测试。

...
if(Sweep_CW)
GPIO_PinOutSet(gpioPortC,11);
...

问题:Sweep_CW永远不会被解释为' true'在接口文件的.c函数中。

问题:我觉得这应该是容易的,但它给了我很多的悲伤。我是否错误地设置了我的声明/我错过了一些非常明显的东西?

到目前为止我尝试过的事情:

1)我确定我正在使用" volatile"存储类说明符 - 在这种情况下非常重要。

2)我确保我的中断服务程序在完成后清除正确的标志。

3)在线评论类似主题的材料:https://electronics.stackexchange.com/questions/53218/pic-global-variable-not-modified-inside-interrupt-handler

4)小睡一会儿,用一双新鲜的眼睛回到这里。

1 个答案:

答案 0 :(得分:0)

volatile bool Sweep_CW; 声明,属于头文件。

{{1}}是定义,只应在源文件中出现一次。

不幸的是,仅这一点并不能解释你的问题。你能发布一个更完整的代码示例来展示问题。很难分析甚至可能不包含相关代码的小片段。