我有一个传感器通过 UART 连接到一个 MCU。传感器输出 ascii 字符。下面是我从 uart(传感器)读取和从 uart 写入(通过 putty 到我的电脑)的功能。
我的问题是,我是否需要将 ascii 字符转换为 uint8_t
类型以覆盖 uart,因为这是 putchar() 的要求?腻子中没有显示。
最佳答案
类型uint8_t
是unsigned char
的typedef,它需要与signed char
或plain 具有相同的布局字符
.
因此,您可以在 uint8_t
和 char
之间或在 uint8_t*
和 char*
之间自由转换,并且一切都会正常进行。
但是,您不能在 int*
和 uint8_t*
之间进行转换,因为基本类型的大小不同。
我的建议是这样写:
void putcchar(uint8_t c) {
ti_uart_write_buffer(TI_UART_0, &c, 1);
}
然后直接调用:
int l = getch();
putcchar(l);
请注意 getch()
返回一个 int
而不是 char
只是为了能够返回 EOF
,因此转换为 char
将是安全的除非它是 EOF
。您可能需要添加:
int l = getch();
if (l == EOF) break;
putcchar(l);
只要您将 char/uint8_t
值视为二进制字节或 ASCII 字符,情况就是如此。如果您碰巧有非 ASCII 字符(例如 'é'
),那么您需要考虑字符编码。
PS:我假设您的程序使用的是普通架构,即字节长 8 位,字符编码基于 ASCII。由于您使用的是 Putty,您可能使用的是 MS-Windows,所以我在这里很安全。
关于c - 我是否需要将 ascii 转换为 uint8_t 以通过 uart(腻子)写入和显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35313491/