提供以下功能
UART_write(UART_Handle handle, const void *buffer, size_t size);
我想通过uart发送一个int8_t值(记录它)
我尝试过的事情:
int8_t value;
UART_write(uart, value, strlen(value));
const char *echoPrompt = (char *)value;
UART_write(uart, echoPrompt, sizeof(echoPrompt));
const char echoPrompt2[] = {value};
UART_write(uart, echoPrompt2, sizeof(echoPrompt2));
const char* buff = value;
UART_write(uart, value, strlen(value));
我得到的最好结果是记录十六进制值
uart_write函数的工作方式示例:为了记录“ 12”,我需要做的是
const uint8_t value[] = {0x31, 0x32};
UART_write(uart, value, sizeof(value));
所以我的问题是,如何记录我的int8_t变量(我也需要记录负数)
答案 0 :(得分:3)
您需要将整数转换为字符串。
snprintf
是执行此操作的标准方法(如果您的libc提供了此功能)。
答案 1 :(得分:0)
将uint8_t转换为ascii字符串C
确定该类型的任何值所需的最大字符串大小。 Is there a better way to size a buffer for printing integers?
#define UINT_BUFFER10_SIZE(type) (1 + (CHAR_BIT*sizeof(type)*LOG10_2_N)/LOG10_2_D + 1)
形成缓冲区
char buf[UINT_BUFFER10_SIZE(value)];
将uint8_t
“打印”到缓冲区。
int len = sprintf(buf, "%d", value);
// or pedantically
int len = snprintf(buf, sizeof buf, "%" PRId8, value); // see <inttypes.h>
assert(len >= 0 && (unsigned)len < sizeof buf);
发送
UART_write(uart, buf, len);
如何记录我的int8_t变量
#define INT_BUFFER10_SIZE(type) (2 + ((CHAR_BIT*sizeof(type)-1)*LOG10_2_N)/LOG10_2_D + 1)
char buf[INT_BUFFER10_SIZE(ivalue)];
int len = sprintf(buf, "%d", ivalue);
UART_write(uart, buf, len);
IMO,代码应添加一个辅助函数以发送 string
void UART_write_str(UART_Handle handle, const char *str) {
UART_write(uart, str, strlen(str));
}