AUTOSAR OCU驱动程序详解

AUTOSAR标准输出比较单元驱动程序架构与实现分析

目录

  • 1. 概述
    • 1.1 OCU驱动程序简介
    • 1.2 功能概述
  • 2. OCU驱动程序架构
    • 2.1 架构图
    • 2.2 层次结构
  • 3. OCU驱动程序组件设计
    • 3.1 组件图
    • 3.2 接口定义
  • 4. OCU驱动程序状态管理
    • 4.1 状态图
    • 4.2 状态转换
  • 5. OCU驱动程序数据结构
    • 5.1 配置类图
    • 5.2 数据类型定义
  • 6. OCU驱动程序使用流程
    • 6.1 序列图
    • 6.2 调用流程
  • 7. 总结

1. 概述

1.1 OCU驱动程序简介

OCU(Output Compare Unit,输出比较单元)驱动程序是AUTOSAR标准中MCAL(微控制器抽象层)的一部分,提供了对微控制器中输出比较单元的抽象接口。OCU驱动程序使上层软件能够使用标准化的API访问硬件输出比较功能,无需关心具体的硬件细节。

1.2 功能概述

根据AUTOSAR规范文档,OCU驱动程序提供以下核心功能:

  • 比较值控制:允许设置绝对或相对阈值,与自由运行计数器进行比较
  • 通道管理:支持启动和停止OCU通道,控制计数器运行
  • 通知机制:在计数器值等于阈值时提供通知回调
  • 引脚控制:管理输出引脚状态,配置比较匹配时的动作
  • 计数器读取:提供读取自由运行计数器当前值的接口

OCU通道由自由运行计数器、比较阈值和比较匹配动作组成。当计数器值等于阈值时,会执行配置的比较匹配动作,如修改输出引脚状态或触发通知回调。


2. OCU驱动程序架构

2.1 架构图

下图展示了OCU驱动程序在AUTOSAR架构中的位置和与其他模块的关系:

在这里插入图片描述

2.2 层次结构

根据架构图和源文档,OCU驱动程序位于AUTOSAR架构的MCAL层,其层次结构如下:

应用层

  • 应用软件组件:实现特定的应用功能,通过RTE使用OCU驱动提供的服务。

RTE层

  • 运行时环境:连接应用层和基础软件层,提供标准化的通信机制。

BSW层

  • ECU抽象层:对BSW功能提供抽象接口,屏蔽硬件细节。
  • MCAL层:包含OCU驱动程序,直接与硬件交互。
    • OCU驱动程序:提供对OCU硬件的访问接口。
    • 其他MCAL模块:如DIO、PORT等,与OCU驱动协作。
  • 服务层:提供系统服务,用于配置和初始化模块。

硬件层

  • MCU硬件:微控制器硬件平台。
  • OCU硬件单元:实现计数器、比较器和输出功能的硬件单元。

OCU驱动程序的关键职责包括:

  • 初始化和配置OCU通道
  • 启动/停止通道
  • 设置阈值和读取计数器值
  • 配置输出引脚行为
  • 通知上层应用比较匹配事件

OCU硬件单元的功能包括:

  • 自由运行计数器
  • 比较阈值
  • 比较匹配动作
  • 输出引脚控制

3. OCU驱动程序组件设计

3.1 组件图

以下组件图展示了OCU驱动程序的内部结构和接口设计:

在这里插入图片描述

3.2 接口定义

OCU驱动程序包含以下主要功能模块和接口:

初始化模块

  • Ocu_Init:初始化OCU驱动程序,设置硬件寄存器和内部数据结构。
  • Ocu_DeInit:反初始化OCU驱动程序,复位硬件和内部状态。

通道控制模块

  • Ocu_StartChannel:启动指定的OCU通道,允许计数器运行。
  • Ocu_StopChannel:停止指定的OCU通道,禁止计数器运行。
  • Ocu_SetPinState:设置通道关联的输出引脚状态(高/低电平)。
  • Ocu_SetPinAction:配置比较匹配时输出引脚的动作(置高/置低/翻转/禁用)。

