+1

Giải mã AUTOSAR: Kiến trúc để đời ngành Automotive - Phần 2.1

Updating

!Bài viết đang được cập nhật

Trong bài viết này, ta cùng tìm hiểu kỹ hơn về lớp trên cùng của kiến trúc, chính là lớp Application Layer (ASW).

Ví dụ, ta có một bài toán thực tế như sau:

Requirement

Đọc tốc độ từ cảm biến. Nếu tốc độ vượt quá ngưỡng cho phép vì một lý do không mong muốn:

  • Lập tức ngắt đầu phun.
  • Log lại lỗi để analyze.
  • Log lại tốc độ không mong muốn vừa đạt được vào bộ nhớ NvM (Non-volatile memory).

Design

  • cần 1 ecu abstract sw-c để đọc xung từ encoder.
  • Nối ngược lên trên ASW, nối với cục sensor actuator sw-c, đổi physical value sang software value (pulse -> km/h -> compumethod).
  • nối với 1 cục SW-C (SpdCtl) để tính toán.thông tin
  • nối với 1 biến calib để chặn lại nếu vượt max của biến đó.
  • nếu vượt max, nối với CDD (mấy vụ vượt mất kiểm soát như này sẽ được CDD chặn đầu ngay vì tính nhanh gọn của nó do được bỏ qua một mớ macro của AUTOSAR), từ đó ngắt đầu phun (injector) nhanh chóng.
  • từ cục sw-c nối với DEM để log lỗi, log vào trong NvM, NvM lưu vào flash.

Bên trong file .c của một SW-C:

#include "Rte_<SWC>.h"

void Runnable() {
    int Speed;
    Speed = Distance/Time;
 
    Std_ReturnType _ASCET_RteStatus;

    // Rte_shortname_of_port_shortname_of_interface(Speed);    
    Rte_Write_P_Speed_Speed(Speed);
    
    // hoặc
    Rte_Read_R_Speed_Speed(&Speed); // đọc thẳng vào tham chiếu của biến mà không tạo ra bản copy
                                    // vừa tiết kiệm thời gian, vừa tiết kiệm bộ nhớ
    
    Rte_Call_<RPort>_<CSOperation>();
}

Std_ReturnType Rte_Call_P_shortname_of_interface(x, y, &sum) {
    sum(x, y, &sum);
    return(RTE_E_OK);
}

Gọi là SW-C như thế, nhưng thực chất, các cháu này ngồi tụ lại với nhau theo từng cụm chức năng cụ thể, chứ không phải mỗi thằng lang thang một nơi.

Ở vai vế cao nhất, được coi là ông nội của các SW-C, ta có TopLvlComposition (Top level composition). Có thể nhìn thấy như một trong các chức năng general nhất trên xe, ví dụ như Combustion Engine (CmbEng).

Tiếp theo sẽ là bố của các SW-C, ta có Subcompo (Sub composition), tương tự, vẫn bao bọc các SW-C có chức năng nhỏ hơn, cụ thể hơn.

Với các SW-C có level thấp nhất, được xếp vào hàng cháu chắt, không thể chia nhỏ hơn được nữa, sẽ được gọi là Atomic Component.

Veh (TopLvlComposition):
├──DrAs, ElSS, ThS, VehC, VehM (Atom)
├──ADAS (Subcompo):
└─────ADASHR (Atom)
└─────AdasPred (Atom)

CmbEng (TopLvlComposition):
ETS (Subcompo):
├──CoEng, EngStrt, EngM (Atom)
├──EgSys (Subcompo):
└─────LamCL (Atom)
└─────PFlt (Atom)
└─────ExhMod (Atom)

Để ý sẽ thấy, các Atomic component có thể nằm cùng level với các Sub composition, không nhất thiết Subcompo mới phải nằm cùng với Subcompo,

Vậy, bên trong một SW-C có gì ? Vậy, các SW-C trò chuyện với nhau như thế nào ?


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.