C 嵌入式系统中的事件日志
通常,在运行RTOS的SBC中,将数据/事件日志写入外部介质(如SD卡)是一项简单的任务。然而,在使用微控制器的嵌入式系统中,例如PIC微芯片,数据/程序内存有限。虽然有些芯片组支持外部介质,但假设它不支持,那么如何登录MCU呢C 嵌入式系统中的事件日志,c,logging,embedded,microcontroller,C,Logging,Embedded,Microcontroller,通常,在运行RTOS的SBC中,将数据/事件日志写入外部介质(如SD卡)是一项简单的任务。然而,在使用微控制器的嵌入式系统中,例如PIC微芯片,数据/程序内存有限。虽然有些芯片组支持外部介质,但假设它不支持,那么如何登录MCU呢 我能想到的唯一可行的方法是将其写入MCU的EEPROM,但这可行吗?如果可以做到这一点,人们将如何书写和阅读 可以对任何存储设备(包括SD卡)执行日志记录(假设相关硬件外围设备可用)。如果有一个外部设备连接在串行端口上,您可以向其写入数据 通常,事件日志记录仅在例外情况
我能想到的唯一可行的方法是将其写入MCU的EEPROM,但这可行吗?如果可以做到这一点,人们将如何书写和阅读 可以对任何存储设备(包括SD卡)执行日志记录(假设相关硬件外围设备可用)。如果有一个外部设备连接在串行端口上,您可以向其写入数据 通常,事件日志记录仅在例外情况下进行。写入EEPROM或闪存(对于较新的设备)的速度相对较慢,会消耗电源,并且会占用有限的资源(空间和擦除周期)
对于调试,使用串行端口(或Cortex-M3上的SWO端口)是很常见的。您可以实现一个日志记录功能,每次记录事件时只需将一个字节写入数组。然后可以检索日志列表并将其转换为人类可读的事件列表。这种方法的优点是对实时应用程序的干扰较小
我将此方法用于一个应用程序,其中在1-2分钟的测试会话中生成100-200个事件。然后通过串行端口下载列表,并使用一个小Python脚本进行分析。根据您的数据需要,您可以选择SPI闪存或I²C EEPROM I2C EEPROM在存储方面更小,但其接口在大多数微控制器中都可用(如果没有,则在具有常规IO引脚的软件中相对容易实现),而且速度要慢得多(主要是因为I2C总线限制在1Mhz)。它很容易在容量和8DIP包装
SPI闪存速度更快,密度更高,而且通常更便宜,因此,如果您需要快速写入,老实说,需要更好的技术,您可以使用。通常会将数据输出到UART并捕获,或者在TeraTerm(或超级终端,如果必须的话)等终端仿真器中显示数据 如果您实施环形缓冲区和ISR来为UART提供数据,则只要您在持续时间内不超过端口的数据吞吐量能力,对系统的运行时行为的影响将是最小的。与写入EEPROM或闪存相比,UART具有更低的系统影响和更大的确定性,尤其是在UART具有FIFO或DMA功能的情况下,虽然带宽可能有限,但它具有几乎无限容量的优势
您的芯片可能具有片上调试功能,可以与具有任意调试输出或半托管功能的主机调试器耦合。这将对运行时产生最小的影响。我忘了提到系统可能会在白天运行,并且只能在夜间进行维护。我想有一种东西是可以移动和拆卸的,这样它就可以被连接起来了?是的。由于您有“非开发人员日志记录”,并且根据您的硬件要求,您可能需要删除某些内容。SD卡工作正常(您只需要一个SPI端口),从技术上讲,您不需要FAT文件系统库(如果您愿意读取原始字节)。您还可以看看这种类型的非易失性内存: