Những Điểm Khác Nhau Giữa Phần Mềm AUTOSAR và Non-AUTOSAR

 

  1. Định nghĩa:

    • Phần mềm AUTOSAR (Automotive Open System Architecture) là một chuẩn mở dành cho các hệ thống điện tử trong ô tô. Nó giúp đơn giản hóa quá trình phát triển phần mềm và tăng tính tương thích giữa các thành phần.
    • Non-AUTOSAR chỉ đơn giản là các phần mềm không tuân thủ theo tiêu chuẩn AUTOSAR.
  2. Tính đa dạng:

    • AUTOSAR: Với việc tuân thủ tiêu chuẩn, phần mềm AUTOSAR thường có tính tương thích cao, giúp các nhà sản xuất ô tô dễ dàng tích hợp các thành phần từ nhiều nhà cung cấp khác nhau.
    • Non-AUTOSAR: Do không giới hạn bởi tiêu chuẩn, phần mềm Non-AUTOSAR thường linh hoạt và có thể tùy chỉnh theo nhu cầu cụ thể của nhà sản xuất.

     3.  Ví dụ: Dưới đây là một ví dụ cực kỳ đơn giản và dễ hiểu:

     Ví dụ  phần mềm Non Autosar :

Ví dụ phần mềm Autosar:

Rất dễ hiểu đúng không các bạn.

Dưới đây là một ví dụ cho đoạn code ở tầng MCAL (BSW) :

/* MCAL Layer for DIO Driver */

#include "Dio.h"

/* Function API to Read a Channel */
Dio_LevelType Dio_ReadChannel( Dio_ChannelType ChannelId )
{
    unsigned int ReadVal;
    
    /* Assume Channel 1 is mapped to Port P1.1
        
        if(ReadVal == 0x00) /* If pin is LOW*/
        {
            return(STD_LOW);
        }
        else
        {
            /* if pin is high */
            return (STD_HIGH);
        }
    }
    
    /* continues for the other channels */
    
}

/* Function to write to a port */
void Dio_WriteChannel( Dio_ChannelType ChannelId, Dio_LevelType Level )
{
    
    if(ChannelId == 2)
    {
        if(Level == STD_LOW)
        {
            P1.2 = 0; /* Code to set pin LOW*/
        }
        else
        {
            P1.2 = 1; /* Code to set pin high */
        }
        
        /* continues for other pins */
    }
}

---> Những tên biến và hằng được sử dụng cần tuân theo đặc tả trong Autosar. Dưới đây là lí do vì sao "STD_LOW" được sử dụng:

Dưới đây là một ví dụ về code cho tầng ứng dụng, Nhiệm vụ chính là read data từ RTE và gửi yêu xuống tầng BSW để đẩy ra bên ngoài.

/* Add RTE Application header */
#include "Rte_LedControlSWC.h"


void ApplLedControl()
{
    
    uint8 Led;
    
    /* Read data from Ecu Abstraction through RTE */
    Rte_Read_RP_Chanel1(&Button);
    
    /* Control Logic */
    if(Button)
    {
        /* Turn on */
        Rte_Call_RP_Turnon();
    }
    else 
    {
        /* Turn off */
        Rte_Call_RP_Turoff();
    }
    
    
}


 

Bài viết cùng danh mục