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处理器。可能是配置错误吗?
答案 0 :(得分:1)
黑暗中的一个问题是你使用的是嵌入式编译器,而你的c-startup并没有初始化bss部分。这样可以得出您初始化局部函数变量的结果,但静态不是。
要测试这是否属实,您可以再次在main中包含计数器并将其标记为静态,并且您可能会获得与全局相同的结果...
int main( void )
{
static int counter = 0;
...
请显示您的编译+链接命令。理想情况下,反汇编的exe的pastebin也会很好。
答案 1 :(得分:0)
当此线程处于等待状态时,请检查计数器变量是否扩展到某些位置,而其他一些线程正在使用该变量。如果它在主要手段内部工作,这可能是原因
答案 2 :(得分:0)
只是尝试用其他变量替换计数器名称,以测试计数器是否被其他线程意外使用。