Skip to content

AUTOSAR Mode 실습#

0. 목차#

  1. Project 생성
  2. Autosar 파일 생성
  3. SW component / Interface / Data Type / Data Mapping Set 생성
  4. SW Component 설정 (Data Mapping / Port 생성 / Runnable 생성)
  5. Composition 설정 (SWC 연결)
  6. 실제 하드웨어 포트 추가 (SW05)
  7. Harmonize
  8. Os Task 추가 & Os Task Mapping
  9. Service I/O 연결
  10. C coding
  11. Build

1. Project 생성#


우선 Project Import 과정부터 진행한다. FileImport를 클릭한다.

2

그 후, GeneralExisting Projects into Workspace를 선택한 후, Next를 클릭한다.

3

Base Project를 browse 버튼을 통해 가져온 뒤, 아래의 Copy projects into workspace를 선택한다. 모든 설정을 마쳤다면 Finish 버튼을 통해 마무리 한다.

4


2. Autosar 파일 생성#


AUTOSAR file을 추가한다. ConfigurationSystemSwcd_App을 우클릭하여 NewAUTOSAR File을 클릭하여 새로운 AUTOSAR File을 생성한다.

5

File name을 App_ModeTest.arxml로 설정한 후 Finish를 눌러준다.

6


3. SW component / Interface / Data Type / Data Mapping Set 생성#


새로운 SW Component Type을 2개 생성한다.

7

첫 번째 Software Component의 이름을 SWC_ModeTest로 설정하고 Supports Multiple InstantiatiomFalse로 설정한다.

8

두 번째 Software Component의 이름을 SWC_ModeManager로 설정하고 Supports Multiple InstantiatiomFalse로 설정한다.

9

Sender-Receiver Interface를 생성한다.

10

인터페이스 이름을 If_ModeRequest로 입력해 준다.

11

Mode Switch Interface를 생성한다.

12

인터페이스 이름을 If_ModeUse로 입력해 준다.

13

Application Primitive Data Type을 새로 생성한다.

14

데이터 타입 이름을 ADT_ModeTest로 입력하고, CategoryValue로 설정한다.

15

데이터 타입과 내부 상태 값을 매핑하기 위한 Compu Method를 생성해야 한다.

16

Compu Method를 새로 생성한다.

17

이름을 CM_ModeTest로 입력하고, CategoryTEXTTABLE로 설정한다.

18

Compu Direction 항목에서 Internal To Phys를 선택한 뒤, New 버튼을 세 번 클릭하여 MODE_READY, MODE_A, MODE_B 라벨을 각각 추가해 준다.

19

Compu Method 설정이 완료되었으므로, 다시 ADT_ModeTest 화면으로 돌아와 생성한 CM을 지정해 준다.

20

이전 단계에서 생성한 CM_ModeTest를 선택하고 OK를 눌러 적용한다.

21

If_ModeRequest 인터페이스 설정 화면으로 이동하여, 인터페이스에 적용할 데이터 요소를 추가하기 위해 New를 클릭한다.

22

Short NameModeTest를 입력하고, Type 필드 옆의 ... 버튼을 클릭한다.

23

방금 전 생성한 ADT_ModeTest 타입을 찾아서 선택한 뒤 OK를 누른다.

24

If_ModeUse 인터페이스를 사용하기 위해서는 Mode Declaration Group Prototype이 정의되어 있어야 한다.

25

따라서 새로운 Mode Declaration Group을 생성한다.

26

Short NameMDG_ModeTest를 입력하고, CategoryEXPLICIT_ORDER로 설정해 준다.

27

해당 그룹 안에 선언될 Mode Declaration(상태 목록)들을 정의한다.

28

+ 버튼을 눌러 모드를 추가하고 각각 Short NameMODE_READY, MODE_A, MODE_B로, Value0, 1, 2로 지정해 준다.

29

처음 화면으로 돌아와, Initial Mode(초기 모드) 항목을 지정하기 위해 Browse 버튼을 클릭한다.

