我有一个通过uart连接到mcu的传感器。传感器的输出为ascii chapital R,后跟四个ascii字符编号,以回车结束。例如R1234CR
以下是从uart一次读取一个字符的代码。
我正在尝试编写一个函数,当它检测到大写R并将接下来的四个字符放在一个数组中时。
我的大部分功能都写在下面,但我正在努力解决逻辑流程。
另外如何返回数组?
由于
答案 0 :(得分:0)
我想这就是你想要的..我转移了一些代码并进行了一些更改......我无法编译它因为我当然没有和真正的UART接口。希望它会工作..
我连续扫描UART接收的数据,直到获取所有数据或接收到-1。 但是我没有遇到任何回车,因为我希望您只对5个字节的数据感兴趣随意更改此代码,因为您需要..
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
int main() {
char receivedChars[5] = {0};
bool status = getdata(receivedChars);
}
char getchar(void) {
int ret;
if ( (ret = ti_uart_read(TI_UART_0, &c)) == TI_RC_OK)
return ((char) c);
return -1;
}
bool getdata(char *receivedChars) {
int count = 0;
char retchar;
char buffer[5] = {0};
while(1){
retchar = getchar();
if ((retchar == 'R') && (count == 0)){
// It means the first occurance of 'R'
buffer[count] = 'R';
count++;
}else if ((count > 0) && (count < 5) && isdigit(retchar) != 0){
buffer[count] = retchar;
count++;
}else if(retchar == -1){
// Assumed that -1 means error in recieving the data from UART
return false;
}else{
continue;
}
if (count == 5){
strncpy(receivedChars, buffer, count);
return true;
}
}
}
答案 1 :(得分:-1)
您在代码中尝试做两件事
我试图编写一个函数,当它检测到大写字母R并将接下来的四个字符放入数组时
和
//如果字符为1-9,则将它们写入数组
两者兼顾有时是矛盾的。所以你需要决定你需要完成什么。
第一个更复杂,所以我会帮助你。
void getdata(char *receivedChars)
{
static uint8_t detected, ndx;
int retchar;
retchar= getchar();
if ((retchar == 'R') && (detected == 0))
{
detected = 1;
ndx = 0;
}
if ((detected == 1) && (ndx < 4))
{
receivedChars[ndx] = retchar;
ndx++;
}
if (retchar == '\r'){
receivedChars[ndx] = '\0';
ndx = 0;
ti_uart_writebuffer(UART_0, (uint8_t *)receivedChars, sizeof(receivedChars));
}
}
修改:将类型更改为无效,并在ti_uart_writebuffer
功能中添加了getdata
来电。现在应该从main
函数中删除此调用。