c - 用于嵌入式应用程序的基于哈希的记录器

标签 c logging hash embedded

目前,我正在向 UART 发送我想要记录的字符串,并使用任何终端在主机上读取它。

为了减少记录时间并希望减少图像大小(我的闪存很小),我发现嵌入式系统中未使用这些字符串,那么为什么将它们存储在闪存上?

我想实现一个服务器,我可以向其发送任何字符串的散列 key (例如 - 它的 ROM 地址),并且该字符串将输出到文件或屏幕。

我的问题是:

  1. 如何从图像文件创建key2string转换器(操作系统是CMX,但可以一般回答)
  2. 是否有推荐的方法来生成图像,该方法可以知道字符串地址,但会将它们从 ROM 中排除?
  3. 是否有已知的通用(开源或其他)实现了类似的记录器?

谢谢

最佳答案

我建议采用以下方法,而不是保存硬编码字符串,然后尝试对答案进行哈希处理并通过 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/

相关文章:

java - Java中如何计算文件的哈希值?

c - 为什么复制后数组指针不指向数组的开头

python日志查看应用

java - Log4j 解析错误在 SMTPAppender 上添加 triggeringPolicy

java - HashMap 的用户定义键类

c - 如何从磁盘来回保存和加载一个巨大的哈希表?

c - dlopen() 搜索路径

C - 传递给函数的指针不保留指定的字符串

c - 为什么sctp_inet_listen的第一个参数是struct socket*而不是int

python - 子进程 stdout/stderr 到有限大小的日志文件