gpt4 book ai didi

用于通过 UART 读取传感器的 C 编程逻辑

转载 作者:行者123 更新时间:2023-11-30 19:38:04 24 4
gpt4 key购买 nike

我正在尝试从通过 UART 连接到 MCU 的传感器读取数据。通电后,传感器连续输出 ASCII 大写“R”,后跟代表距离(以毫米为单位)的四个 ASCII 字符数字,最后是回车符 (ASCII 13)。

我想知道是否有人可以帮助我找出一个逻辑来阅读,例如9999作为一个变量,称为reading。

我应该使用阻塞还是非阻塞功能?如果数据流入,我将如何隔离字符?

最佳答案

首先我会选择阻塞版本。我想您可能会在开始时丢失字符,因为传感器可能会在您实际读取数据之前开始流式传输字符。因此,如果 UART 已满,那么您可能需要它。所以示例代码是:

#define CR (13)
uart_t my_uart; // You need to setup this
uart_status_t status;
uint8_t c;
int status;
char distance[255] = { 0 }; // Whatever, large enough
int seen_r = 0; // You have not yet seen 'R'
int offset = 0;

while ((status = uart_read(my_uart, &c, &status)) == 0)
{
if (seen_r)
{
if (c == CR)
{
printf("Distance: %s\n", distance);
seen_r = 0;
memset(distance, 0, sizeof(distance));
}
if (offset < sizeof(distance)-1)
{
distance[offset++] = (char)c;
}
else
{
printf("Unexpected size, reset!\n");
seen_r = 0;
memset(distance, 0, sizeof(distance));
}
}
else
{
if (c != 'R') continue;
seen_r = 1;
}
}

当然这是未经测试的代码,但它可能会给你一些提示。基本上,您有一个以 'R' 开头并以 CR 结尾的状态机。

关于用于通过 UART 读取传感器的 C 编程逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38701913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com