我正在为固件原型编写可重用的日志记录模块。我有一个记录器api,它有一个包装函数void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
在此包装函数中,将调用特定于系统的写入函数。可以是UART,也可以是显示驱动程序......
所有系统写入/发送功能都需要以消息的字节长度为单位。我的包装函数只获取它应该发送的消息的char *。例如,请参阅此处,我的包装器调用系统UART传输函数:
void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
{
UARTDRV_Transmit(handle, char * msg, int msglen);
}
如何获取任何消息的长度,以便我可以将其正确传递给基础传输函数?
我不想使用大型图书馆,因为我在uC上并希望节省空间。
答案 0 :(得分:5)
解决问题的不同方法:
void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
{
UARTDRV_Transmit(handle, msg, strlen(msg));
}
或循环遍历c-string直到null终结符
void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
{
while (*msg != '\0')
UARTDRV_Transmit(handle, msg++, 1);
}
或者计算msg
长度而不strlen
组合上面的解决方案
void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
{
int msg_length = 0;
while (*msg++ != '\0')
msg_length++;
if (msg_length > 0)
UARTDRV_Transmit(handle, msg, msg_length);
}