목록★☆★ 481
LuvSea
1. No-Cache Mode로 사용하기 위해서이다. 보통 프로그램 실행시 속도를 위해 CPU에서 데이터를 메모리에서 직접 읽어오지 않고, 캐시(Cache)를 통해서 읽어오게 된다. 하지만, 하드웨어에 의해서 변경되는 값들은 캐시에서 바로 반영되지 않기 때문에 캐시를 통해 읽어오지말고, 직접 메모리에서 읽어와야한다.(속도는 조금 늦춰지긴 한다.) - 하드웨어가 사용하는 메모리는 volatile로 선언해 줘야 한다. ex) #define rTEMP1 (*(volatile unsigned char *)0x30000028) #define rTEMP2 (*(volatile unsigned char *)0x30000032) 2. 컴파일러 최적화가 임의로 코드를 변경하는 것을 방지한다. 단계별 최적화 옵션을 사용하..
DDRA, PORTA는 도대체 어디에 정의되어 있을까? 헤더파일에서 직접 찾아보자. 소스코드를 보면 처럼 많이 사용하는 io함수들을 사용하기 위해 아래와 같이 include한다. #include 따라서 io.h를 살펴보면, #elif defined (__AVR_ATmega128__) #include 이라고 정의된 부분을 볼 수있다. iom128.h를 찾아보자.(다른 MCU라면 해당 헤더파일을 찾으면 된다.) imo128.h를 보면, (ctrl+f로 찾자) /* Input Pins, Port A */ #define PINA _SFR_IO8(0x19) /* Data Direction Register, Port A */ #define DDRA _SFR_IO8(0x1A) /* Data Register, Port..
#include int main() { char a = -1; unsigned char c = -1; int b = a; printf("%X\n", b); b = c; printf("%X\n", b); system("pause"); return 0; } #include int main() { char a = -1; unsigned char c = -1; int b = a; printf("%X\n", b); b = c; printf("%X\n", b); system("pause"); return 0; } 결과는 다음과 같다. int형 b에 같은 -1을 대입했는데 왜 결과 값은 다르게 나올까. 그 이유는 부호 확장에 있다. int b = a 에서 a는 char 형이기 때문에, 묵시적인 형변환이 발생하게 되는..
구조체는 메모리에 어떤 식으로 저장될까 다음과 같은 소스를 보자. #include typedef struct _TEST{ char cData; short sData; int iData; }TEST; int main() { TEST TData={0,}; printf("cData size : %d\n", sizeof(TData.cData)); printf("sData size : %d\n", sizeof(TData.sData)); printf("iData size : %d\n", sizeof(TData.iData)); printf("TData size : %d\n", sizeof(TData)); return 0; } #include typedef struct _TEST{ char cData; short sD..
int a; a = 1 + 2; 위의 소스를 모르는 사람은 없을 것이다. 하지만 다음과 같은 소스가 가능할까? MyClass obj1; MyClass obj2; obj1 = obj1 + obj2; 객체를 객체끼리 더해서 대입한다...라는 뜻인거 같은데 가능해보이지는 않는다. 물론 가능하지 않다. 하지만 C++에서는 가능하도록 만들 수 있다. 바로 연산자 오버로딩을 이용해서 연산자를 재정의하면 위의 코드가 가능해지도록 만들 수 있다. 더하기 연산자를 다시 한번 자세히 살펴보도록 하자. a = 1 + 2; 라는 코드가 있다고 한다면, 이 코드를 자세히 보면 연산자 우선 순위에 의해서 +가 먼저 실행되고, =가 그 뒤에 실행되는데, + 를 보면 + 를 기준으로 앞 뒤의 정수들 더해서 정수를 만들어 준다는 것을..