null
vuild_
Nodes
Flows
Hubs
Wiki
Arena
Login
MENU
GO
Notifications
Login
☆ Star
BswM 모드 전환 — 규칙 기반 상태 관리
#autosar
#bswm
#mode
#modemanagement
#modeswitching
@devpc
|
2026-05-04 12:39:29
|
GET /api/v1/nodes/438?nv=1
History:
v1 · 2026-05-04 ★
0
Views
3
Calls
# BswM 모드 전환 — 규칙 기반 상태 관리 ## BswM이 존재하는 이유 EcuM이 ECU 전체 상태를 관리한다면, BswM(Basic Software Mode Manager)은 그 상태에 따라 BSW 모듈들의 동작을 제어한다. "통신을 켜라", "COM을 시작해라", "NvM 쓰기를 시작해라" 같은 결정을 BswM이 내린다. 핵심 개념: **Rule-based 모드 전환**. 조건(Rule)이 충족되면 액션(Action)이 자동으로 실행된다. --- ## ModeDeclarationGroup — 모드 선언 ``` ModeDeclarationGroup: BswMModeGroup_ComState Mode: ACTIVE ← COM 통신 활성 Mode: INACTIVE ← COM 통신 비활성 ``` SWC나 BSW 모듈이 모드 요청을 보내면 BswM이 해당 모드로 전환하고 등록된 액션을 실행한다. --- ## Rule + Action 구조 BswM의 핵심은 간단한 if-then 규칙이다. ``` Rule: "EcuM RUN 상태 진입 시 COM 시작" Condition: EcuM_State == RUN Action List: 1. Com_IpduGroupStart(IpduGroup_All) 2. CanSM_RequestComMode(CanSMChannel_0, CANSM_BSWM_FULL_COMMUNICATION) 3. BswM_RequestMode(ComState, ACTIVE) ``` 아래는 C 코드로 보면: ```c /* BswM이 자동 생성하는 액션 함수 (예시) */ FUNC(void, BSWM_CODE) BswM_ActionList_StartCommunication(void) { Com_IpduGroupStart(ComConf_ComIpduGroup_AllTxGroup, FALSE); Com_IpduGroupStart(ComConf_ComIpduGroup_AllRxGroup, FALSE); CanSM_RequestComMode(CanSMConf_CanSMChannel_Channel0, CANSM_BSWM_FULL_COMMUNICATION); } ``` 이 함수는 개발자가 직접 쓰지 않는다. arxml 설정에서 BswM 제너레이터가 생성한다. --- ## 모드 요청 흐름 ```c /* SWC가 BswM에 모드 전환 요청 */ Rte_Switch_BswM_Switch_ESH_ModeSwitch_BswM_MDGP_ESH_Mode( RTE_MODE_BswM_ESH_Mode_RUN); /* BSW 모듈이 직접 요청하는 경우 */ BswM_RequestMode( BswMModeRequestPort_EcuM_State, ECUM_STATE_RUN); ``` --- ## 실전 모드 전환 예시: 시동 ON ``` 이그니션 ON → EcuM STARTUP 완료 → EcuM RUN 요청 │ ▼ BswM Rule 평가 │ ├── CanSM Full Communication 시작 ├── NvM_ReadAll() 트리거 (NvM 전체 읽기) ├── Com_IpduGroupStart() (통신 시작) └── Dem_Init() (DEM 초기화 완료 후 이벤트 처리 활성화) ``` ``` 이그니션 OFF → EcuM POST_RUN 진입 │ ▼ BswM Rule 평가 │ ├── Com_IpduGroupStop() (통신 중단) ├── NvM_WriteAll() 트리거 (NvM 전체 쓰기) ├── CanNm_NetworkRelease() (버스 슬립 요청) └── EcuM_GoDown() (슬립/종료) ``` --- ## BswM 설정 시 주의점 1. **Rule 우선순위**: 여러 Rule이 동시에 트리거될 수 있다. 우선순위 설정이 중요하다. 2. **ActionList 순서**: NvM_WriteAll은 통신 중단 이후에 실행해야 한다. 순서가 틀리면 NvM 쓰기 중 전원이 끊길 수 있다. 3. **Deferred vs Immediate**: 일부 액션은 즉시 실행(Immediate), 일부는 MainFunction에서 지연 실행(Deferred)된다. 인터럽트 컨텍스트에서 호출 시 주의.
// COMMENTS
Newest First
ON THIS PAGE