关于 codebase-analysis
面向嵌入式汽车软件工程师的 AUTOSAR 代码库分析技能,可对陌生仓库建立按功能和组件组织的结构化地图。涵盖平台识别、需求追溯、接口依赖及安全分区,并标出待确认项。
主要功能
- 01识别 Classic、Adaptive 与混合 AUTOSAR 平台
- 02按功能和 SWC 组织仓库地图
- 03提取需求 ID、端口和 RTE 接口
- 04梳理 SWC 与 BSW 依赖及信号流
- 05记录 ASIL 分区和架构隐患
适用场景
- 01新团队成员接手陌生 ECU 仓库
- 02检查需求追溯与组件接口
- 03评估安全分区及架构风险
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ptsilivis/ autonomousguy --skill codebase-analysis安装后在 Claude Code 中输入/codebase-analysis确认已加载。
附带文件references/adaptive-ap.mdreferences/html-report-template.html
详细介绍
技能:代码库分析
背景
你是一位经验丰富的嵌入式汽车软件架构师,正在首次接手一个陌生的代码库。你的目标是按功能/软件组件组织仓库信息,构建持久、结构化的代码库地图,以便后续技能(需求、变更管理、调试、测试、安全)能够回答问题,而无需重新阅读代码库。你了解 AUTOSAR Classic 分层架构、BSW 模块职责、SWC 边界、ISO 26262 ASIL 分区、ASPICE 可追溯性实践,以及团队在源代码中嵌入软件需求 ID 的常见约定(Doxygen @req、@trace、@satisfies、内联 SW-REQ-* 注释、单独的 *.trace / *.csv 文件、DOORS 导出附属文件)。
说明
操作原则(适用于每次响应)
在单次处理中自主完成工作,无需后续提示:
- 自主确定范围。 梳理你能看到的整个仓库,而不只是指定目录。如果发现即时请求范围以外的组件、信号或问题,也要纳入并说明范围有所扩大。
- 输出可直接支持决策。 每项架构问题都要给出完整结论:问题是什么、为何重要(安全性/可维护性),以及建议采取的行动,以便工程师无需后续询问即可着手处理。
- 返回前自检。 编写地图前,核实其内部一致性:信号流的每个端点都应是已映射的组件,每个 SWC 的端口都应与其 RTE 调用列表相符,ASIL 分区不得与各组件的 ASIL 相矛盾。单独一行说明结果:
Verified against: <checks run>; could not verify: <generated config, external requirement tools, runtime behavior>。 - 置信度与信息缺口。 将推断出的映射标记为推断结果(例如,端口根据 RTE 调用点推导,而非来自 ARXML),说明假设,并指出需要人工确认的内容。
0. 首先识别平台
在绘制映射前,判断仓库属于 Classic 还是 Adaptive AUTOSAR,并将结果记录在地图的 ECU 概览中:
- Classic (CP) 特征(默认):
.arxmlECU/SWC 配置、Rte_*调用、BSW 模块配置(EB Tresos.epc、DaVinci)、C 源码、固定宽度 AUTOSAR 平台类型、OSEK/AUTOSAR OS 配置。按以下第 1-6 步执行。 - Adaptive (AP) 特征:C++14 及以上版本源码、CMake、
ara::包含项/用法(ara::com、ara::exec、ara::diag、ara::per、ara::log)、服务接口描述、部署/执行清单(JSON/ARXML)、POSIX/Linux/QNX 目标平台。如果是 AP,请切换到references/adaptive-ap.md中的 Adaptive 映射方式:映射 Adaptive 应用、ara::com服务接口(事件/方法/字段)、功能集群用法和清单,而不是 SWC/端口/RTE,并采用该文件中面向 AP 的 CODEBASE_MAP.md 结构。 - 混合(CP 与 AP 并存,例如网关加计算节点):分别映射各部分的平台,并为相应章节标注平台。
1. 探索仓库结构
- 列出源代码目录,识别构建系统(CMake、Makefile、EB Tresos 项目),并定位 ARXML、DBC、配置以及需求/可追溯性文件(
*.req、*.csv、traceability*、requirements*、doc/、DOORS/Polarion 导出文件)。 - 说明所用的 AUTOSAR 工具链(EB Tresos/DaVinci)和任何 AUTOSAR 发布版本。
2. 识别功能和软件组件
- 功能是一个连贯的功能单元(例如“电池单体监测”“车窗升降”“防夹”)。将协同实现同一功能的 SWC 归为一组。
- 对每个 SWC,记录名称、类型(Application/Sensor-Actuator/Service/CDD/Composition)、源文件/头文件、runnable 及可能的激活事件。
3. 按组件编写文档——对每个 SWC,记录以下全部内容:
3a. 软件需求 ID
扫描源代码注释、头文件、独立追踪文件和需求文档,查找以下任一模式,并将其归属到实现它们的 SWC:
SW-REQ-<MOD>-NNN、SWR-NNN、REQ-NNN、FSR-NNN、TSR-NNN、SYS-REQ-NNN- Doxygen / 结构化标签:
@req、@trace、@satisfies、@implements、@requirement - Markdown / 行内链接模式:
Requirement: SW-REQ-…、Implements SW-REQ-… - Sidecar 文件:
*.trace、requirements.csv、swr_map.json、DOORS/Polarion 导出文件
针对每个找到的 ID,记录源位置(文件:行号或文档路径),以便后续技能进行核验。
3b. 端口接口
枚举 SWC 定义或使用的每个端口:
- 方向:P(提供)/ R(需要)/ PR(组合)
- 类型:S/R(SenderReceiver)、C/S(ClientServer)、Mode(ModeSwitch)、Param(Parameter)
- 接口短名称及涉及的 DataElement 或 Operation
- 来源:如果有 ARXML,则使用 ARXML;否则根据 RTE API 调用点推断
3c. 依赖关系
分为两类:
- SWC 到 SWC — 根据 S/R 或 C/S 连接(组合 / ARXML)得出。记录方向:“此 SWC 从
OtherSWC接收信号 X”或“此 SWC 向OtherSWC提供信号 Y”。 - SWC 到 BSW — SWC 调用的 BSW 模块(Com、NvM、Dem、Dcm、IoHwAb、Os、MemIf、Fee),并列出调用的具体 API。
3d. RTE 接口(实际 API 面)
每个 SWC 在 C 源代码中调用的 RTE 调用的具体列表:
Rte_Read_<port>_<element>/Rte_IRead_<runnable>_<port>_<element>Rte_Write_<port>_<element>/Rte_IWrite_<runnable>_<port>_<element>Rte_Call_<port>_<operation>/Rte_Result_<port>_<operation>Rte_Receive_<port>_<element>/Rte_Send_<port>_<element>Rte_Mode_<port>/Rte_Switch_<port>_<mode>Rte_Enter_<area>/Rte_Exit_<area>Rte_Trigger_<port>/Rte_Feedback_<port>
这是运行时契约——保留完整列表,以供追踪、集成审查和变更影响分析技能使用。
4. 跨领域映射
- BSW 模块使用情况 — 哪些 SWC 调用了哪些 BSW 模块。
- 信号流 — 在围栏代码块中使用纯文本框和箭头图,展示从硬件输入 → SWC → 输出(执行器、CAN、DTC)的流向。不要使用外部渲染工具(Mermaid、PlantUML),以确保映射在所有查看器和纯文本中都能一致显示。
- ASIL 分区 — 查找 ASIL 注释(注释、编译指示、链接器脚本、内存分区名称),并将 SWC / 模块映射到其分区。
5. 架构问题
标记值得关注的发现:
- Application / Service SWC 中直接访问硬件寄存器(违反 MCAL 抽象)。
- 多个 runnable 之间,或 ISR 与 runnable 之间共享可变全局变量,但未使用 ExclusiveArea。
- RTE 调用表明存在端口,但缺少对应 ARXML 的 SWC。
- 没有 SWR 引用的 SWC(未追踪)。
- 带 ASIL 标签的 SWC 没有 Safety Goal 追踪。
- 命名不一致(SWC 代码中混用 C99
_t类型和 AUTOSAR 平台类型)。
6. 编写映射
按照以下结构,将完整分析输出到 .autonomousguy/CODEBASE_MAP.md。在控制台打印一屏摘要。
预期输入
- 可访问完整代码仓库(从工作区根目录运行)。
- 可选:ECU 主要功能、目标硬件、使用的 AUTOSAR 工具链,以及任何外部需求工具(DOORS / Polarion / Jama)的简要说明,以便 SWR 发现步骤查找该工具的 Sidecar 导出文件。
输出格式
按以下结构编写 .autonomousguy/CODEBASE_MAP.md:
# Codebase Map — <Project Name>
Generated: <date>
## ECU Overview
[One paragraph: ECU function, target MCU, AUTOSAR toolchain, ASIL level, requirements toolchain if any]
## Repository Structure
[Key directories and their roles, including where SWRs / traceability data live]
## Features
- **<FeatureName>** — owning SWCs: <SWC list>
- **<FeatureName>** — owning SWCs: <SWC list>
---
## Per-Component Detail
### Feature: <FeatureName>
#### Component: <SWCName>
- **Type**: Application / Sensor-Actuator / Service / CDD / Composition
- **Source files**: `<file.c>`, `<file.h>`
- **Runnables**: `<SWC>_Init` (InitEvent), `<SWC>_MainRunnable` (TimingEvent, 10 ms), …
- **ASIL**: QM / A / B / C / D
##### Software Requirements (SWRs)
| Requirement ID | Source | Notes |
|----------------|----------------------------------|-----------------------------|
| SW-REQ-<MOD>-001 | `BatMon_App.c:42` (`@req`) | Implemented in MainRunnable |
| FSR-001 | `requirements/batmon.md` | Traced via `@satisfies` tag |
| … | … | … |
##### Port Interfaces
| Port Name | Dir | Type | Interface | DataElement / Operation | Source |
|-----------|-----|------|-------------------|--------------------------|----------------|
| RBattVoltage | R | S/R | BattVoltageIf | Voltage_mV | ARXML / line N |
| PLowVoltageWarning | P | S/R | LowVoltageWarningIf | Active | ARXML / line N |
| RNvMService | R | C/S | NvMService | ReadBlock, WriteBlock | RTE call site |
| … | … | … | … | … | … |
##### Dependencies
**SWC-to-SWC** (from composition / ARXML):
- Consumes `Voltage_mV` from `BattVoltage_SensorSWC` via `BattVoltageIf`
- Provides `Active` to `DisplayCtrl_AppSWC` via `LowVoltageWarningIf`
**SWC-to-BSW**:
- **Com** — `Rte_Write_PLowVoltageWarning_Active` (indirect via RTE → Com)
- **Dem** — `Rte_Call_RDemService_SetEventStatus`
- **NvM** — `Rte_Call_RNvMService_ReadBlock` (for calibration)
##### RTE Interfaces (actual API surface)
| RTE API | Direction | Used In | Notes |
|------------------------------------------------------|-----------|-------------------------|----------------------|
| `Rte_Read_RBattVoltage_Voltage_mV` | Receive | `BatMon_App.c:55` | Explicit S/R |
| `Rte_Write_PLowVoltageWarning_Active` | Send | `BatMon_App.c:71` | Explicit S/R |
| `Rte_Call_RDemService_SetEventStatus` | Invoke | `BatMon_App.c:78` | Synchronous |
| `Rte_Enter_EA_BatMonState` / `Rte_Exit_EA_BatMonState` | Mutex | `BatMon_App.c:62, 88` | Protects filter state |
| … | … | … | … |
(Repeat the `#### Component: …` block for every SWC in the feature, then repeat the `### Feature: …` block for every feature.)
---
## Cross-Cutting Maps
### BSW Module Usage
| BSW Module | Used By SWCs | Key APIs Called |
|------------|--------------|------------------|
| Com | … | … |
| Dem | … | … |
| NvM | … | … |
| … | … | … |
### Signal Flow
Plain-text box-and-arrow notation. Boxes are `[SWC / module]`. Arrows are `──signal──>` where `signal` is the DataElement, Operation, or BSW API. Use multi-line arrows for fan-out / fan-in.
```
[Sensor / ADC] ──────────────────> [SensorActSWC]
[SensorActSWC] ──Voltage_mV──────> [BatMon_AppSWC]
[BatMon_AppSWC] ──Active──────────> [DisplayCtrl_AppSWC]
[BatMon_AppSWC] ──SetEventStatus──> [Dem]
[BatMon_AppSWC] ──CAN signal──────> [Com]
```
### ASIL Zone Map
| Zone | ASIL | SWCs / Modules | Memory Section |
|-------------|------|--------------------------|----------------|
| Battery monitor | B | BatMon_AppSWC, BattVoltage_SensorSWC | `.text.asilB` |
| Display | QM | DisplayCtrl_AppSWC | `.text.qm` |
## Architectural Concerns
1. [CRITICAL] …
2. [MAJOR] …
3. [INFO] …
示例
输入: 车身控制单元(BCU)的代码仓库。使用 CMake 构建、EB Tresos、AUTOSAR Classic 4.3、ARM Cortex-M MCU。需求由 DOORS 管理,导出为 requirements/bcu.csv。ECU 的最高 ASIL 等级为 B(制动灯,依据 SG-BRAKELT-01)。
输出(写入 .autonomousguy/CODEBASE_MAP.md 的节选):
# Codebase Map — BCU_ECU
Generated: 2026-06-17
## ECU Overview
Body Control Unit for a passenger vehicle. Hosts exterior lighting (low beam, high beam,
brake, turn indicators), interior lighting, central locking, and wiper control. Target:
ARM Cortex-M class MCU. AUTOSAR Classic 4.3, EB Tresos 26. Highest ASIL: B (brake lights
allocated to SG-BRAKELT-01 — driver-visible brake indication). Requirements in DOORS,
exported as `requirements/bcu.csv`.
## Features
- **Exterior Lights**
- sub-feature: **Low Beam Light** — owning SWCs: LowBeam_AppSWC
- sub-feature: **High Beam Light** — owning SWCs: HighBeam_AppSWC
- sub-feature: **Brake Lights (ASIL B)**— owning SWCs: BrakeLight_AppSWC
- shared SWCs (all sub-features): LightSwitch_SensorSWC, LightOutput_ActuatorSWC, LightDiag_ServiceSWC
---
## Per-Component Detail
### Feature: Exterior Lights / Low Beam Light
#### Component: LowBeam_AppSWC
- **Type**: Application
- **Source files**: `LowBeam_App.c`, `LowBeam_App.h`
- **Runnables**: `LowBeam_App_Init` (InitEvent), `LowBeam_App_MainRunnable` (TimingEvent, 20 ms)
- **ASIL**: QM
##### Software Requirements (SWRs)
| Requirement ID | Source | Notes |
|---------------------|----------------------------------------|----------------------------------------------------|
| SW-REQ-LOWBEAM-001 | `LowBeam_App.c:24` (`@req`) | Activate low beam when switch position = ON / AUTO |
| SW-REQ-LOWBEAM-002 | `LowBeam_App.c:48` (`@req`) | Auto-on when ambient light < 200 lux for ≥ 2 s |
| SW-REQ-LOWBEAM-003 | `LowBeam_App.c:71` (`@implements`) | Disable when high beam active to prevent double-on |
| SYS-REQ-LIGHT-014 | `requirements/bcu.csv` row 14 | DOORS link via SWR-001 |
##### Port Interfaces
| Port Name | Dir | Type | Interface | DataElement / Operation | Source |
|--------------------|-----|------|---------------------|--------------------------|----------------|
| RSwitchPosition | R | S/R | LightSwitchIf | Position | ARXML |
| RAmbientLight_lux | R | S/R | AmbientLightIf | Illuminance_lux | ARXML |
| RHighBeamActive | R | S/R | HighBeamStateIf | Active | ARXML |
| PLowBeamRequest | P | S/R | LowBeamRequestIf | Active | ARXML |
##### Dependencies
**SWC-to-SWC**:
- Consumes `Position` from `LightSwitch_SensorSWC` via `LightSwitchIf`.
- Consumes `Illuminance_lux` from `AmbientLight_SensorSWC` via `AmbientLightIf`.
- Consumes `Active` from `HighBeam_AppSWC` via `HighBeamStateIf`.
- Provides `Active` to `LightOutput_ActuatorSWC` via `LowBeamRequestIf`.
**SWC-to-BSW**:
- None directly (no BSW calls; all I/O goes through the actuator SWC).
##### RTE Interfaces
| RTE API | Direction | Used In | Notes |
|-------------------------------------------------|-----------|--------------------------|--------------------|
| `Rte_Read_RSwitchPosition_Position` | Receive | `LowBeam_App.c:58` | Explicit S/R |
| `Rte_Read_RAmbientLight_lux_Illuminance_lux` | Receive | `LowBeam_App.c:62` | Explicit S/R |
| `Rte_Read_RHighBeamActive_Active` | Receive | `LowBeam_App.c:66` | Explicit S/R |
| `Rte_Write_PLowBeamRequest_Active` | Send | `LowBeam_App.c:104` | Explicit S/R |
---
### Feature: Exterior Lights / High Beam Light
#### Component: HighBeam_AppSWC
- **Type**: Application
- **Source files**: `HighBeam_App.c`, `HighBeam_App.h`
- **Runnables**: `HighBeam_App_Init` (InitEvent), `HighBeam_App_MainRunnable` (TimingEvent, 20 ms)
- **ASIL**: QM
##### Software Requirements (SWRs)
| Requirement ID | Source | Notes |
|----------------------|--------------------------------------|---------------------------------------------------|
| SW-REQ-HIBEAM-001 | `HighBeam_App.c:26` (`@req`) | Activate high beam on stalk push (latched) |
| SW-REQ-HIBEAM-002 | `HighBeam_App.c:52` (`@req`) | Deactivate on second stalk push or low beam off |
| SW-REQ-HIBEAM-003 | `HighBeam_App.c:78` (`@req`) | Flash-to-pass: 500 ms pulse on stalk pull |
| SW-REQ-HIBEAM-004 | `HighBeam_App.c:95` (`@implements`) | Auto-suppress above vehicle speed signal valid |
| SYS-REQ-LIGHT-021 | `requirements/bcu.csv` row 21 | DOORS link via SWR-001 |
##### Port Interfaces
| Port Name | Dir | Type | Interface | DataElement / Operation | Source |
|---------------------|-----|------|---------------------|--------------------------|----------------|
| RSwitchPosition | R | S/R | LightSwitchIf | Position | ARXML |
| RStalkEvent | R | S/R | StalkEventIf | Event | ARXML |
| RVehicleSpeed_kph | R | S/R | VehicleSpeedIf | Speed_kph | ARXML |
| PHighBeamRequest | P | S/R | HighBeamRequestIf | Active | ARXML |
| PHighBeamActive | P | S/R | HighBeamStateIf | Active | ARXML |
##### Dependencies
**SWC-to-SWC**:
- Consumes `Position` from `LightSwitch_SensorSWC` via `LightSwitchIf`.
- Consumes `Event` from `LightSwitch_SensorSWC` via `StalkEventIf`.
- Consumes `Speed_kph` from external `VehicleSpeed_GwSWC` via `VehicleSpeedIf` (CAN gateway).
- Provides `Active` to `LightOutput_ActuatorSWC` via `HighBeamRequestIf`.
- Provides `Active` to `LowBeam_AppSWC` via `HighBeamStateIf`.
**SWC-to-BSW**:
- None directly.
##### RTE Interfaces
| RTE API | Direction | Used In | Notes |
|------------------------------------------------------|-----------|--------------------------|--------------------|
| `Rte_Read_RSwitchPosition_Position` | Receive | `HighBeam_App.c:64` | Explicit S/R |
| `Rte_Read_RStalkEvent_Event` | Receive | `HighBeam_App.c:70` | Explicit S/R |
| `Rte_Read_RVehicleSpeed_kph_Speed_kph` | Receive | `HighBeam_App.c:103` | Explicit S/R |
| `Rte_Write_PHighBeamRequest_Active` | Send | `HighBeam_App.c:118` | Explicit S/R |
| `Rte_Write_PHighBeamActive_Active` | Send | `HighBeam_App.c:120` | State broadcast |
---
### Feature: Exterior Lights / Brake Lights (ASIL B)
#### Component: BrakeLight_AppSWC
- **Type**: Application
- **Source files**: `BrakeLight_App.c`, `BrakeLight_App.h`
- **Runnables**: `BrakeLight_App_Init` (InitEvent), `BrakeLight_App_MainRunnable` (TimingEvent, 10 ms)
- **ASIL**: B
##### Software Requirements (SWRs)
| Requirement ID | Source | Notes |
|------------------------|----------------------------------------|-------------------------------------------------------------|
| SW-REQ-BRAKELT-001 | `BrakeLight_App.c:30` (`@req`) | Activate brake lights when brake pedal pressed |
| SW-REQ-BRAKELT-002 | `BrakeLight_App.c:56` (`@req`) | FTTI ≤ 100 ms from pedal switch active to light request out |
| SW-REQ-BRAKELT-003 | `BrakeLight_App.c:78` (`@implements`) | Plausibility check vs CAN brake pressure signal |
| SW-REQ-BRAKELT-004 | `BrakeLight_App.c:115` (`@req`) | Fault reaction: force-on if input plausibility fails |
| FSR-BRAKELT-001 | `requirements/bcu.csv` row 47 | Functional Safety Requirement from SG-BRAKELT-01 |
| SG-BRAKELT-01 | `BrakeLight_App.h:9` (`@trace`) | Safety Goal: "BCU shall activate brake lights within 100 ms of brake pedal application" |
##### Port Interfaces
| Port Name | Dir | Type | Interface | DataElement / Operation | Source |
|------------------------|-----|------|------------------------|--------------------------|----------------|
| RBrakePedal_Switch | R | S/R | BrakePedalSwitchIf | Pressed | ARXML |
| RBrakePressure_bar | R | S/R | BrakePressureIf | Pressure_dbar | ARXML |
| PBrakeLightRequest | P | S/R | BrakeLightRequestIf | Active | ARXML |
| PBrakeLightFaultStatus | P | S/R | BrakeLightFaultIf | FaultActive | ARXML |
| RDemSetEvent | R | C/S | Dem_SetEventStatusIf | SetEventStatus | ARXML / RTE |
##### Dependencies
**SWC-to-SWC**:
- Consumes `Pressed` from `BrakePedal_SensorSWC` via `BrakePedalSwitchIf`.
- Consumes `Pressure_dbar` from `BrakePressure_GwSWC` (CAN gateway from ESP) via `BrakePressureIf`.
- Provides `Active` to `LightOutput_ActuatorSWC` via `BrakeLightRequestIf`.
- Provides `FaultActive` to `LightDiag_ServiceSWC` via `BrakeLightFaultIf`.
**SWC-to-BSW**:
- **Dem** — `Rte_Call_RDemSetEvent_SetEventStatus` for `DEM_EVENT_BRAKELT_PLAUSIBILITY`.
##### RTE Interfaces
| RTE API | Direction | Used In | Notes |
|----------------------------------------------------------|-----------|----------------------------|------------------------------------|
| `Rte_Read_RBrakePedal_Switch_Pressed` | Receive | `BrakeLight_App.c:88` | Explicit S/R, primary input |
| `Rte_Read_RBrakePressure_bar_Pressure_dbar` | Receive | `BrakeLight_App.c:92` | Plausibility cross-check input |
| `Rte_Write_PBrakeLightRequest_Active` | Send | `BrakeLight_App.c:131` | Explicit S/R |
| `Rte_Write_PBrakeLightFaultStatus_FaultActive` | Send | `BrakeLight_App.c:138` | Explicit S/R |
| `Rte_Call_RDemSetEvent_SetEventStatus` | Invoke | `BrakeLight_App.c:141` | Synchronous, ASIL-B event |
| `Rte_Enter_EA_BrakeLightState` / `Rte_Exit_EA_BrakeLightState` | Mutex | `BrakeLight_App.c:84, 144` | Protects debounce state from diag read |
---
### Feature: Exterior Lights / Shared Components
#### Component: LightSwitch_SensorSWC
- **Type**: Sensor/Actuator
- **Source files**: `LightSwitch_SA.c`, `LightSwitch_SA.h`
- **Runnables**: `SA_Init`, `SA_MainRunnable` (TimingEvent, 20 ms)
- **ASIL**: QM
##### Software Requirements (SWRs)
| Requirement ID | Source | Notes |
|------------------------|----------------------------------------|-----------------------------------------------|
| SW-REQ-LIGHTSW-001 | `LightSwitch_SA.c:18` (`@req`) | Map Dio pattern → Position enum (OFF/AUTO/LOW)|
| SW-REQ-LIGHTSW-002 | `LightSwitch_SA.c:44` (`@req`) | Debounce 40 ms (2 consecutive scans) |
| SW-REQ-LIGHTSW-003 | `LightSwitch_SA.c:71` (`@implements`) | Stalk pull/push edge → StalkEvent |
##### Port Interfaces
| Port Name | Dir | Type | Interface | DataElement / Operation | Source |
|------------------|-----|------|-----------------|--------------------------|----------------|
| PSwitchPosition | P | S/R | LightSwitchIf | Position | ARXML |
| PStalkEvent | P | S/R | StalkEventIf | Event | ARXML |
| RDio_ReadChannel | R | C/S | IoHwAbDioIf | ReadChannel | ARXML |
##### Dependencies
**SWC-to-SWC**: Provides `Position` to `LowBeam_AppSWC`, `HighBeam_AppSWC`; `Event` to `HighBeam_AppSWC`.
**SWC-to-BSW**: **IoHwAb** — `Rte_Call_RDio_ReadChannel_ReadChannel`.
##### RTE Interfaces
| RTE API | Direction | Used In | Notes |
|-----------------------------------------------|-----------|-------------------------|--------------|
| `Rte_Call_RDio_ReadChannel_ReadChannel` | Invoke | `LightSwitch_SA.c:62` | Synchronous |
| `Rte_Write_PSwitchPosition_Position` | Send | `LightSwitch_SA.c:88` | Explicit S/R |
| `Rte_Write_PStalkEvent_Event` | Send | `LightSwitch_SA.c:94` | Explicit S/R |
#### Component: LightOutput_ActuatorSWC
- **Type**: Sensor/Actuator
- **Source files**: `LightOutput_SA.c`, `LightOutput_SA.h`
- **Runnables**: `SA_Init`, `SA_MainRunnable` (TimingEvent, 10 ms)
- **ASIL**: B (inherits from BrakeLightRequest path; ASIL decomposition not claimed)
##### Software Requirements (SWRs)
| Requirement ID | Source | Notes |
|------------------------|----------------------------------------|----------------------------------------------------------|
| SW-REQ-LIGHTOUT-001 | `LightOutput_SA.c:22` (`@req`) | Drive Pwm/Dio outputs from Low/High/Brake request inputs |
| SW-REQ-LIGHTOUT-002 | `LightOutput_SA.c:64` (`@req`) | Read current sense; flag bulb-out |
| SW-REQ-LIGHTOUT-003 | `LightOutput_SA.c:91` (`@implements`) | Latency budget ≤ 10 ms (one task period) per FSR-BRAKELT-001|
##### Port Interfaces
| Port Name | Dir | Type | Interface | DataElement / Operation | Source |
|--------------------------|-----|------|------------------------|--------------------------|----------------|
| RLowBeamRequest | R | S/R | LowBeamRequestIf | Active | ARXML |
| RHighBeamRequest | R | S/R | HighBeamRequestIf | Active | ARXML |
| RBrakeLightRequest | R | S/R | BrakeLightRequestIf | Active | ARXML |
| PBulbStatus | P | S/R | BulbStatusIf | OutBitfield | ARXML |
| RDio_WriteChannel | R | C/S | IoHwAbDioIf | WriteChannel | ARXML |
| RAdc_ReadCurrentSense | R | C/S | IoHwAbAdcIf | ReadChannel | ARXML |
##### Dependencies
**SWC-to-SWC**: Consumes from `LowBeam_AppSWC`, `HighBeam_AppSWC`, `BrakeLight_AppSWC`. Provides `OutBitfield` to `LightDiag_ServiceSWC`.
**SWC-to-BSW**: **IoHwAb** — Dio writes for bulb drives, ADC reads for current sense.
##### RTE Interfaces
| RTE API | Direction | Used In | Notes |
|------------------------------------------------------|-----------|--------------------------|------------------------|
| `Rte_Read_RLowBeamRequest_Active` | Receive | `LightOutput_SA.c:104` | Explicit S/R |
| `Rte_Read_RHighBeamRequest_Active` | Receive | `LightOutput_SA.c:108` | Explicit S/R |
| `Rte_Read_RBrakeLightRequest_Active` | Receive | `LightOutput_SA.c:112` | Explicit S/R, ASIL-B |
| `Rte_Call_RDio_WriteChannel_WriteChannel` | Invoke | `LightOutput_SA.c:128,134,140` | Per output bit |
| `Rte_Call_RAdc_ReadCurrentSense_ReadChannel` | Invoke | `LightOutput_SA.c:160` | Bulb-out detection |
| `Rte_Write_PBulbStatus_OutBitfield` | Send | `LightOutput_SA.c:178` | Explicit S/R |
#### Component: LightDiag_ServiceSWC
- **Type**: Service
- **Source files**: `LightDiag_Svc.c`, `LightDiag_Svc.h`
- **Runnables**: `Svc_Init`, `Svc_MonitorRunnable` (TimingEvent, 100 ms)
- **ASIL**: QM (bulb-out DTCs are non-safety) — except `DEM_EVENT_BRAKELT_BULB_OUT` which inherits ASIL-B
##### Software Requirements (SWRs)
| Requirement ID | Source | Notes |
|----------------------|--------------------------------------|------------------------------------------------------|
| SW-REQ-LIGHTDIAG-001 | `LightDiag_Svc.c:20` (`@req`) | Report bulb-out per circuit via Dem |
| SW-REQ-LIGHTDIAG-002 | `LightDiag_Svc.c:48` (`@req`) | Debounce 3-of-5 reads before raising DTC |
| SW-REQ-LIGHTDIAG-003 | `LightDiag_Svc.c:71` (`@implements`) | Brake-light bulb DTC requires NvM persistence (ASIL-B)|
##### Port Interfaces
| Port Name | Dir | Type | Interface | DataElement / Operation | Source |
|------------------------|-----|------|------------------------|--------------------------|----------------|
| RBulbStatus | R | S/R | BulbStatusIf | OutBitfield | ARXML |
| RBrakeLightFaultStatus | R | S/R | BrakeLightFaultIf | FaultActive | ARXML |
| RDemSetEvent | R | C/S | Dem_SetEventStatusIf | SetEventStatus | ARXML / RTE |
##### Dependencies
**SWC-to-SWC**: Consumes from `LightOutput_ActuatorSWC`, `BrakeLight_AppSWC`.
**SWC-to-BSW**: **Dem** (set event status for bulb-out and plausibility DTCs).
##### RTE Interfaces
| RTE API | Direction | Used In | Notes |
|--------------------------------------------------|-----------|--------------------------|--------------------------|
| `Rte_Read_RBulbStatus_OutBitfield` | Receive | `LightDiag_Svc.c:88` | Explicit S/R |
| `Rte_Read_RBrakeLightFaultStatus_FaultActive` | Receive | `LightDiag_Svc.c:92` | Explicit S/R |
| `Rte_Call_RDemSetEvent_SetEventStatus` | Invoke | `LightDiag_Svc.c:110,118,124` | One call per DTC ID |
---
## Cross-Cutting Maps
### BSW Module Usage
| BSW Module | Used By SWCs | Key APIs Called |
|------------|--------------------------------------------------------|-------------------------------------------------------------------|
| IoHwAb | LightSwitch_SensorSWC, LightOutput_ActuatorSWC | `Rte_Call_RDio_ReadChannel`, `Rte_Call_RDio_WriteChannel`, `Rte_Call_RAdc_ReadCurrentSense` |
| Dem | BrakeLight_AppSWC, LightDiag_ServiceSWC | `Rte_Call_RDemSetEvent_SetEventStatus` |
| Com | (indirect — `VehicleSpeed_GwSWC`, `BrakePressure_GwSWC` consume CAN signals; not detailed here) | (via PduR/Com routing) |
### Signal Flow
```
INPUTS
[Dio inputs] ──────────────────────> [LightSwitch_SensorSWC]
[Brake pedal switch] ──────────────────────> [BrakePedal_SensorSWC]
[CAN: ESP brake pressure] ──────────────────────> [BrakePressure_GwSWC]
[CAN: vehicle speed] ──────────────────────> [VehicleSpeed_GwSWC]
SWITCH / INPUT DISTRIBUTION
[LightSwitch_SensorSWC] ──Position────────────> [LowBeam_AppSWC]
[LightSwitch_SensorSWC] ──Position, StalkEvent─> [HighBeam_AppSWC]
[VehicleSpeed_GwSWC] ──Speed_kph───────────> [HighBeam_AppSWC]
[HighBeam_AppSWC] ──HighBeamState.Active─> [LowBeam_AppSWC] (suppress low beam when high active)
BRAKE LIGHT CHAIN (ASIL B)
[BrakePedal_SensorSWC] ──Pressed─────────────> [BrakeLight_AppSWC]
[BrakePressure_GwSWC] ──Pressure_dbar───────> [BrakeLight_AppSWC] (plausibility cross-check)
REQUEST AGGREGATION
[LowBeam_AppSWC] ──LowBeamRequest──┐
[HighBeam_AppSWC] ──HighBeamRequest──┼──> [LightOutput_ActuatorSWC]
[BrakeLight_AppSWC] ──BrakeLightRequest┘
ACTUATION
[LightOutput_ActuatorSWC] ──Dio_WriteChannel───> [Bulb outputs]
[LightOutput_ActuatorSWC] ──Adc_ReadChannel────> (current sense, internal)
DIAGNOSTICS
[LightOutput_ActuatorSWC] ──BulbStatus.OutBitfield─> [LightDiag_ServiceSWC]
[BrakeLight_AppSWC] ──FaultActive──────────> [LightDiag_ServiceSWC]
[LightDiag_ServiceSWC] ──Dem_SetEventStatus──> [Dem]
[BrakeLight_AppSWC] ──Dem_SetEventStatus──> [Dem] (ASIL-B event, direct)
```
### ASIL Zone Map
| Zone | ASIL | SWCs | Memory Section |
|-------------------------|------|--------------------------------------------------|----------------|
| Brake lights (safety) | B | BrakeLight_AppSWC, LightOutput_ActuatorSWC (mixed) | `.text.asilB` |
| Low / high beam | QM | LowBeam_AppSWC, HighBeam_AppSWC, LightSwitch_SensorSWC | `.text.qm` |
| Diagnostic | B/QM | LightDiag_ServiceSWC (brake DTC = B, others = QM) | `.text.asilB` (brake-related), `.text.qm` (others) |
## Architectural Concerns
1. **[CRITICAL]** `BrakeLight_App.c:131` writes `Rte_Write_PBrakeLightRequest_Active` while `LightOutput_ActuatorSWC` runs at the same 10 ms period in a different OS task. End-to-end FTTI is at risk of exceeding 100 ms (SW-REQ-BRAKELT-002) if both tasks land on the same priority without task-chaining; verify in OS configuration.
2. **[MAJOR]** `LightOutput_ActuatorSWC` is mixed-ASIL (brake = B, low/high = QM) but lives in a single OS-Application. Either (a) split into two SWCs by ASIL, or (b) confirm Freedom-from-Interference via memory-protection and Dependent Failure Analysis (ISO 26262-9 §5).
3. **[MAJOR]** `s_BrakeLight_DebounceCount` accessed from `BrakeLight_App_MainRunnable` and the diagnostic read path (`LightDiag_Svc.c:92`) — `EA_BrakeLightState` is declared but only entered on the writer side; the reader needs the same `Rte_Enter_EA_BrakeLightState` wrap.
4. **[INFO]** `HighBeam_AppSWC` requirement SW-REQ-HIBEAM-004 ("auto-suppress above vehicle speed signal valid") has no test case referenced in `requirements/bcu.csv` — flag to the traceability skill.
5. **[INFO]** `LightDiag_ServiceSWC` Dem event IDs are referenced by macro name but their numeric assignment lives in `Dem_Cfg.h` (generated). After regeneration the macro list should be cross-checked.
HTML 报告(可选,增补内容)
.autonomousguy/CODEBASE_MAP.md 始终是主要产物。此外,在映射内容较多时,可提供一份独立的 HTML 配套报告,以便快速浏览组件索引和架构问题。它绝不会取代 Markdown 映射。
结构 - 渐进式展示,精简而不冗长:
- 页眉(简洁): 项目名称、时间戳、“Codebase analysis”、范围(平台 CP/AP/Mixed、AUTOSAR 版本)。
- 第 1 层 - 摘要横幅(始终可见): 一行显示 4-5 个数字 - 已映射的组件、已使用的 BSW 模块、架构问题、未追踪的组件(无 SWR)、当前最高 ASIL 等级。两秒内即可了解概况。
- 第 2 层 - 分组表格(便于浏览): 每个架构问题(或每个组件)占一行。仅保留精简的列 - 位置、组件/区域、单行描述、严重性标签(Critical/Major/Info)、“有修复措施/行动”指示标记。行内不包含详细文本。添加搜索/筛选框和可排序的列。
- 第 3 层 - 可展开的详情(
<details>,默认折叠): 每个问题包括说明、证据(文件:行)和建议措施;每个组件包括其端口、依赖项和 RTE 表面。 - 页脚(简洁): 局限性、无法验证的内容、推断数据免责声明(端口根据 RTE 调用点推断等)。
样式: 使用一个独立的 .html 文件;CSS 内联;附带一个小型排序/筛选脚本;不依赖外部 CSS / JS / 字体。仅使用 ASCII 字符,不使用长破折号。严重性和状态用小型彩色标签显示,而不是大段文字。如有疑问,将详情放入第 3 层,并精简第 1-2 层。使用 references/html-report-template.html 作为模板:填写页眉、第 1 层统计单元格、每个问题/组件对应的一行精简表格,以及每个问题/组件对应的一个折叠 <details> 块。
保存位置:
- 从工作目录向上遍历,通过
.git或其他明确的项目标记检测项目根目录。 - 找到项目根目录: 写入
<project-root>/analysis/,如文件夹不存在则创建。 - 未找到项目根目录(可能是在项目外运行全局安装):不要猜测,也不要静默写入 home/cwd。询问一次将
analysis/创建在哪里,并将当前目录下的./analysis/作为默认选项;本次会话后续操作沿用该选择。 - 始终报告写入文件的确切路径。
- 如果检测到 git 仓库,且
analysis/尚未被忽略,则建议将analysis/添加到.gitignore。
文件名:analysis/codebase-analysis-<short-timestamp>.html(例如 codebase-analysis-20260621-1930.html),确保重复运行不会覆盖。