当前位置: 首页 > article >正文

STM32上实现简化版的AUTOSAR DEM模块

请添加图片描述

文章目录

  • 摘要


摘要

在一些可以不使用AUTOSAR的项目中,往往也有故障检测和DTC存储的需求,开发一套类似于AUTOSAR DEM模块的软件代码,能够满足DTC的检出和存储,使用FalshDB代替Nvm模块,轻松构建持久化存储,如果你也有这样的需求,请阅读本篇,希望能够帮到你。


/**
  ******************************************************************************
  * @file    dem.c
  * @brief   DEM模块实现 - 基于FlashDB的故障管理
  * @note    支持功能:
  *           - DTC状态管理(当前/历史故障)
  *           - 故障计数器
  *           - 快照功能
  *           - FlashDB持久化存储
  ******************************************************************************
  */
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include "fdb.h"
#include "stm32f4xx_hal.h"

/* 配置区 - 根据实际硬件调整 -------------------------------------------------*/
#define DEM_DB_NAME              "dem_db"        // 数据库名称
#define DEM_MAX_DTC_ENTRIES      50              // 最大DTC条目数
#define DEM_CURRENT_THRESHOLD    3               // 当前故障确认阈值
#define DEM_HISTORY_MAX_COUNT    0xFF            // 历史故障最大计数

/* 宏定义 --------------------------------------------------------------------*/
#define DTC_STATUS_CURRENT       (0x01U)         // 当前故障状态位
#define DTC_STATUS_HISTORY       (0x02U)         // 历史故障状态位
#define DEM_SNAPSHOT_MAGIC       (0xDEADC0DE)    // 快照数据魔数

/* 类型定义 ------------------------------------------------------------------*/
#pragma pack(push, 1)  // 严格字节对齐
/**
  * @brief  DTC条目存储结构
  */
typedef struct {
   
    uint32_t dtc_code;           // DTC编码 (SAE标准格式)
    uint8_t status;              // 状态位
    uint16_t current_counter;    // 当前故障计数器
    uint16_t history_counter;    // 历史故障计数器
    uint32_t first_occurrence;   // 首次发生时间戳
    uint32_t last_occurrence;    // 最后发生时间戳
} DTC_Entry;

/**
  * @brief  快照数据结构
  */
typedef struct {
   
    uint32_t magic;             // 魔数校验
    uint32_t timestamp;         // 快照时间戳
    uint16_t dtc_count;         // 有效DTC数量
    DTC_Entry entries[];        // DTC条目数组
} DEM_Snapshot;
#pragma pack(pop)

/* 模块全局变量 --------------------------------------------------------------*/
static struct fdb_kvdb dem_kvdb;            // FlashDB实例
static DTC_Entry dtc_list[DEM_MAX_DTC_ENTRIES];

http://www.kler.cn/a/588822.html

相关文章:

  • C++:类和对象(从底层编译开始)详解[前篇]
  • CF 230B. T-primes
  • zend server试用分析
  • C++程序设计语言笔记——抽象机制:运算符重载
  • 电机控制常见面试问题(十)
  • SpringBoot入门-(1) Maven【概念+流程】
  • 【设计模式】通过访问者模式实现分离算法与对象结构
  • 串口全解析
  • Python库安装报错解决思路以及机器学习环境配置详细方案
  • Nacos命名空间Namespace:微服务多环境管理的“秘密武器”如何用?
  • Flutter中的const和final的区别
  • k8s集群----helm部署wordpress
  • chatgpt的一些prompt技巧
  • 【人工智能基础2】机器学习、深度学习总结
  • 2、操作系统之软件基础
  • VSCode 自动格式化:ESLint 与 Prettier
  • 5G时代新基建:边缘节点如何将云计算响应速度提升300%“
  • Element Plus开发实战指南:快速上手Vue 3企业级组件库
  • 使用kubeadm方式以及使用第三方工具sealos搭建K8S集群
  • 【Quest开发】手柄交互震动