c - 结果取决于变量初始化的顺序?

标签 c microcontroller atmega

我正在 ATmega16a 上试验 SPI,因此在 C 中初始化以下变量(在任何方法之外):

uint8_t refreshCounter = 0;
uint8_t sendBuffer[32] = {};
volatile uint8_t doSend = FALSE;
char lineBuffer[20] = {};

有了这些行,一切都按预期工作,但是当我切换最后两行时,我的程序停止工作(至少远程 SPI 模块没有应答):

uint8_t refreshCounter = 0;
uint8_t sendBuffer[32] = {};
char lineBuffer[20] = {}; 
volatile uint8_t doSend = FALSE;

这些定义有什么问题?为什么顺序很重要?

doSendvolatile 因为它在中断处理程序中使用。所有其他变量只能在无尽的主循环中访问。如果您需要更多代码,请告诉我。

最佳答案

将@WhozCraig 的评论转化为答案:是的,我使用以下行将 21 个字节写入我的 lineBuffer

sprintf(lineBuffer, "%20c", ' ');

因为 sprintf 附加了一个尾随的空空格。我的错。

谢谢@WhozCraig!

关于c - 结果取决于变量初始化的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23747377/

相关文章:

c - avr-gcc Arduino atmega2560 使用太多 RAM

c - 对 malloc 返回的指针进行类型转换是更好的做法吗?

c - ATmega2560使用UART中断来控制全局标志

c - 使用汇编器和 C 接口(interface)执行多项操作

C 标准库和 greenhills 编译器

使用 ## 连接一个字符串,使用 C 中的整数值连接微 Controller

c - 在 ARM 微 Controller 上延迟打开和关闭 LED

c - ATMega8 中的浮点类型值

c - 如何显示和替换员工数据?

c++ - 我的收集缓冲区是空的?