30

초기 모드로 사용할 MODE_READY를 선택하고 OK를 클릭한다.

31

모드 전환 시의 기본값(On Transition Value)을 10으로 설정해 준다.

32

If_ModeUse 인터페이스로 돌아온 뒤, Mode Declaration Group Prototype 탭을 선택한다.

33

Short Name을 MDGP_ModeTest로 설정하고 Type을 지정해 주기 위해 ... 버튼을 클릭한다.

34

앞서 정의해 놓은 MDG_ModeTest 타입을 선택하고 OK를 눌러 적용한다.

35

인터페이스에 데이터 타입을 연결하는 것뿐만 아니라, 해당 데이터 타입이 실제로 어떤 하드웨어 및 기본 데이터 타입(uint 등)과 매핑되는지 설정하기 위해 Data Type Mapping Set을 생성한다.

36

Short NameDTMS_ModeTest로 지정한 후, Data Type Maps 영역에서 New를 클릭하고 Application Data Type... 버튼을 클릭한다.

37

ADT_ModeTest를 선택하고 OK를 누른다.

38

Implementation Data Type ... 버튼을 클릭한다.

39

검색 창에 uint를 입력하여 uint8 타입을 선택하고 OK를 누른다.

40

Mode Request Type Maps 탭에서 New를 클릭한 후, Mode Group ...을 클릭한다.

41

MDG_ModeTest를 선택하고 OK를 누른다.

42

Implementation Data Type ... 버튼을 클릭한다.

43

검색 창에 uint를 검색하여 uint32를 선택하고 OK를 눌러 설정을 마무리한다.

44

생성한 Data TypeMode Group이 각각 uint8, uint32와 같이 실제 하드웨어 데이터 타입으로 정상적으로 매핑되었는지 최종 확인한다.

45


4. SW Component 설정 (Data Mapping / Port 생성 / Runnable 생성)#


SWC_ModeTest#

이제 작성 중인 각각의 SW Component(SWC)에 데이터 타입 매핑과 모드 선언 그룹 세트를 적용해 주어야 한다.

46

SWC_ModeTest 컴포넌트 설정 화면에서 Data Type Mapping 항목을 클릭한다.

47

Data Type ... 버튼을 클릭한다.

48

이전 장에서 생성해 두었던 DTMS_ModeTest를 선택하고 Add 버튼을 클릭한다.

49

매핑 정보가 정상적으로 등록되었는지 확인한 뒤 OK를 눌러 준다.

50

Overview 탭으로 이동한다.

51

Included Mode Declaration Group Sets 항목을 클릭해 준다.

52

ModeDeclaration Group ... 버튼을 클릭한다.

53

우리가 정의해 놓은 MDG_ModeTest를 선택한 뒤 Add를 누른다.

54

포함된 모드 선언 그룹 세트를 확인하고 OK를 눌러 설정을 저장한다.

55

SWC_ModeTest에 포트를 생성하기 위해, Ports 탭으로 이동한 뒤 + 버튼을 클릭하고 Sender Receiver InterfaceSender를 클릭하여 포트를 생성한다.

56

인터페이스 선택 창에서 If_ModeRequest를 선택한 뒤 OK를 누른다.

57

생성된 포트를 더블클릭하여 세부 설정 창을 연다. Short NameP_ModeRequest로 수정한 뒤, 아래 Data Elements 리스트의 ModeTest 요소에 대해 Enable Provide Com Specs를 체크하고, 이어서 Init Value 항목에서 Numerical Value Specification을 체크해 준다.

58

+ 버튼을 클릭하고 Mode Switch InterfaceMode Receiver를 클릭하여 새로운 포트를 생성해 준다.

59

인터페이스 창에서 If_ModeUse를 선택하고 OK를 누른다.

60

생성된 포트를 더블클릭하여 Short NameP_ModeUse로 수정한다. 그 후 Mode Group 리스트의 ModeDeclarationGroupPrototype 요소에 대해 Enable Provide Com Specs를 체크하고, Enhanced Mode ApiSupports Asynchronous Mode Switch 속성을 모두 true로 설정한다.

