Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 嵌入式系统中日志字符串的最小化_Logging_Embedded_Printf_Uart - Fatal编程技术网

Logging 嵌入式系统中日志字符串的最小化

Logging 嵌入式系统中日志字符串的最小化,logging,embedded,printf,uart,Logging,Embedded,Printf,Uart,我想减少从日志字符串在UART上发送的字节数。其思想是用索引号替换所有日志的静态字符串,日志模块将只发送字符串索引号和参数。从那里,PC上的应用程序(通过UART连接)使用包含所有日志字符串及其索引的文件将创建正确的字符串并打印它 我该怎么做?您要做的是将日志字符串转换为令牌。您必须创建一个将字符串/字符串部分转换为标记的字典,并且发送方和接收方必须拥有该字典。发送字符串时,请定义一个转义字符,后跟一个标记,并确保此转义代码不在正常日志字符串中 在sender中,在发送字典中的字符串部分之前,必

我想减少从日志字符串在UART上发送的字节数。其思想是用索引号替换所有日志的静态字符串,日志模块将只发送字符串索引号和参数。从那里,PC上的应用程序(通过UART连接)使用包含所有日志字符串及其索引的文件将创建正确的字符串并打印它


我该怎么做?

您要做的是将日志字符串转换为令牌。您必须创建一个将字符串/字符串部分转换为标记的字典,并且发送方和接收方必须拥有该字典。发送字符串时,请定义一个转义字符,后跟一个标记,并确保此转义代码不在正常日志字符串中

在sender中,在发送字典中的字符串部分之前,必须先扫描字符串,然后只发送转义码和令牌。在字典中找不到的所有内容都会正常传输

在接收器端,您可以使用相同的字典简单地对其进行解码


顺便说一下:这是(非常简单的)压缩机的工作方式。您还可以使用LZW压缩器算法,这可能会有更好的结果(但请确保在每次传输后不要清除翻译表!)。

您的嵌入式代码中肯定已经有消息引用,而不是针对每种情况的硬编码字符串文字?如果是这样的话,传递他们的引用不是比传递他们的描述文本更容易吗?但如果没有,则是时候转换代码了,以便使用消息引用而不是实际的消息。然后当代码空间变紧时,您可以将消息文本移动到闪存或存储ROM等。可能的副本您刚刚描述了如何操作-您对自己的解决方案有什么不了解?我不相信LZW压缩在资源有限的MPU上会成功。这取决于MPU和算法的最大字长选择(当然,可用ram的数量对字典很重要)。很久以前,我在C64上实现了一个LZW算法,它成功了。是的,在Commodore 64上。但是很久以前;-)如何以对程序员透明的方式自动创建此词典?这取决于您使用的MCU、可用内存和要发送的字符串类型。通常有两种不同的方法:从源代码生成的静态字典(在使用提取字符串并生成源代码文件本身的简单解析器编译之前),以及在发送时生成的动态字典(在这种情况下,字典是在RAM中构建的,您的日志协议必须包含一个定义新字典条目的命令,以便接收方可以构建相同的字典)。