通知管理模块

  • Ocu_EnableNotification:启用指定通道的比较匹配通知回调。
  • Ocu_DisableNotification:禁用指定通道的比较匹配通知回调。
  • 通知处理:内部组件,负责处理比较匹配事件并调用回调函数。

计数器管理模块

  • Ocu_GetCounter:读取指定通道计数器的当前值。
  • Ocu_SetAbsoluteThreshold:设置绝对比较阈值。
  • Ocu_SetRelativeThreshold:设置相对比较阈值(相对于当前计数器值或当前阈值)。

配置管理模块

  • 通道配置:管理OCU通道的配置数据。
  • 静态配置:存储来自配置工具的静态配置参数。

这些接口符合AUTOSAR标准,提供了对OCU硬件功能的完整访问。配置参数包括通道ID、计数器最大值、计数器频率/分辨率、默认阈值、通知函数、输出引脚配置和硬件通道分配等。

根据源文档中的SRS_Ocu_00006,OCU驱动程序提供当计数器值等于阈值时的通知功能。通知仅在以下条件满足时触发:

  • 通知功能已配置(非空指针)
  • 通知功能已启用

根据SRS_Ocu_00012,OCU驱动程序还提供设置比较匹配时引脚动作的功能,可能的动作值包括OCU_HIGH、OCU_LOW、OCU_TOGGLE和OCU_DISABLE。


4. OCU驱动程序状态管理

4.1 状态图

下图展示了OCU驱动程序通道的状态转换:

在这里插入图片描述

4.2 状态转换

OCU驱动程序使用状态机管理其生命周期和功能状态。主要状态和转换包括:

未初始化状态 (UNINIT)

  • 驱动程序尚未初始化,无法使用任何功能。
  • 通过调用Ocu_Init()函数转换到初始化完成状态。

初始化完成状态 (INITIALIZED)

  • 驱动程序已初始化,可以使用其功能。
  • 通过调用Ocu_DeInit()函数返回到未初始化状态。
  • 初始化后的特点:
    • 所有通道处于停止状态
    • 所有通知被禁用
    • 输出引脚设置为默认状态

在初始化完成状态下,通道和通知有各自的子状态:

通道子状态

  • 通道停止状态 (IDLE):通道未运行,不会触发比较匹配。
    • 通过调用Ocu_StartChannel()转换到通道运行状态。
  • 通道运行状态 (RUNNING):通道正在运行,可以触发比较匹配。
    • 通过调用Ocu_StopChannel()返回到通道停止状态。
    • 在此状态下可以:
      • 读取计数器值 (Ocu_GetCounter)
      • 设置阈值 (Ocu_SetAbsoluteThreshold/Ocu_SetRelativeThreshold)
      • 设置引脚状态 (Ocu_SetPinState)
      • 设置比较匹配动作 (Ocu_SetPinAction)

通知子状态

  • 通知关闭状态 (NOTIFICATION_DISABLED):不会触发通知回调。
    • 通过调用Ocu_EnableNotification()转换到通知开启状态。
  • 通知开启状态 (NOTIFICATION_ENABLED):可以触发通知回调。
    • 通过调用Ocu_DisableNotification()返回到通知关闭状态。
    • 当通知开启且通道运行时:
      • 在计数器值等于阈值时
      • 触发配置的通知回调函数

根据源文档的SRS_Ocu_00004,初始化OCU驱动程序后,所有通知都应该被禁用,所有通道都应该被停止。如果通道有关联的输出引脚,该引脚将被设置为配置中定义的默认值。

根据SRS_Ocu_00007,OCU驱动程序允许在运行时启用/禁用通知,以防止调用不需要的通知(中断),并允许在软件执行流中选择何时触发第一个或下一个通知。


5. OCU驱动程序数据结构

5.1 配置类图

下图展示了OCU驱动程序的配置数据结构:

在这里插入图片描述

5.2 数据类型定义

OCU驱动程序定义了以下主要数据类型和结构:

顶层配置结构 (Ocu_ConfigType)

  • 包含所有通道配置的容器结构。
  • 属性:
    • ChannelConfigs:指向通道配置数组的指针。
    • NumberOfChannels:配置的通道数量。

