https://www.autoelectronics.co.kr/article/articleView.asp?idx=1513 

 

토요타 급발진 분석

본고에서는 소송 과정에서 밝혀진 여러 가지 사안을 토대로 소프트웨어 공학적인 측면에서 토요타 제어 소프트웨어의 문제점을 설명한다.

www.autoelectronics.co.kr

배울점이 많다.

임베디드 소프트웨어 깊이있는 내용이 많이 나온다.

 

완전한 SW는 없다고 생각한다.

이슈난 SW를 뜯어보면 SW로 인한 이슈가 아니어도 SW에는 문제가 있을 것이라고 생각된다.

하지만 해당 분석을 보면 Barr 그룹의 분석 정도가 배울점이 많아보인다. (약 10년 전인데..)

해당 사이트에 다른 볼만한 글도 많다.

참고해야지

 

https://www.hancommds.com/dSPACEData?curPage=6 

 

한컴MDS

인텔리전트 융합 솔루션 전문기업 한컴MDS

www.hancommds.com

http://recipes.egloos.com/

 

임베디드 레시피

친절한 임베디드 개발자되기 강좌

recipes.egloos.com

https://igotit.tistory.com/category/%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C/%EC%9D%BC%EB%A0%89%ED%8A%B8%EB%A1%9C%EB%8B%89%EC%8A%A4

 

'임베디드/일렉트로닉스' 카테고리의 글 목록

정의. 관계. 클리어. : coding : making : creating : developing : trading : enjoying

igotit.tistory.com

https://arthand.tistory.com/category/AUTOMOTIVE%26IT%20SW/AUTOSAR%20%EA%B0%95%EC%A2%8C

 

'AUTOMOTIVE&IT SW/AUTOSAR 강좌' 카테고리의 글 목록

맛집,잡동사니,미니멀라이프 등 끔손이 좋아하는 것들을 공유합니다^^

arthand.tistory.com

https://embeddedchallenge.tistory.com/25?category=1204220 

 

대기업 연구원은 어떤 일을 할까? (자동차부품SW개발)

Y대 전기전자공학부 졸업 --> 자동차공학(전자제어) 석사 졸업 그리고 들어간 곳은 대기업의 자동차부품 SW 개발팀 이었다. 자동차 안에는 많은 Electric Controller Unit(ABS, EMS, VCM, BMS, OBCM, 기타 등등)

embeddedchallenge.tistory.com

https://www.autoelectronics.co.kr/

2019년 임베디드 기사 실기에서 불합격을 하고 

2020년 재도전하여 합격했습니다.

 

2020년 난이도는 좀 괜찮았습니다.

2019년이 워낙 어려웠고요...

2020년 합격률 궁금하네요

공부는 19년에 열심히 했고 2020년에는 적당히 했습니다.

 

이번에는 안드로이드 리눅스 문제는 거의 안나왔고

대부분 필기문제에서 나오고 C언어 문제가 좀 나왔습니다.

 

임베디드 기사 자격증이 좀 더 활성화되어서 난이도도 적당해지고 시험 횟수도 늘었으면 좋겠네요

임베디드 기사 응시자분들 화이팅입니다~!

'전자공학 > 임베디드' 카테고리의 다른 글

도요타 급발진 분석 BARR 그룹  (0) 2021.08.25
임베디드 공부 사이트  (1) 2021.08.24
2019년 제6회 임베디드 기사 실기 후기  (2) 2021.01.05
디바이스 드라이버 (Device Driver)  (0) 2020.11.10
MCU 구조  (0) 2020.09.02

난이도가 매우 높았다..

합격자 1명 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

실기 문제는 안드로이드, 리눅스에 관한 문제가 좀 나왔다.

그래서 좀 어려웠다....

그냥 필기문제랑 비슷하면 무난했을텐데..

필기랑 너무 엇나가는 느낌

아직 난이도 조절을 못하는듯..

공부도 열심히 했었는데 ㅠㅠ

 

'전자공학 > 임베디드' 카테고리의 다른 글

