全局变量无法正常工作C.

时间:2014-11-06 06:09:23

标签: c global-variables

int counter = 0;

int main (void)
{
   while(1)
   {
      counter++;
      wait_ms(1000);
      if(counter==5) Led_on();
      putrsUSART("\n\rUSART: "); putiUSART(counter);
   }
}
void putcUSART(u8 data)
{
  //Wait until transmitt buffer is empty
  while(! (USART1 -> SR & USART_SR_TXE));
  //Send the data
  USART1->DR = (data & 0xFF);
}

void putsUSART (u8 *data)
{

    do{
    putcUSART(*data);
    }while (*data++);
}    

void putiUSART (u32 value)
    {
        char TXBUFFER[32] = {0};
        snprintf(TXBUFFER, sizeof(TXBUFFER), "%d",value);
        putsUSART ((u8*)TXBUFFER);
    }

我上面的代码有问题。它很简单,我不明白为什么它不起作用。 如果我在主循环中放置“int counter = 0”(在while之前),则计数器正确计数。 但现在他确实算了,但不要从0开始。但是例如:509888073; 我使用的是ARM32Fxx处理器。可能是配置错误吗?

3 个答案:

答案 0 :(得分:1)

黑暗中的一个问题是你使用的是嵌入式编译器,而你的c-startup并没有初始化bss部分。这样可以得出您初始化局部函数变量的结果,但静态不是。

要测试这是否属实,您可以再次在main中包含计数器并将其标记为静态,并且您可能会获得与全局相同的结果...

int main( void )
{
    static int counter = 0;
    ...

请显示您的编译+链接命令。理想情况下,反汇编的exe的pastebin也会很好。

答案 1 :(得分:0)

当此线程处于等待状态时,请检查计数器变量是否扩展到某些位置,而其他一些线程正在使用该变量。如果它在主要手段内部工作,这可能是原因

答案 2 :(得分:0)

只是尝试用其他变量替换计数器名称,以测试计数器是否被其他线程意外使用。