61

+ 버튼을 클릭하고 Client Server InterfaceClient를 선택하여 클라이언트 포트를 생성해 준다.

62

인터페이스 검색창에 io를 입력하여 하드웨어 추상화 관련 인터페이스인 IoHWAb_If_DigDir을 선택하고 OK를 누른다.

63

이 과정을 총 3번 반복하여 동일한 형태의 Client 포트를 3개 만들어 준다.

64

첫 번째 Client 포트의 Short NameR_LED_Red로 수정한다. 아래 Operations 항목에서 WriteDirect를 선택하고 Enable Required Com Specs를 체크해 준다.

65

두 번째 Client 포트의 Short NameR_SW05로 설정한다. Operations 항목에서는 입력 핀이므로 ReadDirect를 지정하고 Enable Required Com Specs를 체크한다.

66

세 번째 Client 포트의 Short NameR_SW06으로 설정하고, 역시 Operations 리스트에서 ReadDirect를 선택한 뒤 Enable Required Com Specs를 체크해 준다.

67

동작 코드가 들어갈 Runnable을 생성하기 위해 Runnables 탭으로 이동한다. + 버튼을 클릭하여 새로운 Runnable을 추가하고, Short NameRE_ModeRequest, 실행 함수 심볼(Symbol)은 ModeRequest_func로 입력한다. 그리고 동시에 호출되지 않도록 Can Be Invoked Concurrently 옵션은 false로 설정해 준다.

68

이 Runnable이 주기적으로 실행되도록 이벤트를 매핑한다. RTE Event 항목 아래의 Add를 클릭한다.

69

이벤트 종류로 Timing Event를 선택한 뒤 OK를 누른다.

70

새로 추가된 주기적 타이밍 이벤트(Timing Event - 5 msec)를 선택하고 Edit 버튼을 클릭한다.

71

주기(Period)를 기존의 5ms에서 100 msec로 수정하고 OK를 누른다.

72

다음으로 Operation / Mode / Trigger Access 항목에서 Add를 클릭한다.

73

Synchronous Server Call Points으로 R_SW05.ReadDirectR_SW06.ReadDirect를 Ctrl 키를 누른 상태에서 동시에 선택한 후 OK를 눌러 추가한다.

74

다음으로 Data / Parameter Access 영역에서 Add를 클릭한다.

75

Data Send Points 목록에서 P_ModeRequest.ModeTest를 선택하고 OK를 눌러준다.

76

모드 A 진입 시 동작할 Runnable을 추가하기 위해 Runnables 탭에서 다시 +를 클릭한다. Short NameRE_Mode_A, SymbolMode_A_func로 입력하고 Can Be Invoked Concurrentlyfalse로 설정한다.

77

이 Runnable이 주기적으로 실행되도록 이벤트를 매핑한다. RTE Event 항목 아래의 Add를 클릭한다.

78

모드가 변경될 때 실행되는 이벤트를 지정해야 하므로, Swc Mode Switch Event를 선택하고 세부 모드로 Entry - R_ModeUse.ModeDeclarationGroupPrototype.MODE_A를 찾아서 클릭한 뒤 OK를 누른다.

79

다음으로 Operation / Mode / Trigger Access 항목에서 Add를 클릭한다.

80

LED 제어를 위해 Synchronous Server Call Points에서 R_LED_Red.WriteDirect를 선택한 후 OK를 누른다.

81

이어서 모드 B 진입 시 동작할 Runnable을 위해 +를 클릭한다. Short NameRE_Mode_B, SymbolMode_B_func로 입력하고 Can Be Invoked Concurrentlyfalse로 설정한다.

82

이 Runnable이 주기적으로 실행되도록 이벤트를 매핑한다. RTE Event 항목 아래의 Add를 클릭한다.

83