임베디드 공부 사이트  (1) 2021.08.24
2020년 제7회 임베디드 기사 실기 합격 후기  (15) 2021.01.07
디바이스 드라이버 (Device Driver)  (0) 2020.11.10
MCU 구조  (0) 2020.09.02
스타트업 코드  (0) 2020.04.28

장치 드라이버 라고도 불리는 디바이스 드라이버에 대해 알아보겠습니다.

 

디바이스 드라이버(영어: device driver)는 특정 하드웨어나 장치를 제어하기 위한 커널의 일부분으로 동작하는 프로그램이다. 컴퓨터를 구성하는 다양한 입출력 장치마다 각각 장치드라이버가 프로그램 되어 커널에 통합되어 실행된다. 높은 수준의 컴퓨터 프로그램들이 컴퓨터 하드웨어 장치와 상호 작용하기 위해 만들어진 하나의 컴퓨터 프로그램이다.

장치드라이버는 커널의 일부분이기는 하나 커널과 통합되는 것은 처음부터 해당 드라이버 프로그램 코드소스가 커널 전체 소스에 포함되어 컴파일되는 경우도 있고, 그리고 별도로 컴파일된 파일(윈도의 *.sys, 리눅스의 *.o)의 형태로 존재하고 부팅 시 또는 필요 시 해당 파일이 로드되어 커널과 통합되기도 한다.

드라이버는 흔히 컴퓨터 버스, 또는 하드웨어와 이어진 통신 하위 시스템을 통해 장치와 통신한다. 요청하는 프로그램이 드라이버의 명령어를 호출하면, 드라이버는 장치에 명령어를 전달한다. 장치가 드라이버에게 데이터를 되돌려 주면, 드라이버는 원래 요청한 프로그램의 명령어로 데이터를 다시 전달한다. 드라이버는 하드웨어에 의존하며 특정한 운영 체제를 따른다. 이러한 드라이버는 비동기 시간에 의존하는 하드웨어 인터페이스에 필요한 인터럽트를 다룰 수 있다.

장치 드라이버는 흔히 장치 칩의 레지스터에 접근하여 하드웨어를 제어하며 하드웨어와 주변 기기를 사용하는 프로그램의 중간 다리 역할을 한다.

 

ko.wikipedia.org/wiki/%EC%9E%A5%EC%B9%98_%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84

 

장치 드라이버 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 장치 드라이버/제어기(문화어: 장치구동기, 장치구동프로그람) 또는 디바이스 드라이버(영어: device driver)는 특정 하드웨어나 장치를 제어하기 위한 커널의 일

ko.wikipedia.org

위키백과에서 매우 잘 설명해줬네요.

결국 디바이스를 제어하기 위한 커널의 일부분!

이제 디바이스 드라이버를 이해했으니 더 알아보겠습니다.

 

 

