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

embedded/2025/3/14 13:45:38/

请添加图片描述

文章目录

  • 摘要


摘要

在一些可以不使用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.ppmy.cn/embedded/172502.html

相关文章

【Java 基础(人话版)】JDK 与 JRE

JDK 与 JRE&#xff1a;你真的了解它们的区别吗&#xff1f; 在 Java 开发的世界里&#xff0c;我们经常会听到 JDK&#xff08;Java Development Kit&#xff09; 和 JRE&#xff08;Java Runtime Environment&#xff09; 这两个名词。很多初学者甚至部分开发者&#xff0c;…

CSS 知识点总结1

CSS 知识点总结&#xff11; 今天写了两个页面,用到的知识点,总结一下 1. Flexbox 布局 display: flex;&#xff1a;启用 Flexbox 布局&#xff0c;用于创建灵活的容器。flex-direction: column;&#xff1a;将子元素垂直排列。justify-content&#xff1a;控制子元素在主轴…

windows第十二章 MFC控件常用消息

文章目录 控件反射消息机制文本框控件EN_CHANGE消息EN_UPDATE消息EN_SETFOCUS消息EN_KILLFOCUS消息EN_MAXTEXT消息EN_ERRSPACE消息EN_HSCROLL消息 按钮控件BN_CLICKED消息BN_DOUBLECLICKED消息BN_SETFOCUS消息BN_KILLFOCUS消息 单选按钮BN_CLICKED 消息 复选框BN_CLICKEDBN_DOU…

《Transformer如何进行图像分类:从新手到入门》

引言 如果你对人工智能&#xff08;AI&#xff09;或深度学习&#xff08;Deep Learning&#xff09;感兴趣&#xff0c;可能听说过“Transformer”这个词。它最初在自然语言处理&#xff08;NLP&#xff09;领域大放异彩&#xff0c;比如在翻译、聊天机器人和文本生成中表现出…

大语言模型(一) 初识大模型

课程讲解视频&#xff1a;《大语言模型》1.1 语言模型发展历程 开源学习网站&#xff1a;https://www.datawhale.cn/learn/content/107/3267 语言模型的发展历程 大模型技术基础 GPT和DeepSeek模型介绍

完美解决ElementUI中树形结构table勾选问题

完美解决ElementUI中树形结构table勾选问题 实现功能效果图全选取消全选取消父节点取消某个子节点 关键代码 实现功能 1. 全选/取消全选&#xff0c;更新所有节点勾选状态 2. 勾选父/子节点&#xff0c;子/父节点状态和全选框状态更新 效果图 全选 取消全选 取消父节点 取消某…

通义万相 2.1 × 蓝耘智算:AIGC 界的「黄金搭档」如何重塑创作未来?

我的个人主页 我的专栏&#xff1a; 人工智能领域、java-数据结构、Javase、C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01; 点赞&#x1f44d;收藏❤ 引言 在当今数字化浪潮席卷的时代&#xff0c;AIGC&#xff08;生成式人工智能&#xff09;领域正…

医院本地化DeepSeek R1对接混合数据库技术实战方案研讨

1. 引言 Deep SEEK R1是一个医疗智能化平台,通过本地化部署实现数据的安全性和可控性,同时提供高效的计算能力。随着医疗信息化的迅速发展,各种数据源的增加使得医院面临更多复杂的挑战,包括如何处理实时监测数据、如何进行大数据环境下的复杂查询以及如何整合多模态数据等…