31일차 - 차량 SW
순서 (디버거 있을 때)
- 디버거 전원 공급
- target 보드 전원 공급
- 제거는 역순
- 디버깅 Tool LD 클릭
- CONFIG DAT2 설정 후 Up
<Work space 경로가 다를 때>
- ROM은 Write가 안되므로 다르게 Load 해야된다.
- File -> RunScript -> 파일 선택
- yes 클릭
- elf 파일 선택
순서 (디버거 없을 때)
- memtool 설치
- 실행
- Chip 에서 CA인지, DC 인지 확인
- C로 시작 : C-Step 선택
- D로 시작 : D-Step 선택
- 선택 후 확인 버튼 클릭 -> 화면 나옴
- Connect 버튼 클릭
- Ready for Memtool Command 확인
- memtool은 elf 안된다. => Project에서 .hex 파일 추출
- Project의 Properties -> Setting -> Linker에 Output Format에서 Generate Intel Hex format file을 체크
- 빌드하면 .hex 파일 생긴다 이 파일을 memtool에서 다운로드하면 된다.
- Open file
- All Seleclt
- Add Sel >>
- 모두 넘어가지고 Program을 누르면 다운로드가 된다.
- Result : success 확인
AUTOSAR_PORT_DIRVER PRJ
- 제공받은 헤더 이용하면서 사용
비트 필드 구조체
struct MY_STRUCT
{
unsigned int A:3;
unsigned int B:5;
unsigned int C:3;
unsigned int D:5;
unsigned int E:3;
unsigned int F:5;
unsigned int G:3;
unsigned int H:5;
};
union MY_UNION
{
unsigned int U;
signed int I;
struct MY_STRCUT B;
};
typedef int int32_t;
int32_t main(void)
{
struct MY_STRUCT var;
(*(struct MY_STRUCT *)0xF003B114).B = 0x10;
(*(union MY_UNION *)0xF003B114).U = 0x12345678;
(*(union MY_UNION *)0xF003B114).B.B = 0X10;
for(;;)
{
var.A = 0xF;
}
}
- 비트필드는 비트로 접근할 수 있게 해준다.
- 여기서 strcut는 32bit 크기를 갖게한다.
- var.A 는 0xF(1111)이 3bit 크기를 갖으므로 111만 들어오고 맨 앞의 1 비트는 버려진다.
- 0xF003B114 와 같은 주소에 접근을 하기 위해서 미리 DataStrcut과 같은 크기를 갖는 Struct를 구현하는 것이 좋은 것같다.
- 같은 크기에서 직접 연산자를 통해 해당 위치의 값을 수정할 수 있다.
- .이 우선순위 높으므로 감싸는것 필요(주의)
- union을 쓰면 전체 비트로도, 비트필드로도 접근할 수 있도록 할 수 있다.
- 매우 편리해진다.
- I/O Map을 만들 수 있다.
<Work space 경로가 다를 때>
- ROM은 Write가 안되므로 다르게 Load 해야된다.
- File -> RunScript -> 파일 선택
- yes 클릭
- elf 파일 선택
- memtool 설치
- 실행
- Chip 에서 CA인지, DC 인지 확인
- C로 시작 : C-Step 선택
- D로 시작 : D-Step 선택
- 선택 후 확인 버튼 클릭 -> 화면 나옴
- Connect 버튼 클릭
- Ready for Memtool Command 확인
- memtool은 elf 안된다. => Project에서 .hex 파일 추출
- Project의 Properties -> Setting -> Linker에 Output Format에서 Generate Intel Hex format file을 체크
- 빌드하면 .hex 파일 생긴다 이 파일을 memtool에서 다운로드하면 된다.
- Open file
- All Seleclt
- Add Sel >>
- 모두 넘어가지고 Program을 누르면 다운로드가 된다.
- Result : success 확인
AUTOSAR_PORT_DIRVER PRJ
- 제공받은 헤더 이용하면서 사용
비트 필드 구조체
struct MY_STRUCT
{
unsigned int A:3;
unsigned int B:5;
unsigned int C:3;
unsigned int D:5;
unsigned int E:3;
unsigned int F:5;
unsigned int G:3;
unsigned int H:5;
};
union MY_UNION
{
unsigned int U;
signed int I;
struct MY_STRCUT B;
};
typedef int int32_t;
int32_t main(void)
{
struct MY_STRUCT var;
(*(struct MY_STRUCT *)0xF003B114).B = 0x10;
(*(union MY_UNION *)0xF003B114).U = 0x12345678;
(*(union MY_UNION *)0xF003B114).B.B = 0X10;
for(;;)
{
var.A = 0xF;
}
}
- 비트필드는 비트로 접근할 수 있게 해준다.
- 여기서 strcut는 32bit 크기를 갖게한다.
- var.A 는 0xF(1111)이 3bit 크기를 갖으므로 111만 들어오고 맨 앞의 1 비트는 버려진다.
- 0xF003B114 와 같은 주소에 접근을 하기 위해서 미리 DataStrcut과 같은 크기를 갖는 Struct를 구현하는 것이 좋은 것같다.
- 같은 크기에서 직접 연산자를 통해 해당 위치의 값을 수정할 수 있다.
- .이 우선순위 높으므로 감싸는것 필요(주의)
- union을 쓰면 전체 비트로도, 비트필드로도 접근할 수 있도록 할 수 있다.
- 매우 편리해진다.
- I/O Map을 만들 수 있다.
struct MY_STRUCT
{
unsigned int A:3;
unsigned int B:5;
unsigned int C:3;
unsigned int D:5;
unsigned int E:3;
unsigned int F:5;
unsigned int G:3;
unsigned int H:5;
};
union MY_UNION
{
unsigned int U;
signed int I;
struct MY_STRCUT B;
};
typedef int int32_t;
int32_t main(void)
{
struct MY_STRUCT var;
(*(struct MY_STRUCT *)0xF003B114).B = 0x10;
(*(union MY_UNION *)0xF003B114).U = 0x12345678;
(*(union MY_UNION *)0xF003B114).B.B = 0X10;
for(;;)
{
var.A = 0xF;
}
}
- .이 우선순위 높으므로 감싸는것 필요(주의)
- 매우 편리해진다.
- I/O Map을 만들 수 있다.
- 이 녀석을 타고들어가보자
- 비트별로 접근할 수도, 한번에 접근할 수도 있다.(union)
- 이렇게 한 비트씩 이미 정의 되어 있다.
LED Setup
- P6 에 direction과 Mode를 지정해주기 위한 비트연산 함수를 정의한다.
Port_SetPinDirection
void Port_SetPinDirection(Port_PinType Pin, Port_PinDirectionType Direction)
{
switch (Pin)
{
case P11_6:
MODULE_P11.IOCR4.B.PC6 = (Direction << 4);
break;
}
}
Port_SetPinMode
void Port_SetPinMode(Port_PinType Pin, Port_PinModeType Mode)
{
switch (Pin)
{
case P11_6:
MODULE_P11.IOCR4.B.PC6 |= Mode;
break;
}
}
Author And Source
이 문제에 관하여(31일차 - 차량 SW), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lottocomeon/31일차-차량-SW저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)