AutoSar标准下ADC的结果访问(Adc_ReadGroup与Adc_GetStreamLastPointer)的异同

系列文章目录

等待更新中…



前言:

看懂此章,阁下已经跨入炼气期第五层了(滑稽)
在这里插入图片描述

1、什么是ADC的结果访问

在Autosar标准中,我们使用标准函数Adc_GetStreamLastPointer与Adc_ReadGroup对AD转换结果进行取值;那么这二者之间有何异同呢

2、ADC访问模式:

1、1 AdcGroupAccessMode----- ADC的Group的访问模式
在ONE-SHOT的转化模式下:
软件触发只能选择SINGLE-ACCESS(单次访问模式)
硬件触发可以选择SINGLE-ACCEESS 或者 STREAMING-ACCESS(线性流访问模式)

在这里插入图片描述

3、AUTOSAR标准配置案例分析

配置案例:(来源Autosr标准4.2.2;搞autosar的不看标准文档等于少条腿;网上博主写的文章大家也都是基于标准来写的)

3.1 Configuration

在这里插入图片描述
group G1中配置两个通道 CH0,CH1 结果指针指向G1_ResultPtr
group G2中配置1个通道 CH2 结果指针指向G2_ResultPtr
group G3中配置1个通道 CH3 结果指针指向G3_ResultPtr

在这里插入图片描述

group G1配置为STREAMING模式 AdcStreamingNumSamples(采样数)为3
group G2配置为STREAMING模式 AdcStreamingNumSamples(采样数)为2
group G1配置为SINGLE模式 此时AdcStreamingNumSamples(采样数)为1
NOTE: SINGLE模式相当于配置STREAMING模式时,把AdcStreamingNumSamples设置为1;

3.2 图形展示结果指针初始化

具体表现:
根据下图可以看出:
G1设置了采样数为3,所以在result buffer中,对同一个通道CH0有三个结果;
G2设置了采样数为2,所以在result buffer中,对同一个通道CH0有两个结果;
G2设置为了SINGLE模式(即采样数为1),所以在result buffer中,对同一个通道CH0有一个结果;
在这里插入图片描述

3.3 使用Adc_GetStreamLastPointer API访问结果:

在这里插入图片描述
Adc_GetStreamLastPointer(Adc_GroupType Group,Adc_ValueGroupType** Ptr To SamplePtr)

Fuc:返回每个通道的有效样本数量,存储在结果缓冲区中。
读取一个指针,指向组结果缓冲区中的某个位置。通过指针位置,可以访问最后一次完成转换轮的所有组通道的结果;(指向的都是最上层的结果,说明这个result buffer应该是一个栈的结构)

3.4 使用Adc_ReadGroup API访问结果:

在这里插入图片描述

Std_ReturnType Adc_ReadGroup(Adc_GroupType Group,Adc_ValueGroupType* DataBufferPtr)
调用Adc_ReadGroup将结果从结果缓冲区 -复制*到可选的读缓冲区

读取所请求组的最后一轮完成转换的组转换结果,并存储从DataBufferPtr地址开始的通道值。组信道值按信道号升序存储(与配置流访问时结果缓冲区的存储布局相反)。

3、Adc_GetStreamLastPointer与Adc_ReadGroup比较:

共同点:
1、函数都将读取请求组的最新可用转换结果;
2、第一个入参相同,都是GroupID

不同点:

  1. 、结果缓冲区的存储布局相反,Adc_ReadGroup的最新转化结果放在下面;而Adc_GetStreamLastPointer的最新转化结果放在上面;
  2. 、第二个入参不同: Adc_GetStreamLastPointer的第二个参数类型PtrToSamplePtr为二级指针,Adc_ReadGroup的第二个参数DataBufferPtr类型为一级指针;
  3. 、需要的结果缓冲区的大小不同:Adc_GetStreamLastPointer采集的有效值的数量为Group中设置的通道数量×设置的AdcStreamingNumSamples(采样数)
    例如:配置了2个通道,设置的采样数为3;那么结果缓冲区的大小至少要能接收超过六个数据,你设置的数组大小必须大于等于6;
  4. 、返回值不同: Adc_GetStreamLastPointer返回每个通道的有效样本数量,存储在结果缓冲区中。
    Adc_ReadGroup返回E_OK(结果可用,并写入数据缓冲区)、E_NOT_OK(没有可用的结果或发生了开发错误)

