AUTOSAR_CP_SWS_NVRAMManager
FIG-41556f53bcda236d
932 × 1189 px
5 Release(s)
Figure 9.11: NvM interraction with BswM for a multiblock operation
SHA-256 Inhalts-Fingerabdruck:
41556f53bcda236d6621b1609c8cd86f66d84cd3af61a3f6f728316f7b64743a
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-series@1 · erstellt am 2026-10-08
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: UML-Sequenzdiagramm (Interaction Diagram / zeitlicher Ablauf mit Loops und Interaktionsrahmen).
- Technischer Zweck & Einordnung: Spezifikation des Zusammenspiels zwischen NVRAM Manager (NvM), Basic Software Manager (BswM) und dem NvM-Benutzer (z. B. EcuM, BswM selbst oder Anwendungs-SWCs) während der asynchronen Abarbeitung einer Multi-Block-Operation (z. B.
NvM_ReadAll,NvM_WriteAll,NvM_ValidateAll,NvM_FirstInitAll). - Architektur-Kontext: Dient der Synchronisation des BSW-Modusmanagements (BswM Mode Arbitration / Rule Evaluation) mit dem Fortschritt der nicht-flüchtigen Speicherverwaltung auf Gesamtjob- sowie Einzelblockebene zur Steuerung von ECU-Zustandsübergängen (z. B. Startup Phase II, Shutdown, Sleep).
2. Komponenten, Entitäten & Schnittstellen
Akteure & Entitäten (Lifelines)
BSW Task (OS task or cyclic call): Periodischer Betriebssystem-Task-Kontext zur zyklischen Ausführung der BSW-Main-Funktionen.«module» BswM: AUTOSAR Basic Software Manager (Mode Management, Regelauswertung und Aktionsausführung).«module» NvM: AUTOSAR NVRAM Manager (Verwaltung des nicht-flüchtigen Speichers).NvM User: Aufrufer der Multi-Block-Anforderung (z. B. EcuM während Startup/Shutdown oder Diagnosedienst).
Verwendete Schnittstellen & APIs
- User → NvM (Synchroner Request):
Multi Block Request(): Repräsentiert asynchrone Multi-Block-APIs wieNvM_ReadAll(),NvM_WriteAll(),NvM_CancelWriteAll()etc.
- NvM → BswM (Modus-Indikationen / Status-Updates):
BswM_NvM_CurrentJobMode(MultiBlockRequest, JobResult): Meldet den Status des Gesamtjobs an den BswM (NVM_REQ_PENDINGbei Start,MultiBlockJobResultwieNVM_REQ_OK,NVM_REQ_NOT_OKetc. bei Fertigstellung).BswM_NvM_CurrentBlockMode(Block, JobResult): Meldet den Status eines individuellen NVRAM-Blocks an den BswM (NVM_REQ_PENDINGzu Beginn der Blockverarbeitung,JobResultbei Abschluss des Blocks).
- BSW Task → NvM (Zyklische Ablaufsteuerung):
NvM_MainFunction(): Zyklischer Scheduler-Einsprungpunkt zur Weiterschaltung der internen NvM-Zustandsmaschine und Treiber-Interaktion (MemIf → Fee/Ea → Fls/Eep).
- NvM → NvM User (Callback):
SingleBlockCallback(BlockRequest, JobResult): Optionaler, blockbezogener Benachrichtigungs-Callback (NvMSingleBlockCallbackFunction), explizit beschränkt aufNvM_ReadAll.
3. Dynamisches Verhalten & Sequenzablauf
- Initialer Request (Synchrone Phase):
NvM UserruftMulti Block Request()auf.NvMakzeptiert den Auftrag in die interne Warteschlange und setzt die Job-Indikation ab:BswM_NvM_CurrentJobMode(MultiBlockRequest, NVM_REQ_PENDING).- Rückkehr zum Aufrufer; der Auftrag verbleibt asynchron im Zustand Pending.
- Äußere Schleife – Block-Iteration (
loop For each block to be processed):- Für jeden konfigurierten Block, der Teil der Multi-Block-Anforderung ist:
- Block-Start:
NvM_MainFunction()wird durch den BSW-Task aufgerufen.NvMsignalisiert dem BswM den Start des Blocks viaBswM_NvM_CurrentBlockMode(Block, NVM_REQ_PENDING). - Innere Schleife – Asynchrone Treiberabarbeitung (
loop While block is still being processed):- Wiederholte Aufrufe von
NvM_MainFunction(). Die Low-Level-Treiber (EEPROM/Flash-Emulation) transferieren Daten schrittweise; der NvM verbleibt im blockinternen Wartezustand.
- Wiederholte Aufrufe von
- **Block-Abschluss (Block processing finishes in this call):**
- In diesem
NvM_MainFunction()-Zyklus detektiert der NvM das Ende der Blockoperation. NvMmeldet das Einzelergebnis an BswM viaBswM_NvM_CurrentBlockMode(Block, JobResult).NvMtriggert (ausschließlich beiNvM_ReadAll) den konfigurierten Benutzer-CallbackSingleBlockCallback(BlockRequest, JobResult).
- In diesem
- Block-Start:
- Für jeden konfigurierten Block, der Teil der Multi-Block-Anforderung ist:
- **Multi-Block-Abschluss (Multi block operation finishes in this call):**
- Nach Abarbeitung des letzten Blocks führt ein nachfolgender Aufruf von
NvM_MainFunction()zum Gesamtabschluss. NvMmeldet das Gesamtresultat an den BswM viaBswM_NvM_CurrentJobMode(MultiBlockRequest, MultiBlockJobResult).
- Nach Abarbeitung des letzten Blocks führt ein nachfolgender Aufruf von
4. Normative Relevanz & Entwickler-Hinweise
- Konfigurationsschalter (BswM-Kopplung):
- Das Aufrufen von
BswM_NvM_CurrentJobModeerfordertNvMBswMMultiBlockJobStatusInformation == TRUE. - Das Aufrufen von
BswM_NvM_CurrentBlockModeerfordertNvMBswMBlockStatusInformation == TRUEam jeweiligen Blockdescriptor (NvMBlockDescriptor).
- Das Aufrufen von
- BswM-Regelwerk & Mode Arbitration:
- BswM nutzt diese Callbacks zur Auswertung von
BswMNvMJobModeIndicationundBswMNvMBlockModeIndication. Erst nach Empfang vonBswM_NvM_CurrentJobMode(..., NVM_REQ_OK)darf der BswM beispielsweise von Startup zu Normalbetrieb (z. B. nachNvM_ReadAll) oder in die Sleep-/Power-Off-Sequenz (nachNvM_WriteAll) schalten.
- BswM nutzt diese Callbacks zur Auswertung von
- Task-Kontext & Reentranz-Restriktionen:
NvM_MainFunction()und die daraus synchron getriggerten Callbacks (BswM_NvM_*,SingleBlockCallback) laufen synchron im Kontext desBSW Task.- Achtung vor Blockaden: Weder
BswM_NvM_*noch derSingleBlockCallbackdürfen blockierende Operationen ausführen oder synchron blockierend auf weitere NvM-Jobs warten.
- Einschränkung von
SingleBlockCallbackbei Multi-Block-Jobs:- Durch die Notiz
Only for NvM_ReadAllwird normativ festgelegt, dassSingleBlockCallback(BlockRequest, JobResult)während einer Multi-Block-Operation ausschließlich fürNvM_ReadAllaufgerufen wird (nicht für Schreib- oder Validierungsoperationen). Zudem führt der Callback nun die konkrete Dienstanforderung (BlockRequest) als Parameter.
- Durch die Notiz
- Laufzeitverhalten & Granularität:
- Jeder Block beansprucht mindestens zwei bis mehrere Zyklen der
NvM_MainFunction(). Die Task-Zykluszeit derNvM_MainFunctionbestimmt direkt die Gesamtlaufzeit von Multi-Block-Jobs (kritisch für Startup- und Shutdown-Budgets der ECU).
- Jeder Block beansprucht mindestens zwei bis mehrere Zyklen der
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.