我正在尝试使用全局数组来存储我知道不会超过255个字节的数据。但是当我尝试使用阵列传输数据时,似乎没有任何传输。我做错了什么?
char responseFrame[255];
int main {
...
while(1){
getData();
}
};
void getData(void) {
int responseLen = USART1_RX();
// put data in the response frame
for (int i = 0; i < responseLen; i++){
recv_data = USART1_RX();
responseFrame[i]=recv_data;
//USART0_TX(responseFrame[i]);
}
LogOutput(responseFrame, responseLen);
}
void LogOutput(char *msg, int size) {
int i;
for (i = 0; i < size; i++) {
USART0_TX(msg[i]);
}
}
但是,当我评论我的记录功能“LogOutput”并使用“USART0_TX(responseFrame [i])”行进行直接传输时,它会正确传输信息。
这是我的USART0_TX功能:
void USART0_TX(uint8_t myData) {
// Wait if a byte is being transmitted
while( !(UCSR0A & (1<<UDRE0)) );
// Transmit data
UDR0 = myData;
};
答案 0 :(得分:0)
您确定您的LogOutput函数是否正在传递有效数据?
这应该有效
unsigned char* data = responseFrame;
LogOutput(data,255);
另一个想法:
您是否正在使用任何优化运行编译器?尝试关闭它们以查看问题是否消失。
另外,您可能需要考虑标记全局volatile。
volatile char data[255];
答案 1 :(得分:0)
您可能需要延迟USART0_TX功能。
// Wait if a byte is being transmitted
while( !(UCSR0A & (1<<UDRE0)) );
// Transmit data
UDR0 = myData;
_delay_ms(250);
这将允许uC赶上放在总线上的数据。我在传输数据方面遇到了类似的问题,我发现在将数据放入UDR后使用短暂的延迟解决了这个问题。
它在你的getData函数中工作的原因是因为其他两个语句作为TX函数的延迟。
如果还没有,则需要包含util / delay.h。请记住,最大延迟为4294967.295 ms / F_CPU(MHz)