Day 5 - ARM7(Assembly)
·
IDEC 교육/Embedded C
ARM7 Reference해당 링크에서 레퍼런스 파일을 받을 수 있다.ARM7 Quick Card해당 링크에서 짧게 요약된 버전을 받을 수 있다.현재 Keil과 Segger 툴을 사용중이고, Assembly는 Segger Studio를 사용중이다.C와 Assembly 동시 사용main.c에서 assem.s라는 assembly 파일에 정의된 함수를 불러와서 쓸 수 있는데DoAdd라는 함수를 assembly에서 정의하여 불러와서 사용하는 예시이다.main.c#include #include extern int DoAdd(int, int);int main(void) { printf("Program Started\n"); int a = DoAdd(3, -1); printf("Add: %d\n", a); p..
Day 4 - Memory Endian
·
IDEC 교육/Embedded C
Big EndianHigh Order Byte: 낮은 주소에 기록ADDR | 0x123456780x100 | 0x120x101 | 0x340x102 | 0x560x103 | 0x78Little EndianLow Order Byte: 낮은 주소에 기록ADDR | 0x123456780x100 | 0x780x101 | 0x560x102 | 0x340x103 | 0x12
Day 3 - 외부 변수 및 함수 참조
·
IDEC 교육/Embedded C
Extern 선언다음 예시와 같이 extern을 통해 외부 변수, 외부 함수 선언을 할 수 있다.extern int gVar;, extern void func(void);너무 많은 extern으로 인한 코드는 가독성이 떨어지고, 특히 외부 변수를 직접적으로 수정하는건 지양해야함
Day 3 - Structure
·
IDEC 교육/Embedded C
Structure(구조체)서로 다른 형태의 변수들을 하나의 형태로 묶은 "자료구조"c1, s1, i1 순으로 배치를 할 경우,첫 4 Byte의 영역안에 c와 s가 모두 들어 갈 수 있으므로, 총 8 Byte를 사용하게 된다. c1, i1, s1 순으로 배치를 할 경우, 각각 4 Byte, 총 12 Byte를 사용하는 것으로 보여지게 된다.이는 ARM이나 기타 프로세서들의 Word Allignment 때문(4 Byte를 기준으로 Read)으로 메모리의 낭비가 일어난다. 이처럼 순서로 메모리의 최적화를 할 수 도 있으나,#pragma pack(1)과 같이 Packing을 사용하여 빈칸이 없게 붙이는 것도 가능하다.이는 총 7 Byte를 사용하게 된다.이렇게 정의된 struct는 다른 자료형과 같이 사용이 가..
Day 3 - Function Pointer
·
IDEC 교육/Embedded C
Function Pointer함수 포인터: 함수를 가리키는 포인터 변수*: Pointer / []: Array / (): Function 으로 생각Examplevoid func(int a, int b) { ... } // 정의...int main(){ void (*p)(int, int); // 함수 포인터 변수 p = func; p(1, 2); return 0;}Usage 1-1함수는 매개변수를 전달 받고 다음 함수로 전달하는 경우가 있는데그럴때, 함수 포인터를 매개변수로 전달 받을 수 있고, 유기적인 함수의 선택이 가능하다.qsort(퀵소트, 퀵정렬)함수와 같은 경우 compare함수를 매개변수로 전달 받는데,이때 사용자는 해당 함수만 수정하여 기능을 변경 할 수 있다.Usage ..
Day 3 - Character Pointer & Array
·
IDEC 교육/Embedded C
C Language의 CharacterC언어에서의 Charcater = 즉 char는 하나의 문자를 가르키는 TypeCharacter Pointerchar *의 Type은 char의 주소를 나타내는 TypeCharacter Arraychar temp[6] = "Hello"에서 temp는 char Type이 6개 (마지막 NULL문자 포함) 있는 배열이고배열명은 해당 배열의 시작 주소를 가르키는 상수이다.즉 temp와 &temp[0]는 같은 값을 가르킨다.Array? Pointer?우리는 *을 포인터 변수 앞에 붙여서 해당 포인터가 가르키고 있는 값을 "참조" 할 수 있다.또한 &을 변수 앞에 붙여서 해당 변수의 "주소"를 알 수 있다.temp는 배열의 주소를 가르키는 "상수"이므로 우리가 임의로 변경 할..
Day 2 - Pointer & Array
·
IDEC 교육/Embedded C
Pointer*: PointerArray[]: Array연산자 우선 순위C언어 코딩도장 25.0 연산자 우선순위 알아보기[] -> * 순으로 우선 순위가 높으므로 (여기서 ()는 우선 처리의 의미)int *arr[4]: 배열int (*arr)[4]: 포인터라고 정리 할 수 있다.Pointer Variable모든 Pointer 변수는 크기가 4 Byte이다 = 주소값은 항상 4 Byte 크기예시char *p: Pointer to charint *p: Pointer to intint (*p)[4]: Pointer to Array(4 int)int *p[4]: Array of Pointer(4 int*)복잡한 예시 | name | type | target ..
Day 2 - Preprocessor
·
IDEC 교육/Embedded C
#define (= 치환)#define은 치환을 하는 기능을 함EXAMPLE을 42로 치환하는 예제#define EXAMPLE 42 #if  #else  #endif  (= 조건 컴파일)컴파일시에 컴파일을 할지 안할지 선택 가능ifdef는 조건으로 하나의 정의된 형식만 사용 가능 (ifndef는 !ifdef와 같음)#ifdef 조건~#else~#endif#ifndef 조건~#else~#endifif는 조건으로 여러 정의 형식 사용 가능#if(조건)~#else~#endifelif를 사용하여 조건을 추가하여  사용 가능#if(조건)~#elif~#else~#endif Header file 작성시 활용a.h#ifndef _A_H_#define _A_H_~#endifb.h#ifndef _B_H_#define _B..