Title Image

Blog Logo

AUTOSAR Run Time Environment (RTE)

🌱 AUTOSAR RunTime Environment (RTE)

autosar

    Các bài viết trước đã nhắc khá nhiều về khái niệm RTE - Runtime Environment trong AUTOSAR, bài viết này mình muốn đi sâu hơn về khái niệm này, cũng như đi chi tiết vào những loại RTE được sử dụng trong AUTOSAR.

    👉 RTE - Runtime Environment trong AUTOSAR

    ➕ RTE là gì?

    Runtime Environment (RTE) là một môi trường thực thi giúp cho một phần mềm, hoặc một ngôn ngữ lập trình có thể chạy và truy cập vào Hardware. Ví dụ, Java sử dụng JVM (Java Virtual Machine) hoặc Python sử dụng trình thông dịch Interpreter. RTE giúp cho chương trình chạy chính xác trên Hardware bằng cách trừu tượng hóa các phân bổ cấp thấp khác nhau như function, variables, memory mapping, ...

    RTE cũng cung cấp các thư viện phần mềm, các biến môi trường được sử dụng bởi quá trình runtime. RTE chủ yếu được sử dụng bởi các ngôn ngữ lập trình bậc cao.

    ➕ RTE trong AUTOSAR

    Đối với AUTOSAR chủ yếu sẽ làm việc với ngôn ngữ C, và không yêu cầu bất cứ RTE nào để chạy trên Hardware, vì ngôn ngữ C cho phép access trực tiếp đến Hardware thông quá khái niệm Pointer.

    Vì vậy, trong AUTOSAR, khái niệm RTE sẽ không dùng cho các ngôn ngữ bậc cao mà nó có một ý nghĩa khác.

    RTE là trung tâm của AUTOSAR ECU architecture, cùng với COM, OS và BSW module. Tất cả Port & Interfaces được triển khai trong RTE, qua đó nó làm nhiệm vụ giao tiếp giữa các SWC - Software Component và giữa các SWC với các BSW module như OS, Communication Services.

    RTE bao gồm các Interfaces sử dụng cho Runnable trong SWC giao tiếp với các BSW module hoặc SWC module khác. RTE ánh xạ các Runnable tới các task của OS như được cấu hình trong quá trình cấu hình RTE, và thực thi các Runnable trong cùng một task hoặc các task khác nhau, RTE cũng xử lý công việc kích hoạt các Runnable (Nếu thỏa mãn điều kiện nào đó) sử dụng các RTE Event như đã được cấu hình trong SWC.

    RTE được liên kết chặt chẽ với BSW Scheduler do cùng một task OS có thể được sử dụng cho cả việc lập lịch SWC và các thực thể có thể lập lịch (còn gọi là main processing function) của module BSW.

    ▶ RTE được chia làm 2 phần:

  • Giao tiếp giữa các SWC
  • Lập lịch cho các SWC

    ▶ RTE và BSW Scheduler được tạo ra cho mỗi ECU để đảm bảo hoạt động và tùy chỉnh tối ưu ở cấp độ ECU. 

