目前,我正在向 UART 发送我想要记录的字符串,并使用任何终端在主机上读取它。
为了减少记录时间并希望减少图像大小(我的闪存很小),我发现嵌入式系统中未使用这些字符串,那么为什么将它们存储在闪存上?
我想实现一个服务器,我可以向其发送任何字符串的散列 key (例如 - 它的 ROM 地址),并且该字符串将输出到文件或屏幕。
我的问题是:
- 如何从图像文件创建key2string转换器(操作系统是CMX,但可以一般回答)
- 是否有推荐的方法来生成图像,该方法可以知道字符串地址,但会将它们从 ROM 中排除?
- 是否有已知的通用(开源或其他)实现了类似的记录器?
谢谢
最佳答案
我建议采用以下方法,而不是保存硬编码字符串,然后尝试对答案进行哈希处理并通过 UART 发送,然后以某种方式从结果图像中删除字符串。
只需发送错误代码的索引。 PC 端可以查找该索引并确定该条件的字符串。如果想让设备代码更清晰,索引可以是枚举。
例如:
enum errorStrings
{
ES_valueOutOfLimits = 1,
ES_wowItsGettingWarm = 2,
ES_randomError = 3,
ES_passwordFailure = 4
};
因此,如果您通过 printf
向 UART 发送数据,您可以执行以下操作:
printf("%d\n",(int)ES_wowItsGettingWarm);
然后,您的 PC 软件只需将 UART 收到的“2”解码回有用的字符串“哇,天气变热了。”
这可以保持固件较小,但您需要手动保持包含枚举的文件和带有字符串的文件同步。
关于c - 用于嵌入式应用程序的基于哈希的记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17773394/