文章目录

  • 1 系统日志方案
  • 1.1 背景
  • 1.2 产品需求
  • 1.3 实现方案
  • 1.4 技术路径
  • 2 从SD卡到Flash启动方案
  • 3 提高程序执行效率 60%
  • 4 调试手段
  • 4.1 syslog日志
  • 4.2 内存日志
  • 5 状态机


1 系统日志方案

1.1 背景

为了更好对产品量产后,进行产品使用场景、生命周期、故障诊断、返厂维修进行大数据分析,我们需要针对自己的产品打造系统日志系统。

1.2 产品需求

根据不同的系统需求,定义系统日志需要记录的内容。

系统日志

日志说明

日志格式

分配空间

备注

系统运行总时间

全生命周期

小时+分钟


记录全生命周期产品工作时长,结合温度分析产品在不同场景下使用寿命

系统上电次数

全生命周期

次数


记录全生命周期产品上电次数

开关机事件

全生命周期

次数


记录事件发生的时间

关键器件温度

全生命周期

按温度档位记录 :[-40, 0), [0, 20), [20, 50),[50, 85]


通过分析关键器件温度,分析温度对产品使用寿命的影响

外部操作指令统计

记录最近xx条即可



产品运行过程中,产生任何异常,都可以通过回溯指令,获取当时产品运行的状态

系统打印日志

启动后关键参数打印,开机LOGO,次数,时间



产品bug调试方便定位

1.3 实现方案

存储位置

优缺点

失效风险

解决方案

备注

DDR

空间大、读写速度快

掉电丢失



Flash

空间大、读写速度快、掉电不丢失、擦写寿命10w级别

写或擦除时掉电风险

硬件缓掉电,双备份存储,交叉写入


eeprom

空间小、读写速度快、掉电不丢失、擦写寿命长百万级别

写时掉电风险

备份电池缓下电;采用ADC来检测掉电电压低于某个值时操作EEPROM;采用CMP+和CMP-来做比较电压中断,然后操作EEPROM.


在没有硬件做辅助缓下电解决方案,从软件角度无法完全解决此掉电问题,采用flash交叉备份写入比较,可降低擦写时掉电风险值。

1.4 技术路径

1.zlog 日志自带年月日时分秒

2.syslog 系统自带日志系统 月日时分秒3.内存日志,malloc开辟空间,sprintf写数据,客户端通过TCP获取。

2 从SD卡到Flash启动方案

技术方案 系统架构 怎么写_生命周期

3 提高程序执行效率 60%

Eclipse debug 编译程序,执行算法耗时90ms,经过 -O3 优化 执行算法耗时可降低到30ms,优化简直了。File --> properties --> C/C++ build --> setting --> tools setting --> optimization --> O3

4 调试手段

系统日志与内存日志的时间效率比对

4.1 syslog日志

#include <syslog.h>

for(int i = 0; i <1000; i++){
   syslog(LOG_USER|LOG_DEBUG, "syslog test:%d\n", i);
}

查看日志:cat /var/log/syslog执行时间:524339us

4.2 内存日志

char buffer[4*1024*1024] = {};

for(int i = 0; i <1000; i++){
   sprintf(buffer, "memlog test:%d\n", i);
}

执行时间:567us执行效率有着数量级别的提升。

5 状态机

技术方案 系统架构 怎么写_生命周期_02


技术方案 系统架构 怎么写_系统日志_03

  • 软件状态机模式定义
    Init/ Factory/Engineer/OTA/SelfTest/Active/Error/ShutDown/Standby/FuSa Safety