AUTOSAR Layer
Autosar Layer Architecture

    Như đã nói ở những bài viết trước, AUTOSAR được phát triển với mục tiêu tạo ra một kiến trúc độc lập với phần cứng, để có thể tái sử dụng, nếu không có RTE thì điều này không thể đạt được vì RTE đóng vai trò là lớp keo kết nối các SWC trong tầng Application với các tầng BSW ở bên dưới. RTE được tạo ra độc lập cho mỗi ECU.

    RTE không có tính Reuse (sử dụng lại), bởi vì nó được tạo ra để phù hợp cho từng yêu cầu của tầng Application, và nếu Application thay đổi thì RTE cũng sẽ cần thay đổi theo. Tất cả SWC đều có tính Portable và Reuse (sử dụng lại), ngoại trừ Sensor-Actuator SWC, vì nó phụ thuộc rất nhiều vào phần cứng.

    RTE được tạo ra sau khi tích hợp SWC, vì vậy nó chịu trách nhiệm đảo bảo hệ thống hoạt động như mong đợi bằng cách đảm bảo việc giao tiếp giữa các SWC, và giữa các SWC với BSW diễn ra suôn sẻ, bất kể việc SWC được triển khai ở đâu, và triển khai như thế nào.

    👉 Ứng dụng của RTE

    RTE là một trong những thành phần quan trọng nhất của AUTOSAR vì nó thực hiện các hoạt động quan trọng đối với tầng Application.

    ➕ Một số công dụng của RTE

  • RTE triển khai các virtual function bus giúp kết nối các SWC bên trong ECU và các SWC bên ngoài ECU (Thông quá kết nối vật lý giữa các ECU).
  • RTE thực hiện các đường dẫn giao tiếp bằng cách sử dụng các Port và Interface, được sử dụng để kết nối giữa các SWC và BSW module ở tầng thấp hơn cho mỗi cấu hình.
  • Hỗ trợ các Runnable của SWC dựa trên các RTE Event khác nhau theo cấu hình.
  • Cho phép khởi tạo SWC và hỗ trợ khởi tạo riêng biệt từng SWC hoặc cùng lúc nhiều SWC.
  • RTE cũng thông báo cho các Runnable về bất kỳ sự gián đoạn nào - Các Exception/Interrupt (nếu được cấu hình) xảy ra ở các tầng thấp hơn. Điều này không có nghĩa là các Runnable sẽ thực thi trong ISR !!! Runnable là tập con của SWC và độc lập với các tầng thấp hơn.
  • RTE cũng đảm bảo tính nhất quán của dữ liệu khi share các biến chung giữa các Runnable trong cùng một SWC, giữa các SWC partition, hoặc giữa các SWC của các ECU khác nhau.
  • Trong giao tiếp giữa các SWC (Sender - Receiver), RTE đóng vai trò ngăn chặn các xung đột khi có nhiều Sender truyền dữ liệu đến một Receiver và ngược lại.

    👉 Generation of RTE - Tạo ra tầng RTE

    Tạo ra tầng RTE là bước quan trọng và phức tạp nhất trong bất cứ dự án AUTOSAR nào. Kết quả của việc tạo RTE là các file khác nhau, ở đây mình nhắc đến 2 file cơ bản nhất là Rte.cRte.h. Đây là kết quả của việc tạo RTE phổ biến nhất nhưng một số dự án cũng có thể tạo ra từng file RTE riêng biệt cho mỗi SWC.

    RTE có thể tạo ra bằng các công cụ khác nhau, các phần mềm dành riêng cho AUTOSAR. Dưới đây là một phương pháp tạo ra file RTE.

