我正在AVR中实现USART通信。下面的函数应该接收字符并将其存储在主函数中定义的字符数组中。
void readString(uint8_t string[], uint8_t maxLength)
{
uint8_t idx = 0;
uint8_t data;
while(idx < (maxLength-1)) // prevent overruns
{
data = getByte();
transmitByte(data); // echo the received characters
if(data == 'n') break; // check if enter key is pressed
else{
string[idx] = data;
idx++;
}
}
string[idx] = 0; // insert a null character
}
以下是主要功能:
int main(){
initUSART(); // initialize usart
uint8_t* newString = "Hello"; // test string
uint8_t mString[55]; // store the received characters
readString(mString, 55); // read array of characters
for(;;){
transmitString(newString);
_delay_ms(DELAY);
}
return 0;
}
然后,禁止以下功能将接收到的字符阵列发送回USART线路
void transmitString(uint8_t* string){
uint8_t i;
uint8_t len = sizeof(string);
for(i=0; i<len; i++){
transmitByte(string[i]);
}
}
问题是trannsmitString函数没有任何可发送的内容。我知道我的readString函数没有将字符保存到主函数中声明的mString数组中。getByte函数工作正常。我可以接收和发送单个字符,但不能发送字符串。我只能一个接一个地回显接收到的字符。我在将这些字符插入数组以进行进一步操作时遇到问题。使用已经声明的字符串,测试字符串,函数可以很好地传输。
请帮我解决这个问题。
uint8_t len = sizeof(string);
没有做你认为它正在做的事情。这里的len
将保持string
指针的大小(即,它与sizeof(uint8_t*)
相同(,而不是传递的数组的大小。您需要将长度作为一个额外的函数参数来传递,以获得所需的内容。