한컴 아카데미 교육 8

[13일차] 임베디드 프로그래밍(인터럽트)

1. ARM (Advanced RISC Machine) : 1) RISC(Reduced Instruction Set Computer) : CPU 명령어의 개수를 줄여 하드웨어 구조를 좀 더 간단하게 만드는 방식으로, 마이크로프로세서를 설계하는 방법 가운데 하나이다. 2) 개방된 버스 구조 - V.7 부터 Cortex A, R, M시리즈로 나뉨, 그전까진 ARM7, 9, 11 2. 6가지 Operation(동작)모드가 있다. 모드 사용 User 보통 때 사용 (r15는 PC) Non-Previledge (특권 X) FIQ 빠른 인터럽트 처리 시 특권 모드 - 하드웨어 건들 수 있다. IRQ 보통 인터럽트 처리 시 SVC(super visor call) 시스템 콜 처리 시 - 전원 시작 시 기본 모드 Abo..

[12일차] 임베디드 시스템 아키텍쳐-개발환경, 아키텍쳐

1. FLASH 메모리 : NORF와 NANDF 의 차이 - NANDF : 대용량 가능하나 베드섹터가 존재한다. -> 기존의 A.D.C BUS와 구조가 다른 BUS를 사용한다. (관련 기업 : 도시바, 삼성전자) - NORF : 고용량은 어렵지만 안정적이다. (관련기업 : 인텔) 2. 실습 보드 구조 3. RAM에서의 실행하기 - 대개 ROM보다 RAM에서의 실행이 더 빠르다. 1) memory controller를 성정하여 RAM 초기화. 2) ROM에 저장된 프로그램을 RAM에 복사한다. 3) PC(Program Counter)를 위치시켜 RAM 의 코드를 실행한다. 4) 프로그램을 압축해서 ROM에 저장하기도 한다. ROM에 저장된 .Text 를 RAM에 복사하는 코드가 필요하다. (*.ld (Li..

[11일차] 임베디드 시스템의 이해

저번 주 부로 C언어 강의를 마친 뒤, 이번 주부터 임베디드 시스템에 관해 배우기 시작했다. 강의 내용을 거의 날것 그대로 기록하였는데, 앞으로는 수업을 들으면서 새롭게 알게 된 사실이나, 중요하다 생각되는 내용 위주로 기록해야겠다. 오늘은 전반적으로 새로운 책과 함께 개념적인 부분을 공부하였다. 오후에는 실습키트를 시리얼로 PC와 연결해보았다. cygwin을 설치하여 리눅스 환경에서 소스파일을 작성해보고 컴파일도 해보았다. 그리고 ROM에 저장된 파일이 어떻게 RAM으로 이동되어 MCU에서 구동되는지 직접 메모리의 주소를 찾아가며 낱낱이 알아보았다. 컴파일의 과정에 대해 더 자세히 알 수 있었다. 임베디드 시스템의 이해 1. 임베디드 시스템의 정의 - 특정 역할을 하는 컴퓨터 시스템 - 임베디드 시스템..

[10일차] C언어 교육-(파일 개방과 입출력 함수)

1. 파일 개방과 입출력을 하기 위해선 파일 포인터가 필요하다. FILE = *fp 2. ex) fopen("a.txt", "r"); //읽기 전용으로 개방 3. 함수 원형 FILE *fopen(const char *, const char *); => 반환형 함수명 매개변수 4. 절대 경로 : "..\\source\\b.txt" 상대 경로 : "data\\a.txt" 5. 파일이 존재할 때 파일이 없을 때 r 읽기 위해 개방 NULL 반환 w 지우고 쓰기 위해 개방 새로운 파일 생성 a 파일 끝에 추가하기 위해 개방 새로운 파일 생성 (*append : 덧붙이다) - Stream File 장점 : 1) 입출력 효율 증가. 장치로부터 독립성 증가. => 스트림파일이 없으면 외부 입출력 장치가 바뀔 때마다 ..

[9일차] C언어 교육-(함수 포인터, 동적 할당 메모리, 구조체 등)

1. 함수 포인터 배열 사용 예시 - 포인터 배열을 형 변환하여 함수 포인터로 만들었다. (*괄호 연산자 위치 중요!) #include int sum(int a, int b); int sub(int a, int b); int mul(int a, int b); int main() { int res; void* sub1 = sub; void* mul1 = mul; //void 포인터 void* vpa[3] = {sum, sub, mul1}; //void 포인터 배열 초기화 res = ((int (*)(int, int))vpa[1])(1, 2); printf("result is %d", res); return 0; } int sum(int a, int b){ return a+b; } int sub(int a,..

[7일차] C언어 교육7-(2차원 배열, 포인터 배열 등)

강사님이 바뀌고, 포인터와 배열에 대한 개념을 설명하기 위해 좌-우파 구도 개념과 n차라는 개념을 만들어서 설명해주시는데, 설명하기 위해 새로운 개념을 또 배워야 하니 더 복잡하고 어려워지는 것 같다... 얼추 무슨 의미인지는 알겠지만, 원래이해하고 있던 방식과 이해 방식이 달라서 혼란스럽다..ㅎ.. 열성적으로 가르쳐주시지만 뭔가 큰 그림을 그려놓고 진행되기보다는 작은 것 하나에 엄청 몰두해서 알려주시는 느낌이다. 1. 좌파우파 차수 개념 데이터가 나오고 주소 값이 나오고 가 중요한데 좌파 우파가 중요해진 느낌.. 2. 초기화 하지 않은 전역 변수는 file size에 영향을 미치지 않는다.(hdd) 하지만 ram에서 돌아가기 시작하면 '0'으로 초기화되면서 메모리 사용한다. 3. static 전역변수 ..

[4일차] C언어 교육4-(이중포인터, 포인터 배열, 배열 포인터, 동적할당함수)

확실히 고급편으로 넘어가고부터 내용이 어려워졌다.. 1. static 전역변수 -> 다른 소스에서 접근 불가 2. static 지역변수 -> 전역변수의 특성도 갖게 됨. (초기화 1번만 된다.) 3. 함수 static -> 소프트웨어를 모듈화 할 수 있다. 4. 레지스터 변수 -> 변수가 stack에 저장되지 않고 가장 빠른 레지스터에 저장된다. 그리고 중괄호(함수) 끝날 때까지 레지스터에 존재. (메모리에 있는 것이 아니기 때문에 변수의 주소를 구할 수 없다. and 개수가 별로 없다.) 5. ARM은 RISC 프로세스 - RISC? >>> 6. call by value 와 call by reference의 차이. 포인터를 이용해 주소로 접근하는 후자 방식은 변수의 데이터를 바꿀 수 있다. 7. 크기가..

[3일차] C언어 교육3-(함수, 베열포인터, 문자열함수, 전역변수)

오늘 강의 시작은 강사님의 당부의 말로 시작되었다. "너무 한 번에 다 알려고 조급해하지 마세요~ 나중에 다 이해 가능합니다. 다만 주의사항! 손으로 직접 해봐야 합니다! 단순히 따라 하는 것이 아닌 안 보고 코드를 직접 짜 봐야 합니다! 만고불변의 법칙은 손가락이 기억한다는 것입니다!" 뭔가 대충 나가는 듯하면서도 궁금했던 점이나 헷갈렷던 점들은 잘 짚어주신다. 1. 포인터 기호 " * " : '간접참조연산자' 라고한다. 2. 다시 한번! 포인터는 주소를 저장하는 변수일뿐입니다! 3. 32bit 머신에서 주소 값은 모두 4byte이다!! 따라서 char*, int*, double* 포인터의 크기 모두 4byte이다! '주소 값'이기 때문에. 4. 포인터의 장점 - 매개변수를 통해 주소로 변수에 접근하기..