IoT 임베디드 SW 개발자 12

[30일차] ARM 프로세서 이해 및 활용(AMBA BUS, Clock, Power, Exception Handling)

○ ARM core 구조에 관한 대부분의 설명과 사진은 s3c2450 user manual에 있다. ◎ 블록 다이어그램 다시 보기 더보기 ● AMBA 버스 ▷ AMBA(Advanced Microcontroller Bus Architecture) - ARM에서 개발하여 오픈 한 표준 시스템 버스 설계 구격 - SoC를 구성하는 기능 블록들 간의 연결 및 관리 방법을 제공 ▷ 표준 AMBA 버스의 장점 - SoC 설계자 간의 의사소통 용이 :: 설계자 간의 idea공유로 SoC 설계 시간 단축 - IP(Intellenctual Property)의 재사용이 용이 :: 외부의 표준 IP 도입으로 SoC 설계 시간 단축 ▷ AHB (Advanced High-performance Bus) - High perform..

[26일차] ARM 프로세서 이해 및 활용 (임베디드 시스템의 구조, ARM Architecture 전반적인 구조)

1. 임베디드 시스템의 구조 프로세서의 구조 1) 레지스터(Register) : ○ 프로세서 내부에서 데이터를 일시적으로 보관하는 기억장치. - Flip-flop와 Latch로 구성되어 있다. ○ 범용 레지스터. (Ground Port Register) - 프로그램 또는 데이터 처리에 필요한 작업을 수행하기 위해 사용. ○ 제어용 레지스터. (control) - 프로그램이나 프로세서를 제어. 프로그램 카운터(PC) 등 ○ 상태 레지스터. (Program Status Register) - 프로세서의 상태를 나타낸다. 2) 산술 논리 연산장치(ALU) - 산술 연산 수행(덧셈 뺄셈 등) - 논리 연산 수행(AND, OR 등) - 상태 레지스터 또는 Flag 레지스터에 연산 결과 기록 - carry 발생, o..

[17일차] 임베디드 C 프로그래밍 2

T32marm 시뮬레이터 기본 사용법 연산자, LED 점등 실습 C언어 고급편 (배열, 포인터) 1. 연산자의 우선순위 2. 비트연산자 : |, &, ^, ~ | : OR연산. 둘 다 0일 때만 0 & : AND연산. 둘다 1일 때만 1 ~ : NOT연산. 단항 연산자. 1개의 데이터의 각 비트를 반전 0->1 // 1->0 ^ : XOR연산. 같으면 0, 다르면 1 > : 쉬프트 연산. 왼쪽, 오른쪽으로 비트를 shift 시킨다. 2의 n승 계산을 할 수 있다. 밀려난 빈자리는 0으로 채워지나, signed 타입에서는 부호 비트가 유지된다. 그 외 : 간접 참조 연산자(*), 레퍼런스 연산자(&), 배열 참조 연산자([]) 등이 있다. - 구조체 직접 참조 연산자 : "." 구조체의 멤버를 직접 참조...

[16일차] 임베디드 C 프로그래밍 1

이번 주부터 임베디드 C 프로그래밍을 배우기 시작하면서 임베디드 시스템 개요, C언어 기본, C언어 심화 이렇게 진도를 나가게 된다. 오늘은 임베디드 시스템 개요부터 C언어 기본까지 배우게 되었다. 앞에서 많이 다루었던 내용이고 특히 C언어교육은 중복되는 내용이 많았기에 그렇게 어렵지 않았고, 때문에 진도 또한 빠르게 나갔다. 1. MCU : CPU(Processor)와 각종 Peripheral Controller(주변장치 컨트롤러)들의 결합 2. CPU core : ALU(산술/논리 연산장치) + CU + Register 만으로 구성된 CPU의 핵심 - CU : 기계어를 분석하고 실행하기 위해 제어 신호를 순차적으로 발생시킴. - Register : 연산이나 기타 목적으로 사용될 저장공간. 코어에 집적..

[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,..

[8일차] C언어 교육8-(포인터 배열, 배열 포인터, 함수 포인터)

1. 포인터 변수로 배열의 주소를 받는 경우. int arr[4] = {2, 4, 7, 9}; int * p; p=arr; arr[2] = 100; //이렇게 대입할 경우. //다음도 가능하다. p[2] = 100; *(p+2) = 100; 2. 이중 포인터 : 포인터 변수의 주소를 저장하는 포인터 변수. 1) 포인터 변수를 교환하는 함수의 매개변수 #include void swap_ptr(char** ppa, char** ppb); int main(void) { char* pa = "success"; char* pb = "failure"; printf("pa -> %s, pb -> %s\n", pa, pb); // 바꾸기 전에 문자열 출력 swap_ptr(&pa, &pb); // 함수 호출 printf..