嵌入式系统中的事件记录

时间:2011-08-11 06:46:04

标签: c logging embedded microcontroller

通常,在运行RTOS的SBC中,将数据/事件日志写入SD卡等外部媒体是一件容易的事。但是,在使用微控制器的嵌入式系统中,例如PIC芯片,数据/程序存储器有限。虽然有些芯片组支持外部媒体,但假设没有,那么如何登录MCU呢?

我能想到的唯一可行方法是将其写入MCU的EEPROM,但这是否可行?如果可以这样做,那么如何写和读?

4 个答案:

答案 0 :(得分:3)

可以对任何存储设备,包括的SD卡执行记录(假设相关的硬件外围设备可用)。如果通过串行端口连接了外部设备,则可以向其写入数据。

通常,事件记录仅在特殊情况下完成。写入EEPROM或闪存(对于较新的器件)相对较慢,消耗功率,并耗尽有限的资源(空间和擦除周期)。

对于调试,使用串行端口(或Cortex-M3上的SWO端口)很常见。

答案 1 :(得分:2)

您可以实现一个日志记录工具,只需在每次要记录事件时将字节写入数组。然后可以检索日志列表并将其转换为人类可读的事件列表。这种方法的好处是可以减少对实时应用程序的干扰。

我将此方法用于在1-2分钟的测试会话中生成100-200个事件的应用程序。然后通过串口下载该列表,并使用一些Python脚本进行分析。

答案 2 :(得分:1)

根据您的数据需求,您可以选择SPI闪存或I²CEEPROM。

I2C EEPROMS在存储方面较小,但其接口在大多数微控制器中都可用(如果不是,在使用常规IO引脚的软件中相对容易)并且速度慢得多(主要是因为I2C总线)限制在1Mhz)。容量find them up to 1mbit和8DIP包装很容易。

SPI闪存更快,密度更高,而且通常更便宜,所以如果你需要快速写入,说实话,更好的技术should go for them

答案 3 :(得分:1)

通常会将数据输出到UART并捕获,或者将其显示在终端仿真器中,例如TeraTerm(如果必须,则显示在HyperTerminal中)。

如果您实施了一个环形缓冲区和ISR来为UART供电,只要您在持续时间内不超过该端口的数据吞吐量能力,对系统的运行时行为的影响最小。与写入EEPROM或闪存相比,它具有更低的系统影响并且更具确定性,特别是如果UART具有FIFO或DMA功能,并且带宽可能受限,则它具有实际上无限容量的优势。

您的芯片可能具有片上调试功能,可以与具有任意调试输出或半主机功能的主机调试器耦合。这对运行时影响最小。