通道配置结构 (Ocu_ChannelConfigType)

  • 定义每个OCU通道的特性。
  • 属性:
    • ChannelId:通道的唯一标识符。
    • CounterMaxValue:计数器的最大值。
    • DefaultThreshold:阈值的默认值。
    • HwChannel:分配的硬件通道。
    • NotificationEnable:通知启用状态。
    • NotificationCallback:通知回调函数。
    • DefaultPinAction:比较匹配时的默认引脚动作。
    • DefaultPinState:输出引脚的默认状态。
    • CountDirection:计数方向(向上/向下)。
    • CountResolution:计数器分辨率。
    • HwSpecificConfig:指向硬件特定配置的指针。

引脚状态类型 (Ocu_PinStateType)

  • 定义输出引脚的可能状态。
  • 值:
    • OCU_LOW:低电平。
    • OCU_HIGH:高电平。

引脚动作类型 (Ocu_PinActionType)

  • 定义比较匹配时的可能引脚动作。
  • 值:
    • OCU_SET_LOW:设置为低电平。
    • OCU_SET_HIGH:设置为高电平。
    • OCU_TOGGLE:翻转当前状态。
    • OCU_DISABLE:禁用动作。

计数方向类型 (Ocu_CountDirectionType)

  • 定义计数器的计数方向。
  • 值:
    • OCU_COUNT_UP:向上计数。
    • OCU_COUNT_DOWN:向下计数。

通知类型 (Ocu_NotifyType)

  • 通知回调函数的类型定义。
  • 当比较匹配发生时调用的函数指针。

硬件特定配置 (Ocu_HwSpecificConfig)

  • 包含MCU特定的配置参数。
  • 属性:
    • ClockSetting:时钟设置。
    • DmaEnable:DMA启用状态。
    • HwResourceId:硬件资源ID。
    • PinSelectionValue:引脚选择值。
    • 其他硬件特定配置:取决于具体MCU。

OCU驱动程序接口定义了以下API函数:

  • Ocu_Init:初始化驱动程序。
  • Ocu_DeInit:反初始化驱动程序。
  • Ocu_StartChannel:启动通道。
  • Ocu_StopChannel:停止通道。
  • Ocu_SetPinState:设置引脚状态。
  • Ocu_SetPinAction:设置比较匹配时的引脚动作。
  • Ocu_GetCounter:获取计数器值。
  • Ocu_SetAbsoluteThreshold:设置绝对阈值。
  • Ocu_SetRelativeThreshold:设置相对阈值。
  • Ocu_EnableNotification:启用通知。
  • Ocu_DisableNotification:禁用通知。

根据源文档的SRS_Ocu_00002,OCU驱动程序支持以下基本静态配置:计数器最大值、计数分辨率/频率、通知函数、阈值默认值、分配的硬件通道、通道符号名/ID、计数方向、输出信号和默认输出电平、硬件资源ID以及硬件触发事件。


6. OCU驱动程序使用流程

6.1 序列图

下图展示了OCU驱动程序的典型使用序列:

在这里插入图片描述

6.2 调用流程

OCU驱动程序的使用流程可以分为以下几个阶段:

初始化阶段

  • 应用软件调用Ocu_Init(配置参数)初始化OCU驱动程序。
  • OCU驱动程序初始化硬件寄存器和内部数据结构。
  • 初始化完成后,所有通道停止,所有通知禁用,输出引脚设置为默认状态。

通道配置阶段

  • 应用软件调用Ocu_SetPinState(通道ID, OCU_HIGH/OCU_LOW)设置输出引脚状态。
  • 应用软件调用Ocu_SetPinAction(通道ID, OCU_SET_HIGH/OCU_SET_LOW/OCU_TOGGLE)配置比较匹配时的引脚动作。
  • 应用软件调用Ocu_SetAbsoluteThreshold(通道ID, 阈值)设置比较阈值。
  • 应用软件调用Ocu_EnableNotification(通道ID)启用通知回调。

通道启动阶段

  • 应用软件调用Ocu_StartChannel(通道ID)启动通道。
  • OCU驱动程序启动计数器。

