【发布时间】:2016-01-19 06:18:38
【问题描述】:
我的项目使用了一种日志记录机制,它基本上是在我的每个组件中调用一个宏。
宏的后面是一个函数调用,用于使用像 UART 这样的慢线写入日志。
例子:
LOG("An error has occurred. Please check XYZ. Code: %d", errorcode)
我不想将整个文本写入 UART,而是想像这样替换每次出现的 LOG:
LOG("12345 %d", errorcode)
对 LOG 的每次调用都必须替换为简短版本,其中文本替换为唯一编号。动态部分不得更换。唯一编号到原始文本的映射必须放在一个文件中。 像这样的:
12345:"An error has occurred. Please check XYZ. Code:"
在 UART 的另一端,日志阅读器必须读取此映射文件以使其可读。
优点是这对于低带宽来说是完美的。
我的问题: 在编译我的代码时如何做到这一点?我正在使用 gcc 并在 Linux 环境中工作。 我假设预处理器必须处理这个。还是某种预脚本? 或者有没有更好的方法来做到这一点?
【问题讨论】:
-
我不清楚。你有向UART写字符的功能还是你在找什么?
-
不,UART 部分正在工作。我只需要知道如何进行上述替换,以减少通过 UART 传输的数据。
-
好像不是编程问题,而是文本编辑器文本替换问题?只需浏览代码并更改所有消息。另外,如果您关心带宽,为什么要将数据作为 ASCII 中的一些秘密无意义数字发送?如果人类无论如何都无法理解它,请将其作为原始二进制文件发送。两个整数 = 4 或 8 个字节,而不是字符串需要的 10+ 个字节。
-
我只想在编译过程中进行替换。必须保留原始呼叫。我不能只使用文本编辑器进行替换。我会考虑以原始二进制模式发送它。这样会更有效率。
标签: c gcc logging c-preprocessor uart