Swc Mode Switch Event를 선택하고 이번에는 모드 B 진입을 감지하도록 Entry - R_ModeUse.ModeDeclarationGroupPrototype.MODE_B를 선택한 뒤 OK를 누른다.

84

다음으로 Operation / Mode / Trigger Access 항목에서 Add를 클릭한다.

85

LED 제어를 위해 Synchronous Server Call Points에서 R_LED_Red.WriteDirect를 선택한 후 OK를 누른다.

86


SWC_ModeManager#


이제 SWC_ModeTest에 대한 컴포넌트 모델링이 완료되었다. 이어서 SWC_ModeManager 컴포넌트 탭으로 전환한 후, 동일하게 Data Type Mappings 설정을 시작한다.

87

Data Type... 버튼을 클릭한다.

88

이전 장에서 생성해 두었던 DTMS_ModeTest를 선택하고 Add 버튼을 클릭한다.

89

매핑 정보가 정상적으로 등록되었는지 확인한 뒤 OK를 눌러 준다.

90

Overview 탭으로 전환하여 Included Mode Declaration Group Sets를 클릭한다.

91

ModeDeclaration Group ... 버튼을 클릭한다.

92

우리가 정의해 놓은 MDG_ModeTest를 선택한 뒤 Add를 누른다.

93

포함된 모드 선언 그룹 세트를 확인하고 OK를 눌러 설정을 저장한다.

94

Ports 탭으로 이동하여 + 버튼을 클릭한 뒤 Sender Receiver InterfaceReceiver를 선택하여 입력 포트를 하나 생성해 준다.

95

인터페이스 선택 창에서 If_ModeRequest를 선택한 뒤 OK를 누른다.

96

생성된 포트를 더블클릭한다. Short NameR_ModeRequest로 수정한 뒤, 아래 Data Elements 리스트의 ModeTest 요소에 대해 Enable Provide Com Specs를 체크하고, Handle Never ReceivedEnable Update 항목을 모두 true로 설정한다.

97

스크롤을 아래로 더 내려서 Init Value 속성 밑의 Numerical Value Specification을 체크해 준다.

98

다시 + 버튼을 눌러 포트를 추가하고, Mode Switch InterfaceMode Sender를 선택해 준다.

99

인터페이스 창에서 If_ModeUse를 선택하고 OK를 누른다.

100

생성된 포트를 더블클릭하여 Short NameR_ModeUse로 변경한다. Mode Group 영역에서 ModeDeclarationGroupPrototype에 대해 Enable Provide Com Specs를 체크한 후, Queue Length1로 입력하고 Enhanced Mode Apitrue로 설정한다.

101

Runnables 탭으로 전환하여 + 버튼을 누른다. 새로 추가된 Runnable의 Short NameRE_ModeManager를 적고, 심볼(Symbol)에는 ModeManager_func를 입력한다. 마찬가지로 Can Be Invoked Concurrentlyfalse로 지정해 준다.

102

이 Runnable이 주기적으로 실행되도록 이벤트를 매핑한다. RTE Event 항목 아래의 Add를 클릭한다.

103

포트로부터 새로운 모드 요청 데이터를 수신했을 때 구동되도록, Data Received Event 항목에서 R_ModeRequest.ModeTest를 지정하고 OK를 클릭한다.

104

다음으로 Operation / Mode / Trigger Access 항목에서 Add를 클릭한다.

105

모드 전환 제어 지점인 Mode Switch Points 목록에서 R_ModeUse.ModeDeclarationGroupPrototype을 선택하고 OK를 눌러준다.

106

다음으로 Data / Parameter Access 영역에서 Add를 클릭한다.

107

Data Receive Point By Arguments 리스트에서 R_ModeRequest.ModeTest를 선택하고 OK를 클릭해 저장한다.

108


5. Composition 설정 (SWC 연결)#


해당 경로로 이동하여 CSWC_RootComposition을 더블클릭하여 연다.

109

Components and Ports로 이동하고, Components 영역 아래의 + 아이콘을 클릭한다.

110