RTE Generation
RTE Generatio Methodology

  1. Thu thập các SWC có sẵn
    Thu thập các description files của SWC và các Composotion SWC - Đối với các SWC có sẵn, hoặc tạo ra các triển khai SWC mới và sử dụng cho bước tiếp theo.
  2. Configure System
    Kết hợp các SWC được cấu hình với Conposition SWC khác nhau của các ECU khác nhau và các ràng buộc hệ thống khác.
  3. System Configuration Description
    File arxml chưa các chi tiết về ECU của toàn bộ hệ thống, được tạo ra sau bước 2. 
  4. Extract ECU specific information
    Trích xuất các thông tin mô tả SWC và các thông tin chi tiết khác của ECU. Đầu ra của bước này là các file arxml - ECU Extract arxml.
  5. Generate ECU Configuration
    Bước này gọi đến các cấu hình của các tầng thấp hơn của RTE - BSW module. Đầu ra của bước này vẫn là file arxml, chứa các thông tin cấu hình của ECU về tầng BSW, SWC.
  6. Generate RTE
    Đây là bước quan trọng nhất của việc tạo ra các file RTE. Trong bước này, tất cả các Runnable sẽ được ánh xạ tới các OS Task, các connectors sẽ được ánh xạ tới tín hiệu thực tế, ... Đầu ra của bước này là các file RTE (Rte.c và Rte.h). Ngoài ra bước này cũng tạo ra file BSWMD, chứa thông tin về các tính năng khác nhau của RTE.
  7. Compile RTE
    Trong bước này các file của RTE sẽ được compile và tạo ra các file object (.o), sau đó link với các file object đã được compile của BSW và SWC để tạo file thực thi cuối cùng (.elf, .hex, ...).

    Các bước trên lặp lại cho từng ECU trong hệ thống. 

    Với mục đích của AUTOSAR là sử dụng lại các SWC, nên RTE cũng hỗ trợ khả năng tương thích với các SWC với phiên bản AUTOSAR khác nhau, hoặc SWC của nhiều nhà cung cấp khác nhau.

    👉 Một số thông tin về RTE API

    RTE cung cấp nhiều API khác nhau bằng cách sử dụng SWC để có thể truy cập dữ liệu từ các SWC khác hoặc các layer thấp hơn. Các API của tầng RTE thì luôn có tiền tố 'Rte_'. Các API này được chia thành 2 loại:

    ▶ Direct API

  •     Các API được yêu cầu gọi một cách trực tiếp (không mất thời gian function call). Các API này được tạo và gọi trực tiếp cho mỗi Port. 
  • Thông thường các API này được triển khai dưới dạng Function-Like Macro và không thể lấy được địa chỉ.

     Indirect API

  • Được gọi gián tiếp thông qua các Port.
  • Hữu ích khi có nhiều Port của Port Interface để có thể quản lý các Port Handle thông qua một mảng (Function Pointer Array).

    👉 Mối quan hệ giữa các File sau ghi Generate RTE

    Sau khi Generate RTE theo các bước kể trên, tool sẽ tạo ra nhiều file có liên quan đến nhau, tức là một số file sẽ #include các file khác.

     File Rte.h

  • File này xác định các phần tử cố định không cần tạo lại cho mỗi ECU, vì phần mềm tạo RTE sẽ không tạo đi tạo lại các file này. 
  • User cũng có thể chỉnh sửa file này để đáp ứng các ứng dụng của mình nếu cần.
  • include đến file Std_Types.h.

    ▶ File Std_Types.h

  • Định nghĩa các kiểu dữ liệu cơ bản cho các số nguyên không dấu / có dấu (các kiểu dữ liệu giống uint32_t / uint16_t / uint8_t của thư viện stdint.h)
    ➥ Lý do AUTOSAR không include stdint.h để tránh trường hợp user không sử dụng thư viện C chuẩn, nên cần định nghĩa lại các kiểu dữ liệu này với tên khác (Ví dụ uint32 / uint16 / uint8).
  • Cung cấp cách truy cập vào từng Compiler.
    ▶ File Rte_Main.h

  • Include đến file Rte.h.
  • Chứa các function prototypes cần thiết để cung cấp cho tầng Application.
    ▶ File Rte_<swc_name>.h

  • File Header riêng biệt cho từng SWC.
  • Chứa các function prototypes của API RTE, cấu trúc dữ liệu, function prototypes của các Runnable được sử dụng trong các Software Component.
  • Include đến Rte_Type.hRte_DataHandle.h.

    ▶ File Rte_Type.h

  • Chứa các kiểu dữ liệu, cấu trúc dữ liệu riêng của RTE được cấu hình bởi Software Component.
  • Include đến Rte.h.

    ▶ File Rte_DataHandle.h

  • Chứa các kiểu dữ liệu chuyên để xử lý data cần thiết cho các cấu trúc dữ liệu của Software Component.

    ▶ File Rte_<swc_name>_Type.h

  • Cung cấp các kiểu dữ liệu ở tầng Application, các constants value hoặc enum value được sử dụng trong tầng SWC.
  • Include đến Rte_Type.h.

    Hy vọng những tổng hợp và giải thích ở bài viết trên đủ đơn giản đối với mọi người. Mặc dù khối lượng kiến thức là chưa đầy đủ, nhưng nó cung cấp cho bạn cái nhìn tổng quan về RTE, quá trình tạo RTE và mối quan hệ giữa các file khác nhau được liên kết với RTE.

    Nếu bài viết có sai sót mong các bạn có thể vui lòng góp ý cho mình hoặc bình luận ở bên dưới.

>>>= Follow ngay =<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

                                        

Đăng nhận xét

4 Nhận xét

  1. Em làm autosar nhưng cty toàn cho test thôi, anh có thể cho em thêm lộ trình mảng này ko anh, có nên tiếp tục làm test ko anh, chứ em cày C/C++, DSA mà giờ toàn test cũng hơi nản

    Trả lờiXóa
    Trả lời
    1. Em làm ở công ty nào nhỉ, thường thì sẽ có cả role dev và test, nhưng riêng mảng automotive thì anh thấy thực tế dev/test quan trọng và mức độ học hỏi gần như nhau, mỗi role lại có cơ hội học hỏi riêng ấy

      Xóa
  2. em làm ở bosch á anh, autosar nhưng chỉ làm test thôi, ko biết fpt sao anh, em sợ làm test nhiều quá mất tư duy code

    Trả lờiXóa
    Trả lời
    1. Ừ, bên fpt thì làm chủ yếu tầng dưới nên làm đầy đủ luôn em à, thực tế thì anh thấy tính chất công việc cũng không có nhiều khác biệt

      Xóa