• 读懂AUTOSAR,之CAN Driver L-PDU发送和“重入问题”


    1. L-PDU发送

    L-PDU传输时,Can模块将L-PDU内容ID和数据长度转换为硬件特定格式(如果需要),并触发传输。

    [SWS_Can_00059] CAN到内存的数据映射定义为首先发送的CAN数据字节为数组元素0,最后发送的CAN数据字节为数组元素7或63(在CAN FD的情况下)。(SRS_SPAL_12063)[SWS_Can_00427] 如果CAN硬件缓冲区内部表示与AUTOSAR定义不同,则Can模块必须为上层提供适应的SDU缓冲区。⌋

    [SWS_Can_00100] 可以配置具有唯一HTH的多个TX硬件对象。 CanIf模块将HTH作为TX请求的参数提供。 有关可能的配置,请参见图7-3。(SRS_Can_01135)

     图7-3:将HTH和HRH分配给硬件对象的示例。HTH和HRH的编号是实现特定的。所选编号仅为示例。

    [SWS_Can_00276] ⌈ Can_Write函数应该将传递给参数PduInfo的swPduHandle存储,直到Can模块调用此请求的CanIf_TxConfirmation,其中swPduHandle作为参数给出。⌋ ()
    SWS_Can_00276的特性用于减少在CanIf模块实现中的搜索时间。
    [SWS_Can_00016] ⌈ Can模块应调用CanIf_TxConfirmation以指示成功传输。它应该由相应HW资源的TX中断服务例程调用,或在轮询模式下在Can_MainFunction_Write内部调用。⌋ (SRS_Can_01051)

    1.1. 优先级反转

    复用传输是必要的,以防止优先级反转(请参见第2.1章)。 
    [SWS_Can_00277] ⌈ Can模块应该允许在预编译时静态配置(ON | OFF)“复用传输”(Multiplexed Transmission)功能。⌋(SRS_Can_01134)
    [SWS_Can_00401] ⌈应该通过一个HTH为多个传输硬件对象(由“CanHwObjectCount”定义)分配一个表示一个传输实体的硬件对象。⌋(SRS_Can_01134)
    [SWS_Can_00402] ⌈Can模块应支持多路传输机制,用于具有以下特征的设备:
     多个传输硬件对象,这些对象被分组到一个传输实体中,可以通过相同的寄存器集进行填充,并且微控制器自主地将L-PDU存储到空闲缓冲区中,或者
     硬件提供了寄存器或函数来识别传输实体内的空闲传输硬件对象。⌋(SRS_Can_01134)

    [SWS_Can_00403] ⌈ Can模块应支持按L-PDU优先级顺序发送L-PDU的设备的多路传输。⌋(SRS_Can_01134)
    注:应避免使用软件仿真优先级处理,因为开销会使多路传输的优势无效。

     图7-4:将HTH和HRH分配给具有多路传输功能的硬件对象的示例。HTH和HRH的编号是实现特定的。所选编号仅为示例。

    1.2. 传输数据的一致性

    [SWS_Can_00011] ⌈ Can模块应直接从上层缓冲区复制数据。直到函数调用返回(Can_Write),上层保持缓冲区一致性的责任。⌋(SRS_SPAL_12075,SRS_Can_01059)

    2. 重入问题(reentrancy issues)

    以下条件必须满足,才能使例程具有可重入性:

    • 除非每个变量都被分配给函数的特定实例,否则它必须以原子方式使用所有共享变量。
    • 它不调用不可重入函数。
    • 它不以非原子方式使用硬件。

    CanIf模块内部的函数CanIf_Transmit简单地转发传输请求。函数CanIf_Transmit是可重入的。因此,函数Can_Write需要实现线程安全(例如,通过使用互斥锁):
    当写操作无法进行可重入时,进一步(抢占式)调用将返回CAN_BUSY。(例如:允许写入不同的硬件TX句柄,不允许写入相同的TX句柄)
    在CAN_BUSY情况下,CanIf模块将排队该请求。(与所有硬件对象都忙时的行为相同)。
    Can_EnableCanInterrupts和Can_DisableCanInterrupts可以在可重入函数内调用。因此,这些函数也需要是可重入的。
    所有其他服务不需要实现为可重入函数。
    CAN主要函数(即Can_MainFunction_Read)不应被它们自己中断。因此,这些CAN主要函数不是可重入的。

  • 相关阅读:
    【zeriotier】win10安装zeriotier的辛酸泪
    react设置代理
    【逐步剖C】-第十一章-动态内存管理
    FragmentManager is already executing transactions异常
    百趣代谢组学资讯:项目文章Nature,揭示低温暴露抑制实体瘤生长机制,‘饿死’癌细胞
    js数组方法复习汇总
    Gartner发布2024 年十大战略技术趋势
    Espresso Sequencer:去中心化Rollups
    开源模型应用落地-业务优化篇(八)
    后深度学习时代,推荐系统向何处去?
  • 原文地址:https://blog.csdn.net/weixin_46481662/article/details/132717951