运行阶段

  • 当计数器值等于阈值时,OCU硬件触发比较匹配事件。
  • OCU驱动程序执行配置的引脚动作并调用通知回调(如果已启用)。
  • 应用软件可以调用Ocu_GetCounter(通道ID)读取当前计数器值。
  • 应用软件可以调用Ocu_SetRelativeThreshold(通道ID, 增量值)设置新的相对阈值。

停止阶段

  • 应用软件调用Ocu_StopChannel(通道ID)停止通道。
  • 应用软件调用Ocu_DisableNotification(通道ID)禁用通知回调。

去初始化阶段

  • 应用软件调用Ocu_DeInit()去初始化OCU驱动程序。
  • OCU驱动程序复位硬件寄存器和内部数据结构。

根据源文档中的各项需求,这个使用流程完全符合AUTOSAR OCU驱动程序的设计规范。

/* OCU驱动程序使用示例 */
#include "Ocu.h"/* 通知回调函数 */
void MyOcuNotification(void)
{/* 处理比较匹配事件 *//* 例如:更新PWM占空比、触发采样等 */
}void ApplicationTask(void)
{Std_ReturnType result;uint8 channelId = OCU_CHANNEL_0;Ocu_ValueType counterValue;/* 1. 初始化OCU驱动程序 */result = Ocu_Init(&OcuConfigData);if (result != E_OK) {/* 处理错误 */return;}/* 2. 配置OCU通道 */Ocu_SetPinState(channelId, OCU_HIGH);Ocu_SetPinAction(channelId, OCU_TOGGLE);Ocu_SetAbsoluteThreshold(channelId, 1000); /* 设置比较阈值为1000 */Ocu_EnableNotification(channelId);         /* 启用通知回调 *//* 3. 启动OCU通道 */result = Ocu_StartChannel(channelId);if (result != E_OK) {/* 处理错误 */return;}/* 4. 运行阶段 *//* ... 应用逻辑 ... *//* 读取当前计数器值 */counterValue = Ocu_GetCounter(channelId);/* 设置新的相对阈值(当前阈值 + 500) */Ocu_SetRelativeThreshold(channelId, 500);/* ... 更多应用逻辑 ... *//* 5. 停止OCU通道 */Ocu_StopChannel(channelId);Ocu_DisableNotification(channelId);/* 6. 去初始化OCU驱动程序 */Ocu_DeInit();
}

7. 总结

AUTOSAR OCU驱动程序提供了对微控制器输出比较单元的标准化访问接口,使上层软件能够以统一的方式使用输出比较功能,而无需关心硬件细节。它的主要特点包括:

  • 标准化接口:符合AUTOSAR标准,提供一致的API。
  • 硬件抽象:屏蔽不同微控制器之间的硬件差异。
  • 灵活配置:支持多种配置选项,适应不同应用需求。
  • 状态管理:提供清晰的状态转换和错误处理。
  • 低资源占用:高效使用系统资源。

OCU驱动程序可用于多种应用场景,包括:

  • 精确定时控制:如PWM生成、脉冲宽度测量等。
  • 事件触发:在特定时刻触发动作或通知。
  • 波形生成:通过控制输出引脚生成特定波形。
  • 传感器接口:配合传感器实现精确计时和测量。

7. 总结

AUTOSAR OCU驱动程序提供了对微控制器输出比较单元的标准化访问接口,使上层软件能够以统一的方式使用输出比较功能,而无需关心硬件细节。它的主要特点包括:

  • 标准化接口:符合AUTOSAR标准,提供一致的API。
  • 硬件抽象:屏蔽不同微控制器之间的硬件差异。
  • 灵活配置:支持多种配置选项,适应不同应用需求。
  • 状态管理:提供清晰的状态转换和错误处理。
  • 低资源占用:高效使用系统资源。

OCU驱动程序可用于多种应用场景,包括:

  • 精确定时控制:如PWM生成、脉冲宽度测量等。
  • 事件触发:在特定时刻触发动作或通知。
  • 波形生成:通过控制输出引脚生成特定波形。
  • 传感器接口:配合传感器实现精确计时和测量。

