전체 글 51

13 Using the GNU tools

13.1 Options for the C compiler avr-gcc13.1.1 Machine-specific options for the AVR 13.1.2 Selected general compiler options* -On 최적화 레벨 n. n이 증가할수록 더많은 최적화를 수행한다. -O0은 최적화를 전혀 수행하는 않음-Os를 사용하면 -O2 옵션을 사용하는 것과 같으며, 코드사이즈를 증가시키지 않는다.-O3은 가장 높은 최적화를 수행하지만 최적화 옵션을 -O3으로 지정하는 것은 -O2 옵션에다가 -finline-functions 옵션과 -frename-registers 옵션을 추가하는 것과 같은데, -finline-functions 옵션은 함수를 호출할 때 매크로 확장의 형태로 처리하는 기능이다..

AVR 2014.04.17

11 자주 묻는 질문들

자주 발생하는 문제점에 대한 해결 방안을 설명 11.2 My program doesn’t recognize a variable updated within an interrupt routine다음과 같은 loop 코드에서: uint8_t flag;...ISR(SOME_vect) {flag = 1;}...while (flag == 0) {...} 코드 최적화 레벨을 사용하면 flag 변수가 최적화 되면서 버그가 생길수 있다.다음과 같이 선언해서 사용해야 한다.volatile uint8_t flag; 11.3 I get ”undefined reference to...” for functions like ”sin()”수학 함수에 접근하려면 를 포함해야 한다. 링커에게도 libm.a 라이브러리를 사용하도록 지정해..

AVR 2014.04.17

8 How to Build a Library

8.1 Introduction라이브러리를 만들자! 하는 내용 8.2 How the Linker Works컴파일러는 하나의 고수준 언어 파일(예를들어 C언어)을 컴파일해서 하나의 오브젝트 파일을 만든다. 링커(ld)는 오브젝트 모듈들을 묶어주는 역할을 한다. 8.3 How to Design a Library링커가 어떻게 동작하는지를 아는것은 라이브러리 디자인을 하기 위해서 중요한 점이다. 8.4 Creating a Librarylibrarian(라이브러리 관리자)을 ar (archiver의 약자) 이라고 하는데, GNU Binutils project에서 찾을 수 있다.이 프로그램은 이미 AVR 타켓용으로 avr-ar 이라는 이름으로 빌드되어 있다.librarian 프로그램이 하는일은 간단하다. : 오브젝트..

AVR 2014.04.17

6 avr-libc and assembler programs

6.1 IntroductionAVR 마이크로컨트롤러에서 어셈블러 코드를 사용해야 할 몇가지 이유가 있다.• Code for devices that do not have RAM and are thus not supported by the C compiler.• Code for very time-critical applications.• Special tweaks that cannot be done in C. 6.2 Invoking the compiler 6.3 Example program 6.4 Pseudo-ops and operators어셈블러에서 사용할 수 있는 pseudo-ops 는 GNU assembler (gas) manual. 에 나와있다. 링크Some common pseudo-ops inclu..

AVR 2014.04.17

5 Data in Program Space

5.1 IntroductionGCC는 특별한 키워드 __attribute__를 가지고 있다.AVR GCC에서는 이런 특별한 기능들을 progmem이라고 부른다.이런 특성들은 데이터 선언에 사용되거나, data를 flash 메모리에 위치시키도록 할 수 있다.AVR-Libc는 PROGMEM 매크로를 제공한다. PROGMEM 매크로는 헤더파일에 정의되어 있다. 5.2 A Note On constconst 키워드에 대한 설명...read-only 특성 5.3 프로그램 영역에서의 데이터 입출력다음과 같은 전역 데이터를 만들었다고 가정하자:unsigned char mydata[11][10] ={{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09},{0x0A,0x0B,0x0C,..

AVR 2014.04.17