mcpField
C
codebase-analysis

codebase-analysis

github.com/ptsilivis开发3863 次安装17 周前更新
代码仓库

关于 codebase-analysis

面向嵌入式汽车软件工程师的 AUTOSAR 代码库分析技能,可对陌生仓库建立按功能和组件组织的结构化地图。涵盖平台识别、需求追溯、接口依赖及安全分区,并标出待确认项。

主要功能

  1. 01识别 Classic、Adaptive 与混合 AUTOSAR 平台
  2. 02按功能和 SWC 组织仓库地图
  3. 03提取需求 ID、端口和 RTE 接口
  4. 04梳理 SWC 与 BSW 依赖及信号流
  5. 05记录 ASIL 分区和架构隐患

适用场景

  1. 01新团队成员接手陌生 ECU 仓库
  2. 02检查需求追溯与组件接口
  3. 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 导出附属文件)。

说明

操作原则(适用于每次响应)

在单次处理中自主完成工作,无需后续提示:

  1. 自主确定范围。 梳理你能看到的整个仓库,而不只是指定目录。如果发现即时请求范围以外的组件、信号或问题,也要纳入并说明范围有所扩大。
  2. 输出可直接支持决策。 每项架构问题都要给出完整结论:问题是什么、为何重要(安全性/可维护性),以及建议采取的行动,以便工程师无需后续询问即可着手处理。
  3. 返回前自检。 编写地图前,核实其内部一致性:信号流的每个端点都应是已映射的组件,每个 SWC 的端口都应与其 RTE 调用列表相符,ASIL 分区不得与各组件的 ASIL 相矛盾。单独一行说明结果:Verified against: <checks run>; could not verify: <generated config, external requirement tools, runtime behavior>。
  4. 置信度与信息缺口。 将推断出的映射标记为推断结果(例如,端口根据 RTE 调用点推导,而非来自 ARXML),说明假设,并指出需要人工确认的内容。
0. 首先识别平台

在绘制映射前,判断仓库属于 Classic 还是 Adaptive AUTOSAR,并将结果记录在地图的 ECU 概览中:

  • Classic (CP) 特征(默认):.arxml ECU/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> 块。

保存位置:

  1. 从工作目录向上遍历,通过 .git 或其他明确的项目标记检测项目根目录。
  2. 找到项目根目录: 写入 <project-root>/analysis/,如文件夹不存在则创建。
  3. 未找到项目根目录(可能是在项目外运行全局安装):不要猜测,也不要静默写入 home/cwd。询问一次将 analysis/ 创建在哪里,并将当前目录下的 ./analysis/ 作为默认选项;本次会话后续操作沿用该选择。
  4. 始终报告写入文件的确切路径。
  5. 如果检测到 git 仓库,且 analysis/ 尚未被忽略,则建议将 analysis/ 添加到 .gitignore。

文件名:analysis/codebase-analysis-<short-timestamp>.html(例如 codebase-analysis-20260621-1930.html),确保重复运行不会覆盖。

评论

支持 Markdown