通过本文对OCU驱动程序架构、组件设计、状态管理、数据结构和使用流程的详细分析,开发者可以更好地理解和使用AUTOSAR OCU驱动程序,为基于AUTOSAR标准的汽车电子系统开发提供支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91002.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91002.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91002.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

InfluxDB 与 HTTP 协议交互进阶(一)

引言 在当今数字化时代,数据处理的高效性和准确性成为了众多领域关注的焦点。InfluxDB 作为一款开源的时序数据库,凭借其高性能、易扩展等特性,在时间序列数据处理中占据了重要地位。而 HTTP 协议作为互联网应用层的核心协议之一&#xff0c…

NAS远程访问新解法:OMV与cpolar的技术协同价值

文章目录前言1. OMV安装Cpolar2. 配置FTP公网地址3. OMV FTP 配置4. OMV FTP远程连接前言 当家庭存储需求突破本地边界时,传统NAS方案往往陷入"连接困境":复杂的端口转发配置、高昂的公网IP成本、以及始终存在的安全顾虑…开源解决方案OMV虽然…

vue 渲染 | 不同类型的元素渲染的方式(vue组件/htmlelement/纯 html)

省流总结&#xff1a;&#xff08;具体实现见下方&#xff09; vue 组件 ——》<component :is组件名> htmlelement 元素 ——》 ref 、★ v-for ref 或是 ★ vue 的 nextTick 纯 html 结构——》v-html 另外&#xff0c;当数据异步加载时&#xff0c;vue3中如何渲…

Charles中文版深度解析,轻松调试API与优化网络请求

在现代软件开发过程中&#xff0c;调试API、捕获HTTP/HTTPS流量以及优化网络性能是开发者不可避免的挑战。特别是在处理复杂的网络请求和验证API接口的数据传输准确性时&#xff0c;开发者需要一款强大且易于使用的工具。Charles抓包工具凭借其功能强大、界面简洁、易于操作的特…

【CF】Codeforces Round 1039 (Div. 2) E1 (二分答案求中位数)

E1. Submedians (Easy Version)题目&#xff1a;思路&#xff1a;经典不过加了点东西对于求中位数&#xff0c;我们必然要想到二分答案&#xff0c;具体的&#xff0c;对于所有大于等于 x 的数我们令其奉献为 1&#xff0c;小于的为 -1&#xff0c;如果存在某段区间的奉献和大于…

ESP32-S3学习笔记<8>:LEDC的应用

ESP32-S3学习笔记&#xff1c;8&#xff1e;&#xff1a;LEDC的应用1. 头文件包含2. LEDC的配置2.1 配置定时器2.1.1 speed_mode/设置速度模式2.1.2 duty_resolution/设置占空比分辨率2.1.3 timer_num/选择定时器2.1.4 freq_hz/设定PWM频率2.1.5 clk_cfg/选择LEDC的外设时钟源2…

网络安全第14集

前言&#xff1a;小迪安全14集&#xff0c;这集重点内容&#xff1a;0、什么是js渗透测试&#xff1f;在javascript中也存在变量和函数&#xff0c;存在可控变量和函数就有可能存在在漏洞&#xff0c;js开发的web应用和php、java开发的区别是&#xff0c;js能看得到的源代码&am…

代码随想录算法训练营第三十三天

