Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 嵌入式系统中的事件日志_C_Logging_Embedded_Microcontroller - Fatal编程技术网

C 嵌入式系统中的事件日志

C 嵌入式系统中的事件日志,c,logging,embedded,microcontroller,C,Logging,Embedded,Microcontroller,通常,在运行RTOS的SBC中,将数据/事件日志写入外部介质(如SD卡)是一项简单的任务。然而,在使用微控制器的嵌入式系统中,例如PIC微芯片,数据/程序内存有限。虽然有些芯片组支持外部介质,但假设它不支持,那么如何登录MCU呢 我能想到的唯一可行的方法是将其写入MCU的EEPROM,但这可行吗?如果可以做到这一点,人们将如何书写和阅读 可以对任何存储设备(包括SD卡)执行日志记录(假设相关硬件外围设备可用)。如果有一个外部设备连接在串行端口上,您可以向其写入数据 通常,事件日志记录仅在例外情况

通常,在运行RTOS的SBC中,将数据/事件日志写入外部介质(如SD卡)是一项简单的任务。然而,在使用微控制器的嵌入式系统中,例如PIC微芯片,数据/程序内存有限。虽然有些芯片组支持外部介质,但假设它不支持,那么如何登录MCU呢


我能想到的唯一可行的方法是将其写入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文件系统库(如果您愿意读取原始字节)。您还可以看看这种类型的非易失性内存: