Electronics Guide

AUTOSAR

AUTOSAR, an acronym for AUTomotive Open System ARchitecture, is a standardized software architecture for automotive electronic control units and the development partnership that maintains it. The partnership was formed in July 2003 by BMW, Robert Bosch, Continental, DaimlerChrysler (now the Mercedes-Benz Group), Siemens VDO, and Volkswagen. Ford joined in November of that year, PSA Peugeot Citroen and Toyota in December, and General Motors in 2004. The membership has since grown to roughly three hundred companies organized in tiers, from core partners who steer the roadmap down to subscribers who simply consume the released specifications.

AUTOSAR is not a product, an operating system, or a body of source code that anyone downloads and runs. It is a large set of specification documents: an architecture, a methodology, several hundred module specifications, and a formal exchange format. Suppliers implement those specifications and sell the implementations. What the standard actually delivers is agreement, and the value of that agreement is best understood by looking at the problem it was created to solve.

The Integration Problem

A modern passenger vehicle contains dozens of electronic control units, and a premium vehicle may contain over a hundred. Almost none of them are built by the vehicle manufacturer. The engine controller comes from one supplier, the body controller from another, the braking system from a third, the instrument cluster from a fourth. Each supplier has its own software heritage, its own operating system, its own communication drivers, its own diagnostic implementation, and its own idea of how a function should be packaged.

Before AUTOSAR, integrating those units into a coherent vehicle was a bespoke exercise repeated for every programme. The vehicle manufacturer wrote a communication matrix and negotiated with each supplier about how it would be honored, and diagnostic behavior was specified in prose and implemented differently by each supplier. Moving a function from one control unit to another, a routine consequence of cost engineering or of a late architectural change, meant rewriting it against a different operating system and a different driver set.

Three specific pains drove the partnership. The first was the cost of variation: the same function, developed once, could not be redeployed without substantial rework. The second was supplier lock-in: because the software was written against a supplier's private infrastructure, the vehicle manufacturer could not readily move the work to a competing supplier at the next model year, which weakened commercial leverage and created long-term risk. The third was the sheer growth in function count. Electronic content in vehicles was rising faster than the industry's ability to integrate it, and integration effort was scaling worse than linearly with the number of interacting functions.

AUTOSAR attacks all three by standardizing the interface between application software and everything underneath it. If every control unit exposes the same services through the same interfaces, then a function written against those interfaces runs on any conforming control unit. The choice of which control unit hosts which function becomes an integration decision rather than a design decision, and it can be revisited late in a programme without rewriting application code. That single property, often called relocatability or location transparency, is the central promise of the standard, and most of the architecture exists to make it true.

A second, quieter benefit matters just as much: the standard supplies a common vocabulary. When an engineer specifies a sender-receiver port with a given data element, carried in a particular protocol data unit, with end-to-end protection of a stated profile, the sentence has one meaning to both parties and is machine-readable. A great deal of the friction in automotive integration was previously spent establishing what the other party meant.

The Partnership, Its Standards, and Release Cadence

AUTOSAR publishes three standards rather than one. The Classic Platform is the original deeply embedded architecture, intended for statically configured control units with hard real-time requirements running on microcontrollers without external memory. The Adaptive Platform, introduced in 2017, targets high-performance computers running general-purpose processors under a POSIX-based operating system. The Foundation standard holds the requirements and specifications common to both, so that the two platforms remain interoperable rather than drifting apart.

Early Classic Platform releases used ordinary version numbers. Release 1.0 appeared in the mid-2000s, and the 3.x and 4.x series followed over the next several years. Release 4.0 was a substantial architectural revision that introduced, among other things, a reworked communication stack and the end-to-end protection library. From 2017 onward the partnership moved to a date-based designation: releases carry a year and month, with the principal release of each year published in November, giving designations such as R21-11, R22-11, R23-11, and their successors. The Adaptive Platform's first release, 17-03, was published in early 2017 after development began the previous year.

Release numbering matters more than it might appear, because a vehicle programme freezes on a release and lives with it for years: the tools, the supplier deliverables, the generated code, and the ARXML schema version must all agree. Long-lived platforms therefore often run several releases behind the current specification, and suppliers maintain implementations across multiple releases simultaneously.

The specifications themselves are freely downloadable, which distinguishes AUTOSAR from many industrial standards. What is not free is the implementation. A production Classic Platform stack is licensed from a vendor, typically per project and per control unit, along with the configuration tooling.

The Classic Platform in Three Layers

The Classic Platform's canonical picture has three horizontal layers stacked on the microcontroller. At the top sits the application layer, composed of software components. At the bottom sits the basic software, which contains everything that is not application logic: drivers, protocol stacks, memory services, diagnostics, and the operating system. Between them sits the runtime environment, universally abbreviated RTE.

The application layer is where the vehicle's actual behavior lives. A software component might implement a lamp control strategy, a torque coordinator, a seat-position memory function, or a sensor-conditioning algorithm. Components are written in C, are compiled into the control unit's image, and never call hardware or communication drivers directly. Their only sanctioned interface to the rest of the system is a set of ports, and the only code that touches those ports on their behalf is the RTE.

The basic software is the standardized infrastructure. It is far larger than the application layer in module count, and on many control units it is larger in code size as well. It is divided into its own layers, described in the next section, and it is configured rather than written: an integrator selects modules, sets thousands of parameters, and a generator emits the C source that realizes that configuration.

The runtime environment is the layer that makes the architecture work. It is generated, not written. For a given control unit and a given allocation of components to that unit, a generator reads the formal description of the components and their connections and emits C code that implements every port access. When two components on the same control unit communicate, the generated RTE turns the access into a memory copy or a direct call. When they sit on different control units, the same access becomes a call into the communication stack, which packs the value into a frame and transmits it. The application source does not change between those two cases. That is the mechanism behind relocatability, and it is why the RTE is described as generated glue rather than as a library.

One consequence is the practical heart of the standard. Deciding where a function runs is normally an early architectural commitment that is expensive to revisit; under AUTOSAR it becomes a configuration decision taken at integration time and realized by regenerating the RTE. Programmes exploit this constantly, moving a function because a supplier changed, because a processor ran out of throughput, or because a vehicle variant omits the unit that originally hosted it.

Inside the Basic Software

The basic software is itself layered, and the layering is the mechanism by which hardware dependence is confined. Reading from the hardware upward, the layers are the microcontroller abstraction layer, the ECU abstraction layer, and the services layer. Cutting vertically through all three is a fourth region, the complex device drivers, which exists precisely because the layering cannot always be honored.

Microcontroller Abstraction Layer

The microcontroller abstraction layer, usually written MCAL, is the only basic software that touches microcontroller registers. It contains the drivers for on-chip peripherals: the analog-to-digital converter, the pulse-width modulation units, the general-purpose timers, the input and output ports, the SPI and I2C controllers, the internal flash and EEPROM, the watchdog, and the CAN, LIN, FlexRay, and Ethernet controllers integrated on the die.

Each MCAL module has a standardized interface and a hardware-specific implementation. The API for reading an analog channel is the same on an Infineon AURIX, an NXP S32, a Renesas RH850, and an ST Stellar part; the code behind it is entirely different. Because writing and validating these drivers requires register-level knowledge and silicon errata awareness, the semiconductor supplier normally provides the MCAL, and its quality and release timing become a real scheduling risk on programmes that adopt a new part early.

The layer is where hardware dependence is supposed to stop. In principle, moving from one microcontroller family to another requires a new MCAL and no change above it. In practice the port is rarely free, because timing, peripheral capabilities, and memory maps leak upward through configuration, but the boundary confines the damage to a known region.

ECU Abstraction Layer

The ECU abstraction layer hides the rest of the board. A control unit contains devices that are not inside the microcontroller: external transceivers, external EEPROMs and flash devices, sensor conditioning circuits, relay drivers, and power-supply supervisors. Some of them are reached through on-chip peripherals, and some are reached through general-purpose pins.

This layer presents those devices as services without revealing whether a function is served by an on-chip or an off-chip part. It is subdivided into onboard device abstraction for board-level hardware such as watchdogs and transceivers, memory hardware abstraction for storage devices, communication hardware abstraction for bus interfaces, and input and output hardware abstraction for signal paths. A component that reads a switch does not learn whether it is wired to a microcontroller pin or to a port expander on the SPI bus.

Services Layer

The services layer is the top of the basic software and the part that application components interact with, indirectly, through the RTE. It contains the operating system, the communication services, the memory services, the diagnostic services, the cryptographic services, and the system services that manage the control unit's own lifecycle.

System services include the ECU state manager, which sequences startup, run, sleep, and shutdown; the basic software mode manager, which arbitrates mode requests from across the stack; and the watchdog manager, which supervises a configured set of supervised entities. Memory services center on the non-volatile memory manager. Communication services span the signal-based communication module, the protocol data unit router, the network and communication managers, and the transport protocols. Diagnostic services comprise the diagnostic communication manager and the diagnostic event manager, and cryptographic services the crypto service manager and secure onboard communication.

All of these are configured, not coded. A typical control unit's basic software configuration comprises tens of thousands of parameter values, and it is the configuration, not the source, that an integrator spends time on.

Complex Device Drivers and What They Are Really For

The complex device driver is the standard's acknowledged escape hatch. It is a module that may reach directly from the application level down to the hardware, bypassing the layers entirely, while still exposing AUTOSAR ports so that components can use it through the RTE like anything else.

Its legitimate purposes are narrow and specific. The first is timing that the layered stack cannot meet. Direct fuel injection, ignition control, and knock detection must act at crank-angle resolution with interrupt latencies measured in microseconds, and routing those accesses through several layers of standardized API is not viable. The second is hardware the standard does not describe. A control unit that drives a specialized bridge, reads a proprietary sensor interface, or exploits a microcontroller's generic timer module in a way no standard driver anticipates has no standardized module to configure. The third is migration. A supplier moving a large body of proven legacy code onto an AUTOSAR control unit can wrap it as a complex device driver, expose ports, and integrate it without rewriting it, then refactor over subsequent programmes.

The purpose it is not for is convenience. A complex device driver is, by construction, non-portable, it reintroduces exactly the coupling the architecture was built to remove, and it must be re-qualified whenever the hardware changes. Experienced integrators watch the count: a control unit with two has probably used them correctly, and one with twenty has probably used the architecture as a wrapper around a conventional design.

Software Components, Ports, and Interfaces

An AUTOSAR software component is the unit of application design and the unit of relocation. It has a type, which describes its interface and internal behavior, and instances of that type are allocated to control units. The component's boundary is defined entirely by its ports, and the standard is strict about this: a component that reaches around its ports to touch a global variable or call a driver directly is not relocatable and has forfeited the benefit of the architecture.

Ports come in two directions. A provide port offers something; a require port consumes something. Each port is typed by a port interface, and the two interface kinds that carry most of the traffic are sender-receiver and client-server.

A sender-receiver interface carries data elements and is the model for signals: a wheel speed, a temperature, a switch state, a torque request. Communication is one-way and non-blocking. A sender writes a value; receivers read the most recent value, or consume a queue of events where the configuration specifies queued semantics. A receiver may be notified on arrival or poll at its own rate, and may detect that data has not arrived within a timeout, in which case a configured substitute value is supplied. Because the semantics are last-is-best by default, sender-receiver communication maps naturally onto the periodic broadcast style of CAN and FlexRay.

A client-server interface carries operations. The client invokes a named operation with arguments; the server executes it and returns results and an application error. The invocation may be synchronous, in which case the caller blocks until the result is available, or asynchronous, in which case the caller collects the result later. Client-server communication expresses request-response relationships that sender-receiver cannot model cleanly, such as asking a memory manager to write a block and learning whether the write succeeded.

Several further interface kinds serve specific purposes. Mode-switch interfaces let a component announce or observe a mode, such as a power state, so the RTE can enable and disable activity accordingly. Non-volatile data interfaces expose stored values, parameter interfaces expose calibration constants, and trigger interfaces let one component activate another without transferring data.

Inside a component, executable code is organized into runnable entities. A runnable is a function that the RTE calls in response to an event: a periodic timing event, the arrival of data on a receive port, the invocation of an operation the component serves, a mode change, or an explicit trigger. Runnables do not run themselves; they have no threads of their own and no access to the operating system. The component author declares which events start which runnables, and the integrator maps runnables onto operating-system tasks. That mapping is a configuration decision, which means the same component can be scheduled differently on different control units without touching its source.

Components are further classified by role. Sensor and actuator components are the one place where a specific physical device is modeled, so that hardware can change while the strategy above it stays fixed; service and ECU abstraction components expose basic software capability into the component world; and compositions group components into larger units, which is how a hierarchical design avoids being flattened.

The Virtual Functional Bus and the Runtime Environment

The virtual functional bus is the design-time abstraction that lets an engineer connect components before deciding where any of them will run. In the virtual functional bus view, the vehicle is a single space in which every component's ports are visible, and a connection is simply a line drawn between a provide port and a compatible require port. Nothing in that view says whether the two components will end up in the same task on the same microcontroller, in different control units on the same CAN bus, or in different domains separated by a gateway.

The virtual functional bus is deliberately not implementable. It is a modeling fiction whose purpose is to defer a commitment, and the commitment is made later, when components are mapped onto control units. The RTE is, in a precise sense, the per-control-unit projection of that bus: whatever the virtual bus promised, the generated RTE on each unit delivers by whatever local mechanism is appropriate.

Consider one connection between a provide port and a require port. If both components are mapped to the same control unit and the same task, the generated RTE may implement the write as an assignment to a variable and the read as a read of that variable, with no copy and no locking, because the task ordering already guarantees consistency. If the two components sit in different tasks at different priorities, the RTE inserts the necessary protection, which may be an interrupt lock, a resource, or a double buffer, chosen by the generator according to the configured data-consistency mechanism. If the components sit on different control units, the RTE call becomes a write into a signal buffer in the communication module, which packs it into a protocol data unit that the bus interface transmits, and on the receiving unit the reverse path fills a buffer that the receiving RTE reads.

Three properties follow. The first is that the application source is identical in all three cases, which is the relocatability claim in its concrete form. The second is that the RTE must be regenerated whenever the mapping changes, which makes generation an unavoidable part of every build. The third is that the RTE is not free: local access through generated wrappers costs more than a direct variable access, and on a small microcontroller with a large number of ports that overhead is measurable. Optimizing RTE generation, by inlining trivial accessors and selecting the cheapest legal consistency mechanism, is a real part of tuning an AUTOSAR control unit.

The RTE also owns the timing contract, invoking runnables from within operating-system tasks according to the mapping and the configured events. A component author reasons about a runnable's period and its data; the integrator reasons about task priorities, offsets, and worst-case execution time. The separation is useful, but it is where many integration defects live, because a component that behaves correctly in one task can miss deadlines when mapped differently.

The Operating System and Its OSEK Heritage

The AUTOSAR operating system did not start from a blank sheet. It is a direct descendant of OSEK/VDX, the operating system standard created in 1993 by a consortium of German manufacturers and suppliers, joined the following year by French manufacturers who brought the Vehicle Distributed eXecutive project with them. Parts of OSEK were later published as ISO 17356. Anyone who has worked with an OSEK kernel will recognize the AUTOSAR operating system immediately, because the core concepts are unchanged.

Scheduling is fixed-priority and statically configured. There is no dynamic task creation: the full set of tasks, their priorities, and their stack requirements are known at build time. Basic tasks run to completion and cannot block, so several may share a stack; extended tasks can wait on events, so each needs its own stack and may suspend mid-execution. Tasks at equal priority are served in first-in, first-out order, and shared resources are protected by a priority-ceiling protocol, which bounds priority inversion and prevents deadlock among tasks that follow it.

Configuration is entirely static and was historically written in the OSEK Implementation Language. Under AUTOSAR the same information lives in the ARXML model and is generated into the kernel's configuration tables. The absence of dynamic allocation is not an oversight but a requirement: a kernel with no runtime creation of objects has bounded memory use that can be demonstrated rather than measured.

AUTOSAR adds several things OSEK lacked. Schedule tables are the most visible. A schedule table is a statically defined sequence of expiry points, each at a fixed offset from the table's start, each activating tasks or setting events. Because the whole sequence is defined as a unit, the offsets between activations are guaranteed by construction rather than emerging from the interaction of independent alarms. A schedule table can also be synchronized to a global time source, which is how activation patterns are aligned across control units on a time-triggered network such as FlexRay.

The second addition is protection, organized into scalability classes. The lowest class provides the OSEK feature set. Higher classes add memory protection, using the microcontroller's memory protection unit to confine each operating-system application to its own data, and timing protection, which enforces budgets on execution time, interrupt lock time, and inter-arrival time so that a task that overruns is detected rather than silently stealing time from others. Higher classes combine both. These mechanisms exist to support freedom from interference, the property that ISO 26262 requires when software of different safety integrity levels shares a processor. Without memory and timing protection, mixing a quality-managed function with an ASIL-rated function on one microcontroller obliges the developer to treat all of it at the higher level.

The operating-system application is the unit of protection and trust, and trusted applications may run privileged where non-trusted ones may not. Counters, alarms, events, resources, and interrupt service routines complete the model. It is a small kernel by general-purpose standards, and that is the point: everything about it is enumerable at build time, which is what certification evidence requires.

The Communication Stack

The communication stack is the largest part of the basic software and the part most directly responsible for the standard's original goal. It converts between the signal-oriented view that application components hold and the frame-oriented reality of the vehicle networks.

At the top sits the communication module, universally called COM. Application components read and write signals; COM owns the buffers those signals live in and the rules for packing them. Several signals are packed into a protocol data unit according to a configured layout that specifies bit position, length, byte order, and sign. COM applies the transmission mode, which may be periodic, on change, or a mixture, and it applies filters so that a signal that has not changed meaningfully does not force a transmission. On the receive side it applies timeout monitoring and substitutes configured values when a message stops arriving. Signal groups let a set of values that must be consistent be transferred atomically.

Beneath COM sits the protocol data unit router, PduR. Its job is dispatch. A protocol data unit arriving from a bus interface may be destined for COM, for the diagnostic stack, for a transport protocol that will reassemble it into a longer message, or for another bus entirely if the control unit acts as a gateway. PduR holds the routing table that decides. Routing between buses is what makes an AUTOSAR control unit usable as a central gateway, and because the table is configuration rather than code, gateway behavior can be changed without touching source.

Below the router are the transport and interface layers, which are bus-specific but interface-identical: the CAN interface hides the number and identity of CAN controllers and drivers behind one API, and the LIN, FlexRay, and Ethernet interfaces do the same for their buses. Transport protocol modules handle messages longer than a single frame, and on CAN the transport protocol implements the segmentation and flow control of ISO 15765-2, which is what allows a diagnostic response of several hundred bytes to cross a bus whose frames carry at most eight bytes. On Ethernet the stack is deeper, comprising an Ethernet driver and interface, a TCP/IP stack, and a socket adaptor; this is the path by which the Classic Platform carries SOME/IP traffic.

Two managers sit alongside. The communication manager, ComM, arbitrates whether a channel should be communicating at all, resolving requests from users into full communication, silent communication, or no communication. Network management, defined generically and specialized per bus, coordinates sleep and wake-up across a network. The problem is genuinely distributed: a bus may sleep only when every node agrees, and any node must be able to wake it. Nodes therefore broadcast messages announcing that they still require the bus, and the bus shuts down only after the messages stop for a configured interval. Getting this wrong produces two of the most expensive field faults in automotive electronics, a network that will not sleep and drains the battery, or a network that sleeps while a node still needs it.

The stack also carries safety and security layers. The end-to-end protection library wraps safety-relevant data with a cyclic redundancy check, a sequence counter, and a data identifier, so that a receiver detects corruption, repetition, loss, insertion, and masquerading independently of whatever the underlying bus does, which lets a safety argument treat the communication path as a black channel. Secure onboard communication adds authentication to selected protocol data units using a message authentication code and a freshness value, defending against an attacker able to inject frames.

Memory and Diagnostic Services

Non-volatile storage in a control unit is more complicated than it appears, because the hardware is heterogeneous and unreliable in specific ways. The memory stack normalizes it. At the top, the non-volatile memory manager, NvM, presents named blocks with configured redundancy, default values, and consistency checks. An application asks to read or write a block and receives a result; it does not know what device holds the block.

Below NvM, a memory abstraction interface selects between two paths: an EEPROM abstraction over a real EEPROM device, or flash EEPROM emulation, which implements EEPROM-like semantics on flash memory that erases in large sectors and tolerates a limited number of erase cycles. Emulation handles the wear leveling, the sector switching, and the recovery from a power loss mid-write. Because the layering is standardized, a project that moves from an external EEPROM to internal flash emulation changes configuration rather than application code, and the blocks keep their names.

The diagnostic stack is one of the places where AUTOSAR most obviously pays for itself, because diagnostics is heavily regulated and heavily reused. The diagnostic communication manager, Dcm, implements the server side of the Unified Diagnostic Services protocol defined in ISO 14229, handling session control, security access, the request and response state machine, response pending behavior, and the routing of each request to the code that serves it. Services that read or write data by identifier, and services that run routines, are wired to application components through ports, so a component that owns a value publishes it to a tester by declaring a port rather than by parsing protocol.

The diagnostic event manager, Dem, owns fault memory. Modules report events; Dem debounces them by counter or by time, decides when an event matures into a confirmed fault, stores the diagnostic trouble code with its freeze frames and extended data, manages operation cycles and aging, and serves the stored contents to Dcm when a tester asks. The function inhibition manager works alongside it, disabling functions whose preconditions have failed. These modules implement behavior that legislation and manufacturer specification describe in detail, and one standardized implementation rather than one per supplier removes an entire class of integration argument.

Because the diagnostic stack sits on the transport protocol, the same diagnostic services run over CAN through ISO 15765-2 and over Ethernet through diagnostics over Internet Protocol as defined in ISO 13400, with the application-layer behavior unchanged. Flash reprogramming rides the same path, which is how a control unit is updated at a service bay or, on newer architectures, over the air.

ARXML and the Configuration-Driven Workflow

Anyone who joins an AUTOSAR project expecting to spend the day writing C is in for a surprise. The dominant artifact is not source code but XML. The AUTOSAR XML format, always called ARXML, is the formal serialization of the standard's meta-model, and it carries essentially everything: component types and their ports, interfaces and their data types, compositions and connections, the system topology, the network communication matrix, the mapping of components to control units, the mapping of runnables to tasks, and the complete configuration of every basic software module.

The methodology defines how those files flow. A system description holds the vehicle-level view: the components, their connections, the networks, and the frames. From it, an ECU extract is derived for each control unit, containing only what that unit needs to know. The extract feeds basic software configuration, where the integrator sets the parameters for each module, and RTE generation, which produces the glue. Generators then emit C source and headers, which are compiled together with the hand-written application code and the supplied module implementations to produce the binary.

Several consequences follow from this arrangement, and they define the day-to-day experience of the work.

The first is that the tool chain is not optional. ARXML is verbose and heavily cross-referenced; editing it by hand is possible for small corrections and impractical as a way of working. Commercial tools dominate the space, including Vector's DaVinci Developer and Configurator, Elektrobit's tresos, and ETAS ISOLAR, each best integrated with its own vendor's stack. The licenses are a real line item, and the choice is difficult to reverse mid-programme.

The second is that the exchange format is the contract. A vehicle manufacturer delivers an ARXML system description to a supplier and receives ARXML component descriptions back. Because the format is standardized, the exchange is mechanical rather than interpretive. This is the single largest practical benefit of the standard, and it is why ARXML compatibility complaints are taken so seriously: when two tools disagree about a construct, the contract stops working.

The third is that generated code is a substantial fraction of the image and changes whenever the configuration changes. Version control practice must decide whether to commit generated artifacts, which produces enormous diffs, or to regenerate them in the build, which requires a tool chain reproducible on every machine and in continuous integration. Change latency follows: a parameter change deep in the communication configuration can cascade into regenerated headers across the entire image and a full rebuild, so a loop that conventional embedded work measures in seconds is measured here in minutes.

The Adaptive Platform and Why It Was Created

By the middle of the 2010s, vehicle programmes were beginning to include functions the Classic Platform could not host. Automated driving needs sensor fusion over camera, radar, and lidar data on multicore application processors with gigabytes of memory. Connected services need a general-purpose operating system, a filesystem, and a network stack. Over-the-air update requires installing, activating, and rolling back software in the field. Service-oriented architectures require a control unit to discover at runtime what services exist rather than fixing every communication relationship at build time.

None of that fits a statically configured architecture in which every task, buffer, and message is fixed before the image is linked. Rather than distort the Classic Platform, the partnership specified a second platform. The Adaptive Platform was published in 2017 with release 17-03, after development began the previous year.

Its foundation is a POSIX operating system. The specification does not mandate a particular one; it requires that applications use the operating system through the PSE51 profile, a minimal real-time subset of POSIX defined in IEEE 1003.13. A conforming implementation can therefore be a Linux distribution, QNX, or another real-time operating system with a POSIX interface, and restricting applications to the subset keeps them portable across those choices.

The application programming interface is specified in C++ rather than C and lives in the ara namespace, short for AUTOSAR Runtime for Adaptive Applications. The partnership also publishes coding guidelines for the use of C++14 in critical and safety-related systems, playing a role analogous to MISRA C on the Classic side. Functionality is grouped into functional clusters, each with its own API: communication and execution management, persistency, diagnostics, cryptography, log and trace, time synchronization, platform health management, identity and access management, state and network management, and update and configuration management.

Communication is service-oriented and rides on SOME/IP, Scalable service-Oriented MiddlewarE over IP, a protocol designed for automotive Ethernet that carries remote procedure calls, event notifications, and field access. Its service discovery mechanism, SOME/IP-SD, lets a server announce a service instance and a client find it at runtime, which is exactly the capability a statically configured signal matrix lacks. A companion transport protocol segments payloads larger than a datagram. SOME/IP is not exclusive to the Adaptive Platform; the Classic Platform's Ethernet stack carries it too, which matters for interoperability.

Deployment is dynamic in a way the Classic Platform is not. An adaptive application is a process with its own address space, started and stopped by execution management according to the machine's state and the active function groups. Applications carry manifests derived from the model: an execution manifest describes how a process is started and in which states it runs, a service instance manifest binds a service to a transport endpoint, and a machine manifest describes the platform. Because deployment information is data read at startup rather than tables linked into an image, a machine's software set can change without rebuilding everything on it.

That property is what makes over-the-air update tractable. Update and configuration management installs, activates, and if necessary rolls back software packages, for the adaptive applications and for the platform itself. Persistency gives applications key-value and file storage with defined semantics for power loss, and platform health management supervises applications and acts when supervision fails.

The Adaptive Platform is not a replacement for the Classic Platform, and it was never intended as one. It needs a memory management unit, a substantial amount of RAM, and a POSIX operating system, none of which exist on the microcontroller in a door module. Its dynamic behavior, which is its whole point, is also the reason it is a poor fit for a function that must respond within tens of microseconds with provable worst-case timing.

Coexistence, Foundation, and the Gateway Between Platforms

A vehicle that contains an Adaptive Platform high-performance computer also contains dozens of Classic Platform control units, and it will continue to for a long time. Window lifts, seat modules, lighting controllers, and body electronics have no reason to acquire a POSIX operating system, and their cost targets forbid it. The two platforms therefore coexist within one vehicle and must interoperate.

The Foundation standard exists for that reason. It holds the requirements and specifications common to both platforms so that shared concepts do not diverge into two incompatible definitions. Protocol specifications that both platforms use, the common data type and meta-model foundations, and the shared methodology live there. Without Foundation, the two platforms would drift, and each new release would widen the gap.

Interoperation happens at two levels. Where both sides speak the same protocol, no translation is needed: a Classic Platform control unit with an Ethernet stack and a socket adaptor can offer or consume SOME/IP services directly, and increasingly does. Where the older side speaks signals on CAN or FlexRay and the newer side speaks services on Ethernet, something must translate, and that something is a gateway.

Signal-to-service translation is the mechanism. A gateway holds a mapping that relates signals or protocol data units in the classic communication matrix to service events, methods, and fields on the service-oriented side. Receiving a periodic CAN frame carrying a wheel speed, the gateway unpacks the signal and publishes it as a SOME/IP event to any subscriber; receiving a SOME/IP method call requesting an actuator change, it packs the corresponding signal into an outbound frame. Because the mapping is described in the model rather than coded, it is generated like everything else. In many architectures the gateway is hosted on the high-performance computer itself.

The practical picture is layered by capability rather than divided by generation. Deeply embedded, timing-critical, cost-sensitive nodes run the Classic Platform; compute-heavy, update-heavy, connected functions run the Adaptive Platform; both meet at gateways. Announcements that one platform is superseding the other misread the situation, because a door module does not need dynamic service discovery and a sensor-fusion stack cannot live inside a schedule table.

What the Standard Costs

An honest account of AUTOSAR has to weigh what it buys against what it charges, because the charge is real and it explains the shape of the market.

What it buys is clear. Supplier interchangeability is genuine: a manufacturer that specifies a function as an AUTOSAR component with defined ports has a credible path to sourcing it elsewhere, and that leverage has commercial value whether or not it is exercised. Relocatability is genuine, and a late move between control units costs configuration rather than a rewrite. The ARXML exchange removes an enormous amount of interpretive work from the interface between organizations, and standardized diagnostics, network management, and memory services remove entire categories of per-programme argument. On a large programme with many suppliers and many control units, these benefits comfortably exceed their cost.

The costs fall into three groups. The first is tooling dependence. The workflow does not function without commercial configuration tools and generators, the licenses are expensive, the tools differ in their handling of edge cases, and switching vendors mid-programme is painful. A project's velocity becomes partly a property of its tool chain rather than of its engineers.

The second is configuration complexity. A configuration comprising tens of thousands of parameters is not something any one person understands, and errors in it produce failures that are hard to attribute, because the symptom appears in generated code that nobody wrote. Learning the standard well enough to be productive takes months, and the expertise does not transfer from other embedded domains.

The third is overhead. Generated RTE accessors cost cycles a direct access would not, and the layered communication stack costs more code and more latency than a hand-written driver that packs one frame. The full basic software occupies a substantial share of flash and RAM on a small part, and that share does not shrink with the size of the application, because most of it is infrastructure that exists either way.

Those costs are why simpler stacks persist. A LIN slave in a mirror, a sensor node with a few kilobytes of flash, a low-cost actuator module, and a rapid prototype all have the same answer available: a small hand-written or vendor-supplied stack with direct drivers, a lightweight scheduler or a bare superloop, and no generation step. The economics are straightforward. On a node whose entire application is a few thousand lines, the infrastructure the standard supplies is larger than the thing it supports, and the interchangeability it buys is worth little because the node is cheap enough to replace outright.

The industry has responded with intermediate positions. Suppliers offer reduced-footprint configurations containing only the modules a simple node needs. Some organizations adopt the interface conventions and description formats without the full basic software, keeping the exchange benefit while writing their own infrastructure. The standard is best understood as an answer to a specific organizational problem, valuable where that problem is severe and appropriately skipped where it is not.

Conclusion

AUTOSAR exists because a vehicle programme integrates software from many organizations onto many control units, and because, without a shared architecture, every one of those integrations is negotiated from scratch. The standard's answer is to fix the interface between application software and everything below it, then supply enough standardized infrastructure that the interface is worth writing against.

The Classic Platform realizes that answer with three layers. Components communicate only through ports typed by sender-receiver and client-server interfaces. The basic software confines hardware dependence to a microcontroller abstraction and a board abstraction beneath a services layer, with complex device drivers as a narrow escape hatch for timing and hardware the layers cannot serve. The runtime environment, generated per control unit, turns the virtual functional bus into working code and makes the location of a function an integration-time decision. Beneath it, an operating system descended from OSEK provides fixed-priority scheduling, schedule tables, and the protection that mixed-criticality software requires. Almost all of it is configured rather than coded, in ARXML, through generators, which is where the engineering effort actually goes.

The Adaptive Platform was added because automated driving, connectivity, and over-the-air update need dynamic deployment, service-oriented communication, and a general-purpose operating system that static configuration cannot provide. It uses a POSIX PSE51 execution environment, C++ APIs in the ara namespace, and SOME/IP with runtime service discovery. It does not replace the Classic Platform: the two run side by side, share definitions through Foundation, and meet at gateways that translate between signals and services.

What the standard charges for this is tooling dependence, configuration complexity, and generated-code overhead. On a large multi-supplier programme those charges are worth paying, and the industry pays them. On the smallest nodes they are not, which is why simpler stacks remain in production alongside the standard and will continue to.

Related Topics