LeetCode.62 不同路径 题目链接 不同路径 题解 class Solution {public int uniquePaths(int m, int n) {// dp表示到达ij有多少条路径int[][] dp new int[110][110];dp[1][1] 1;for(int i 0;i<m;i){dp[i][0] 1;}for(int j 0;j<n;j){dp[0][j] 1;}for(int i 1;i…

银行回单OCR识别技术原理

银行回单OCR&#xff08;光学字符识别&#xff09;技术通过结合图像处理、模式识别和自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;将纸质或电子版银行回单中的非结构化文本&#xff08;如账号、金额、日期等&#xff09;转化为结构化数据。以下是其核心原理和关键…

Day22-二叉树的迭代遍历

昨天学习了递归遍历&#xff1a;递归就是一次次的把参数压入栈中&#xff0c;然后返回的时候还是上一次递归保存的参数。今天学习迭代遍历。迭代遍历就是用栈去模拟保存二叉树的节点&#xff0c;然后依次去遍历&#xff0c;只不过要注意栈的后入先出的规则。前序遍历&#xff1…

知识蒸馏 - 通过引入温度参数T调整 Softmax 的输出

知识蒸馏 - 通过引入温度参数T调整 Softmax 的输出 flyfish import torch import torch.nn.functional as F import matplotlib.pyplot as plt import numpy as np# 设置中文字体支持 plt.rcParams["font.family"] [AR PL UMing CN] # Linux plt.rcParams[axes.uni…

Java研学-RabbitMQ(三)

一 消息通信协议 1 AMQP AMQP 是一个开放的、跨语言、跨平台的消息协议标准&#xff0c;用于在分布式系统中传递业务消息。它定义了消息队列的二进制协议格式和交互模型&#xff08;如交换机、队列、绑定等&#xff09;&#xff0c;确保不同语言&#xff08;Java、Python、C#等…

http.client 教程-如何使用 Python 标准库发送 HTTP 请求

http.client 教程-如何使用 Python 标准库发送 HTTP 请求以下是 http.client 模块的详细使用教程&#xff0c;帮助你理解如何使用 Python 标准库发送 HTTP 请求&#xff1a;1. http.client 概述http.client 是 Python 内置的 HTTP 客户端库&#xff0c;提供了底层的 HTTP 协议实…

Android-三种持久化方式详解

持久化技术分为3种&#xff0c;文件&#xff0c;sharedPreferences存储&#xff0c;数据库来存储&#xff1b; 目录 文件存储&#xff1a; 利用SharedPreferences中读取数据 SQLite创建数据库 更新 添加 删除 查找&#xff1a; 文件存储&#xff1a; 文件存储是 Andr…

并发安全之锁机制一

锁机制一 锁机制是计算机系统中解决并发冲突的核心工具&#xff0c;其存在和应用场景源于一个根本问题&#xff1a;当多个执行单元&#xff08;线程、进程、分布式节点&#xff09;同时访问或修改同一份共享资源时&#xff0c;如何保证数据的正确性、一致性和系统可靠性&#x…

结合项目阐述 设计模式:单例、工厂、观察者、代理

原文链接&#xff1a;https://download.csdn.net/blog/column/12433305/133862792#_1613 1、工厂模式应用 C17及之后可编译 /*日志落地模块的实现1.抽象落地基类2.派生子类&#xff08;根据不同落地方向进行派生&#xff09;3.使用工厂模式进行创建与表示的分离 */#ifndef _…

uniapp 更新apk有缓存点不动,卸载安装apk没有问题。android

方式一。pages.json&#xff1a;"globalStyle" : {"navigationBarTextStyle" : "black","navigationBarTitleText" : "uni-app","navigationBarBackgroundColor" : "#F8F8F8","backgroundColor&qu…

HTML响应式SEO公司网站源码

核心优势 100%纯HTML/CSS开发自动适配手机/平板/PC内置SEO优化结构0.5秒极速加载 包含页面 • 首页&#xff08;关键词布局优化版&#xff09; • 服务项目展示页 • 客户案例库 • 新闻资讯系统 • 联系方式&#xff08;带地图API&#xff09; 技术参数 兼容Chrome/Firefo…

Error: llama runner process has terminated: exit status 2

我是i7 12700h ,3080显卡&#xff0c;在 Windows 11 上运行 ollama run deepseek-r1:1.5b 出现 Error: llama runner process has terminated: exit status 2 之前是好用的&#xff0c;后来不知为什么就不好用了。 原因&#xff1a; 检查 Microsoft Visual C Redistributab…

Linux中ssh远程登录原理与配置

SSH连接的五个阶段 1. 版本协商阶段&#xff08;Protocol Version Negotiation&#xff09;目的&#xff1a;协商使用SSH-1或SSH-2协议&#xff08;现代系统默认SSH-2&#xff09;。流程&#xff1a;关键点&#xff1a;若版本不兼容&#xff08;如客户端只支持SSH-1&#xff0c…