31일차 - 차량 SW

순서 (디버거 있을 때)

  1. 디버거 전원 공급
  2. target 보드 전원 공급
  3. 제거는 역순
  4. 디버깅 Tool LD 클릭
  5. CONFIG DAT2 설정 후 Up
    <Work space 경로가 다를 때>
    • ROM은 Write가 안되므로 다르게 Load 해야된다.
    • File -> RunScript -> 파일 선택
    • yes 클릭
    • elf 파일 선택

순서 (디버거 없을 때)

  1. memtool 설치
  2. 실행
  • Chip 에서 CA인지, DC 인지 확인
  • C로 시작 : C-Step 선택
  • D로 시작 : D-Step 선택
  • 선택 후 확인 버튼 클릭 -> 화면 나옴
  1. Connect 버튼 클릭
  • Ready for Memtool Command 확인
  1. memtool은 elf 안된다. => Project에서 .hex 파일 추출
  • Project의 Properties -> Setting -> Linker에 Output Format에서 Generate Intel Hex format file을 체크
  • 빌드하면 .hex 파일 생긴다 이 파일을 memtool에서 다운로드하면 된다.
  1. Open file
  • All Seleclt
  1. 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을 만들 수 있다.

  • 이 녀석을 타고들어가보자
  • 비트별로 접근할 수도, 한번에 접근할 수도 있다.(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;
	}
}

좋은 웹페이지 즐겨찾기