문자 디바이스 드라이버 Character device driver (키보드, 마우스

- 일반 파일과 가장 유사한 방식으로 처리할 수 있는 디바이스 드라이버

- 응용 프로그램은 open(), close(), read(), write() 등의 함수를 사용하여 디바이스 파일들을 다룸 

 

블록 디바이스 드라이버 Block device driver (디스크 드라이버)

- 파일 시스템을 지원하는 구조

 

네트워크 디바이스 드라이버 Network device driver (이더넷, 블루투스, 와이파이)

 

 

리눅스에선 /proc/devices 에서 확인 가능 

확장자 - .sys 윈도우, .ko 리눅스

 

그 외..

블루 스크린의 대부분의 원인이 디바이스 드라이버에서 비롯된다.

(운영체제와 밀접한 관련이 있기 때문에 신중히 작성되어야 한다.)

디바이스 드라이버는 리눅스 커널 소스의 70%를 차지한다. 

 

 

 

 

MCU를 간단히 설명하자면

 

코드를 읽고

읽은 프로그램을 처리하고 

결과를 Output 에 출력한다

 

마이크로컨트롤러(Microcontroller) 또는 MCU(Micro Controller Unit)는 마이크로프로세서와 입출력 모듈을 하나의 칩으로 만들어 정해진 기능을 수행하는 컴퓨터를 말한다.

CPU 코어, 메모리 그리고 프로그램 가능한 입/출력을 가지고 있다. NOR 플래시 메모리[1][3], EPROM[2] 그리고 OTP ROM등의 메모리를 가지고 있어 정해진 기능을 수행하도록 프로그래밍 코딩하고 이 기계어 코드를 써 넣는다. 기계어 코드가 실행되기 위한 변수나 데이터 저장을 위해 적은 용량의 SRAM을 가지고 있다. 기타 칩에 따라 EEPROM을 내장하기도 한다.

MCU는 임베디드 애플리케이션을 위해 디자인되었으며 임베디드 시스템에 널리 사용된다. 개인용 컴퓨터가 다양한 요구에 따라 동작하는 일반적인 일에 사용된다면, MCU는 기능을 설정하고 정해진 일을 수행하도록 프로그래밍되어 장치 등에 장착되어 동작한다. 따라서 일반적으로 성능이 PC에 비해 낮고 형상도 다르다. 한 번 프로그래밍하면 코드를 나중에 바꿀 일이 거의 없기 때문에 냉장고, 전자레인지 등의 기기에 사용된다.

 

-위키백과

 

 

MCU 는 CPU 메모리 보조 모듈로 구성

 

메모리와 CPU는 명령 & 데이터

 

메모리 : ROM(Flash rom, EEPROM) 프로그램 저장   /  RAM 임시저장 데이터 데이터 읽고 쓰는 장치

CPU : ALU(산술장치 ), Register(임시저장 데이터 ), Shifter

보조모듈 : SPI, UART, I2C, ADC, DAC, 타이머

 

 

 

Program Memory(Flash Memory) : 프로그램 명령어 저장

Core(CPU) : 명령어 수행

Data Memory(SRAM) : 명령어 수행한 임시데이터 저장 

 

 

 

SRAM, 변수나 스택등에서 사용하는 읽기, 쓰기 전용 메모리

Flash ROM,  프로그램 굽는 용도 읽기전용의 상수 데이터도 저장함

EEPROM 읽고 쓰기가 가능하지만 속도가 느리며 횟수제한이 있으므로 변경하지 않는 설정값 저장 

DataFlash 플래시 메모리 중의 일부분을 읽고 쓰기 가능하도록 만든 것으로써 일부 제품만 이런 기능이 있다

인터럽트 벡터 테이블을 생성하고 메모리 검사와 C 프로그램에서 사용할 스택과 힙을 생성하고 초기화 하는 등 C 프로그램이 작동하기 위한 초기화 작업 수행

 

스타트업 코드는 시스템이 C를 인식하기 전이기 때문에 어셈블리 코드로 작성해야 함

'전자공학 > 임베디드' 카테고리의 다른 글

디바이스 드라이버 (Device Driver)  (0) 2020.11.10
MCU 구조  (0) 2020.09.02
시리얼 케이블, JTAG 케이블, 이더넷/USB 케이블  (0) 2020.04.28
크로스컴파일 과정  (0) 2020.04.28
JTAG란?  (0) 2019.12.25

시리얼 케이블 : UART 통신을 위한 케이블, 모니터링 디버깅 가능

JTAG 케이블 : 타겟 시스템이 프로그램 다운로드, 플래시 메모리에 프로그램 탑재, 레지스터 값을 읽어올 수 있고 프로그램을 스텝으로 실행 가능

이더넷/USB 케이블 : 타겟 시스템에 개발한 소프트웨어 탑재 가능 

 

 

'전자공학 > 임베디드' 카테고리의 다른 글

MCU 구조  (0) 2020.09.02
스타트업 코드  (0) 2020.04.28
크로스컴파일 과정  (0) 2020.04.28
JTAG란?  (0) 2019.12.25
부트로더(Boot loader)란?  (0) 2019.10.28

test.c -> 전처리기 -> test.i -> 크로스 컴파일러 -> test.s -> 크로스 어셈블러 -> test.o ->

링커 -> 로케이터 -> test(실행파일)

 

로케이터는 타겟 메모리의 메모리 정보를 통해 프로그램 코드와 데이터 섹션들에 실제 메모리를 할당

'전자공학 > 임베디드' 카테고리의 다른 글

스타트업 코드  (0) 2020.04.28
시리얼 케이블, JTAG 케이블, 이더넷/USB 케이블  (0) 2020.04.28
JTAG란?  (0) 2019.12.25
부트로더(Boot loader)란?  (0) 2019.10.28
Startup code 스타트업 코드  (0) 2019.10.27

우선 위키백과에 설명이 잘 되어있어 정리하겠습니다.

 

JTAG(Joint Test Action Group)으로 디지털 회로에서 특정 노드의 디지털 입출력을 위해 직렬 통신 방식으로 출력 데이터를 전송하거나 입력데이터를 수신하는 방식을 말함. IEEE 1149.1 표준임, 회로 설계에 따라 디지털 회로의 내부로 저송하거나 핀의 외부로 데이터를 출력할 수도 있고 상태를 읽을 수도 있음

 

임베디드시스템 개발 시에는 디버깅 장비가 대표적인 활용 예임, CPU의 기계어 코드를 실행하지 않고 MCU 내부의 플래시 메모리나 임베디드 장치에서 CPU의 외부 플래시 메모리에 코드를 쓰거나 읽을 수 있음

또한 디버거가 CPU 동작과 연동하여 특정 기계어 코드 위치에서 멈추고 상태를 읽어 내부의 상태를 알 수 있음

 

JTAG의 작동 방식은 칩 내부에 Boundary Cell을 만들어 이것이 외부의 핀과 일대 일로 연결되어 프로세서가 할 수 있는 동작을 중간의 Cell을 통해 인위적으로 수행할 수 있도록 하는 것임

 

인터페이스

1. TDI(데이터 입력) : Test 하기 위한 신호

2. TDO(데이터 출력) : Test 한 결과를 외부에서 모니터링 하기 위한 Pin

3. TCK(클럭)

4. TMS(모드) : Test 모드로 전환하기 위한 제어 신호

5. TRST(리셋)

 

-위키 백과

 

자 정리하자면 제품을 만들때 제품이 잘 동작하는지 테스트를 해야합니다.

 

그러면 핀 마다 잘 동작을 확인을 해야하는데 핀이 너무 작고, 숨어 있을 수 있기 때문에

 

이걸 표준으로 만들어 테스트하기 용이하게 만들어 놓은걸 JTAG이라고 합니다. 

 

그리고 JTAG는 임베디드 시스템의 MCU 자체를 테스트 한다기 보단 보드 자체를 테스트 한다고 보시면 됩니다.

 

해당 핀에 신호가 잘 들어가는데 왜 동작이 이상한지, 아니면 코드에 문제가 있는지 등등을 확인할 수 있습니다.

 

또한 JTAG은 하드웨어 디버거에 속합니다. 개발자가 직접 CPU를 조절하며 디버깅이 가능하죠.

 

쉽게 말하자면 if문 안에 printf("if"); 같이 하여 확인하는 것이 소프트웨어 디버깅

 

실행, Break를 통해서 특정 변수의 값, Memory에 값이 잘 쓰였는지 확인하는 것이 하드웨어 디버깅입니다.

또한 JTAG를 통해 플래시 다운로드가 가능합니다.

 

Hex파일이나 Elf파일을 MCU에 다운로드가 가능합니다.

 

Boundary Scan에 대해서는 아직 잘 모르니 잘 설명해놓은 블로그 링크를 걸어두겠습니다.

 

Boundary Scan 설명 : http://forum.falinux.com/zbxe/index.php?document_srl=405972&mid=lecture_tip

 

강좌와 팁 - [JTAG]01 JTAG 이란?

 

forum.falinux.com

 

JTAG Interface

 

 

 

+ Recent posts