【发布时间】:2016-06-11 12:44:49
【问题描述】:
这是我第一次看到这样的东西。我开始怀疑这是硬件故障。 每当我尝试发送数组“test”的内容并且该数组大于 4 个元素时,或者我初始化声明中的所有元素时,它都包含 0xff 而不是我尝试初始化的值。
这很好用。当我在 while 中从数组中读取值(将它们发送到 lcd 和 uart)时,两个读数都与测试值一致:
uint8_t i=0;
uint8_t test[4] = {1,2,3,4};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
这不是,它返回 0xff 而不是 test[i] 值:
uint8_t i=0;
uint8_t test[5] = {1,2,3,4,5};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
但这行得通!它返回正确的值
uint8_t i=0;
uint8_t test[6] = {1,2,3,4,5};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
这也有效:
uint8_t i=0;
uint8_t test[5];
test[0]=1;
test[1]=2;
test[2]=3;
test[3]=4;
test[4]=5;
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
在 linux 上编译时可以正常工作
我将一个 mcu 换成了另一个 mcu,它按应有的方式工作。应该是硬件问题
【问题讨论】:
-
这个问题不是特别清楚。请不要只是粘贴代码并让我们在心理上区分它。 解释问题是什么。你说“返回 0xFF”——从哪里来?该代码未在任何地方显示。如果您的问题在于传输,我们为什么要关心接收端的结果?隔离问题。你正在发送一个UART,对吧?那么显而易见的调试步骤是查看端口实际输出的内容。
-
您意识到,即使您的数组大小发生变化,循环的边界也不会改变,对吧?总是
while(i<5)。这就是为什么ARRAY_LENGTH宏很有用的原因。 -
我编辑了我的帖子以正确形成它。问题是,当我以通常的方式初始化数组时,数组 []={1,2,3} 并且它大于 4 个元素而不是我的值,它包含 0xff。当我声明一个 6 个或更多元素数组并初始化它跳过最后一个元素时,它工作正常。我没有因为懒惰而改变 (i
-
我假设在您的第一个块中,
while应该是while (i<4) {? -
端口可能存在流量控制问题