추가할 SWC 리스트에서 SWC_ModeManagerSWC_ModeTest를 찾아 모두 체크한 뒤 OK를 누른다.

111

Automatic Connection 탭으로 전환한 후, SWC_ModeManager를 선택하고 오른쪽 위의 + 버튼을 클릭한다.

112

자동으로 연결 가능한 관계인 P_ModeRequest 포트와 R_ModeUse 포트가 정상적으로 체크되었는지 확인한 뒤 OK를 누른다.

113

창 왼쪽 위에 위치한 보라색 아이콘 버튼을 클릭한다.

114

ECU Software Components Mapping을 클릭한다.

115

확인 창이 나타나면 OK를 클릭한다.

116

2개의 AssemblySwConnector와 2개의 SwComponentPrototype이 추가되는 것을 확인한 뒤 Apply 버튼을 눌러 적용한다.

117


6. 실제 하드웨어 포트 추가 (SW05)#


창 왼쪽 상단에 있는 초록색 버튼을 누른다.

118

IoHWAb 1.7.1 모듈을 클릭한다.

119

All Contents 탭을 열고 IoHwAbConfigIoHwAbDigitalDirectLogical 항목을 더블클릭하여 열어 준다.

120

+ 버튼을 클릭하여 설정을 생성하고, Short NameIoHwAbDigitalDirectLogical_SW05로 적는다. 이어서 Port Pin Ch Ref... 버튼을 클릭한다.

121

하드웨어 포트 리스트에서 버튼 입력과 연결될 IoHwAbPortPinCh_PTB26을 선택한 뒤 OK를 클릭하여 적용한다.

122


7. Harmonize#


창 왼쪽 상단에 있는 초록색 버튼을 누른다.

123

Generate ECU Configuration을 선택하여 클릭한다.

124

Next를 클릭한다.

125

Service 탭에서 Rte 항목에 체크를 확인한 뒤 Next를 클릭한다.

126

모든 체크를 확인하고 Finish를 눌러 생성을 마친다.

127


8. Os Task 추가 & Os Task Mapping#


Os Task 추가#

ECU 하모나이즈 작업이 완료되면, 다시 화면 왼쪽 위의 초록색 버튼을 클릭한다.

128

현재 설정 중인Base로 기본 지정되어 있는지 확인한 후 OK를 누른다.

129

Os 1.3.0 모듈을 찾아서 클릭한다.

130

Task 설정 트리로 들어간 뒤, + 아이콘을 클릭하여 새로운 OS Task를 추가한다. 이 작업을 한 번 더 반복하여 총 2개의 태스크를 생성해 준다.

131

첫 번째 태스크의 Short NameOsTask_ASW_ModeUser로, 우선순위(Priority)는 160으로 설정한다.

두 번째 태스크의 Short NameOsTask_ASW_ModeManager로 입력하고, 우선순위(Priority)는 140으로 설정해 준다.

132

Application 섹션으로 이동하여 OsApplication0을 더블클릭한다. 이후 우측 속성 창에서 App Task Ref 필드 옆의 Browse 버튼을 클릭한다.

133

방금 선언한 OsTask_ASW_ModeManagerOsTask_ASW_ModeUser 두 태스크를 선택한 뒤 Add를 누른다.

134

우측 리스트에 두 태스크가 등록된 것을 확인한 뒤 OK를 클릭한다.

135

Os Task Mapping#

화면 왼쪽 위의 파란색 리본 아이콘인 RTE Event to Task Mapping 버튼을 클릭해 준다.

136

좌측 트리 메뉴에서 Sw Component Instance를 선택하고 SwcInstance_SWC_ModeManager를 찾아서 클릭한다.

137

하단 OsTask Mapping TableunMapped를 선택한 뒤 목록에서 OsTask_ASW_ModeManager 태스크를 선택하고, 매핑할 이벤트 리스트에서 DRE_RE_ModeManager_R_ModeRequest를 클릭해 지정한다.

138

Add 버튼을 클릭하여 태스크에 이벤트 맵핑을 완료하고, 테이블에 정상 등록된 것을 확인합니다.