4、 运用实例:

Adc_GetStreamLastPointer :

uint32 Sample_Num;
uint16 *ResultPtr;
uint16 Adc_Result_array[16];
uint8 status;

Adc_Init(&Adc_ConfigSet);
status = Adc_SetupResultBuffer(Group_0, Adc_Result_array);
if(status == E_OK)
{
Adc_StartGroupConversion(Group_0);
do
{
Sample_Num = Adc_GetStreamLastPointer(Group_0, &ResultPtr);
}while(Sample_Num == 0);
printf("%d\n", ResultPtr[0]);
}else
{
printf("setup result buffer fail");
}
Adc_StopGroupConversion(Group_0);
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AUTOSAR( Automotive Open System Architecture) 是一种汽车电子系统的开放式软件架构。在AUTOSAR架构中,ADC(Analog-to-Digital Converter)被用于将模拟信号转换为数字信号。ADC是汽车电子系统中非常重要的一个模块,用于获取传感器的原始模拟信号并进行数字化处理。 在AUTOSAR中,ADC的数据传输可以通过两种方式进行:ADC软件队列(adc_sw_queue)和ADC硬件队列(adc_hw_queue)。 ADC软件队列(adc_sw_queue)是一种通过软件来实现数据传输的方式。在这种方式下,ADC的数据转换结果将被存储在一个由软件控制的缓冲区中,然后由软件进行处理和分发。这种方式的优点是灵活性高,可以适应不同的需求和应用场景。但是,由于数据的处理和分发都是由软件来完成,因此可能会引入一定的延迟。 ADC硬件队列(adc_hw_queue)是一种通过硬件来实现数据传输的方式。在这种方式下,ADC的数据转换结果将直接通过硬件进行存储和传输,而不需要软件的干预。这种方式的优点是速度快,延迟低,适用于对数据实时性要求较高的应用场景。但是,由于数据的存储和传输都是由硬件来完成,因此相对于软件队列来说,适应性相对较差。 综上所述,ADC软件队列和ADC硬件队列是在AUTOSAR架构中用于实现ADC数据传输的两种方式。根据具体的需求和应用场景,可以选择适合的方式来进行数据传输。 ### 回答2: Autosar ADC_SW_Queue和ADC_HW_Queue是自动驾驶规范(Autosar)中定义的两个队列类型,在汽车电子系统中与模数转换器(ADC)相关。 ADC_SW_Queue(软件队列)是用于存储模数转换器(ADC)软件模块产生的离散化数据的队列。在汽车的控制系统中,ADC将模拟信号转换为数字信号,然后将其发送到ADC_SW_Queue中。这些数据可以是传感器数据或来自其他外部设备的数据。ADC软件模块可以通过读取ADC_SW_Queue中的数据来进行处理和分析。 ADC_HW_Queue(硬件队列)是用于存储模数转换器(ADC)硬件模块产生的数据的队列。ADC硬件模块直接从传感器或其他外部设备中读取模拟信号,并将其转换为数字信号。然后,ADC硬件模块会将这些数字信号存储在ADC_HW_Queue中。这些数据可以被其他硬件模块使用,如控制系统或操作系统。 区别在于,ADC_SW_Queue中的数据是由ADC软件模块产生的,而ADC_HW_Queue中的数据是由ADC硬件模块产生的。通过使用这两个队列类型,可以将不同来源的ADC数据进行隔离和管理,以便进行后续的处理和分析。 在Autosar规范中,ADC_SW_Queue和ADC_HW_Queue的定义和使用方法有详细的说明,以确保其在汽车电子系统中的正确使用和操作。这两个队列类型的使用可以提高系统的模块化性,降低系统的复杂性,并提高系统的可维护性和可复用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值