139

다음으로 SwcInstance_SWC_ModeTest 컴포넌트를 선택한다. OsTask Mapping TableRelated to Sw Component 목록에서 주기가 매칭되는 OsTask_ASW_FG1_100ms를 선택하고, 이벤트 리스트에서 주기적 타이밍 이벤트인 TE_RE_ModeRequest를 선택한다.

140

Add 버튼을 클릭하여 태스크에 이벤트 맵핑을 완료하고, 테이블에 정상 등록된 것을 확인합니다.

141

OsTask Mapping TableunMapped 탭에서 이번에는 OsTask_ASW_ModeUser 태스크를 선택하고, 아래 이벤트 목록에서 SMSE_Entry_RE_Mode_A_R_ModeUseSMSE_Entry_RE_Mode_B_R_ModeUse를 복수 선택해 준다.

142

Add 버튼을 클릭하여 태스크에 이벤트 맵핑을 완료하고, 테이블에 정상 등록된 것을 확인합니다.

143


9. Service I/O 연결#


상단 메뉴 모음의 망치 모양 아이콘 옆 화살표를 누르고 Generate All을 클릭하여 실행한다.

144

제너레이트 과정에서 실패 에러가 발생하더라도, EcuValueCollection 하위의 Service and I/OIoHwAb 포트에 SW05가 추가되어 있다면 무시하고 다음 단계로 이동한다.

145

P_IoHwAbDigitalDirectLogical_LED_Red 요소를 선택한 후 + (New Connection) 아이콘을 클릭한다.

146

Respect Naming Rule 옵션 체크를 해제하고, R_LED_Red를 체크한 뒤 OK를 클릭해 준다.

147

P_IoHwAbDigitalDirectLogical_SW05를 선택하고 마찬가지로 + (New Connection) 아이콘을 누른다.

148

Respect Naming Rule 체크를 해제한 뒤 R_SW05를 체크하고 OK를 선택해 준다.

149

P_IoHwAbDigitalDirectLogical_SW06를 선택하고 + (New Connection) 버튼을 누른다.

150

Respect Naming Rule 체크를 끈 후 R_SW06을 체크하고 OK를 눌러 하드웨어 서비스 연결을 마친다.

151


10. C coding#


Build 설정#

Build 패키지 트리 아래의 Scons.arxml 파일 내의 Scons 설정을 더블클릭하여 열고, Module 탭을 선택한다.

152

Rte 항목을 찾아 더블클릭한 후, Input Files List 속성 칸에서 Add 버튼을 클릭한다.

153

파일 입력란에 App_ModeTest를 입력한 뒤 Add를 누른다.

154

리스트에 App_ModeTest가 추가된 것을 확인하고 OK를 누른다.

155

상단 망치 모양 아이콘 옆 화살표를 누르고 Generate All을 클릭하여 실행한다.

156

만약 코드 생성 중에 에러가 나타날 경우, ECU 하모나이즈 과정을 다시 진행하고 Generate를 실행해 주며 이 과정을 정상 완료될 때까지 반복해 준다.

157

C coding 작성#

프로젝트 탐색기에서 Static_CodeReference_Codesrc 폴더를 우클릭하고 NewFile을 선택하여 빈 파일을 만든다.

158

File name 입력란에 SWC_ModeTest.c를 정확하게 입력한 뒤 Finish 버튼을 클릭한다.

159

생성된 파일에 아래와 같이 코드를 작성한다.

160

src 폴더를 우클릭하고 NewFile을 클릭한다.

161

File nameSWC_ModeManager.c를 입력한 뒤 Finish를 눌러 파일을 생성한다.

162

생성된 파일에 아래와 같이 코드를 작성한다.

163


11. Build#


화면 왼쪽 위의 망치 모양 아이콘 옆에 있는 화살표를 클릭하고 Build를 클릭하여 전체 빌드를 실행한다.

164

빌드가 완료되었는지 확인한다.

165