ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [마이크로프로세서] 통합 개발 환경
    학점은행제/마이크로프로세서 2021. 1. 17. 13:17

     

    make

    • 여러개의 소그 파일로부터 자동으로 목적 파일을 만들 수 있도록 의존 관계와 파일 갱신 시간 정보로 특정 프로그램의 실행 지정
    • make는 Makefile에 나열된 파일 간 의존 관계에 따라, 조건이 만족되었을 때 실행할 프로그램을 수행함
    • 통합 개발 환경에서는 make와 Makefile을 이용하여 변경된 소스 프로그램을 자동으로 찾아서 필요한 컴파일러, 어셈블러, 링커 등의 프로그램을 실행함
    • *어셈블리 언어로 만든 프로그램은 어셈블러를 통해서 기계어로 바꾼다

     

    Makefile

    • Makefile의 구조는 타깃, 선행조건, 명령으로 구성이 되어있음
    • Makefile의 실행 규칙은 타깃 파일과 선행 조건 파일의 갱신 시간 비교
    • 선행 조건이 더 최근이면 아래 줄에서 <탭> 문자 뒤에 있는 명령어 실행, 최근것을 우선순위로 둠
    • 이 구조가 C언어와 상당히 비슷하기 때문에 C언어를 알고 있으면 좋음
    타깃 . . . : 선행조건 . . .
    <탭> 명령
    <탭> .
    <탭> .

     

    예시

    • main.c, foo.c, def.h 가 모두 최근에 갱신된 파일이라고 가정해본다
    • 깊이 우선 탐색 방법으로 명령을 실행함
    all amin.elf main.hex (헥사)
    main.o : main.c def.h
               avr-gcc -c main.c
    foo.o : foo.c def.h
               avr-gcc -c foo.c
    main.elf : main.o foo.o
               avr-gcc -c amin.elf main.o foo.o  (크로스 컴파일)
    main.hex : main.elf
               avr-objcony -o ihex main.elf main.hex
    clean: -rm rf main.o foo.o main.elf

     

    프로그램 실행 순서

    avr-gcc -c main.c
    avr-gcc -c foo.c
    avr-gcc -o main.elf main.o foo.o
    avr-objcopy -o ihex main.elf main.hex

     

    *-c 는 컴파일 해주는 [옵션]

     

    최적화 옵션과 volatile 지시어

    • 생성되는 타킷 코드의 크기를 작게 하는 것을 우선으로 함
    • 옵션에 따라 크기와 실행속도가 달라짐

     

    최적화 옵션의 특징

    -00

    • 최적화를 하지 않음
    • 컴파일에 걸리는 시간을 줄이고, 소스 프로그램을 대응되는 명령어로 변환
    • JTAG 인터페이스를 사용하여 디버깅할때는 예측된 값을 정확히 관찰할 수 있어야 하므로, 최적화 하지 않는것이 바람직함

     

    -0 또는 -01

    • 가장 기본적인 최적화 옵션
    • 컴파일 시간과 컴파일할때 사용되는 메모리는 더 많이 필요

     

    -02

    • -01 옵션보다 더욱 많은 최적화
    • 번호가 높아질수록 최적화가 더 많이됌
    • gcc컴파일러는 메모리 - 속도 절충은 하지 않지만, 가능한 모든 최적화 기법을 수행할 수 있게 해줌
    • 컴파일 과정에서 더 많은 시간이 소요됌 대신에 코드 크기는 줄어듬
    • 실행 코드를 배포하기 위해서는 이 옵션이 바람직함

     

    -03

    • 최고의 최적화 옵션
    • 모든 최적과 옵션을 활성화 하고 최적화 진행함
    • inline 기능을 수행하여 간단한 함수 호출은 없애고 프로그램 내부로 포함
    • main 함수 sub 함수가 있을때 왔다갔다하면서 속도가 생기지만 sub에 있는 함수를 main 함수로 옮겨서 속도를 높인다
    • 크기는 커질 수 있지만 속도는 더 좋아진다
    • 마이크로컨트롤러에서는 다운로드 파일 크기가 너무 커져 제어하기가 불편하기 때문에 바람직하지 않음

     

    -0s

    • 코드의 크기를 줄이는 목적으로 수행함 - > 속도가 향상됌
    • 대부분 마이크로컨트롤러는 한정된 크기의 플래시 메모리를 사용하기때문에 이 옵션을 사용하는것이 바람직함

     

    다운로드 될 프로그램 크기 비교

    unsigned char sum;

    unsigned char x;

     

    int main(void)

    {

    unsigned char

    i = 10;

    x = 5;

    return x + 2;

    }

    위의 C언어 소스를

    • 최적화된 기계어 코드 옵션 -0s출력했을때 결과 : 224 bytes
    • 최적화되지 않은 기계어 코드로 출력했을때 결과 : 250 bytes

     

    volatile 지시어 선언으로 최적화 제외

    • 최적화가 항상 바람직한것은 아님
    • 최적화는 속도를 빠르게 하고 메모리 사용량을 줄일 수 있지만, 인터럽트를 사용하는 경우에는 자칫 원하지 않는 최적화가 실행될 수 있음
    • 인터럽트를 주의해야함
    • 프로그램이 설계와 다르게 작동할 수 있음
    • 이러한 오류를 막기 위해서는 인터럽트 서비스 루틴에서 사용할 변수에 volatile 지시어를 선언해서 사용해야함

     

    라이브러리

    • 라이브러리는 미리 컴파일 된 목적파일의 집합
    • 라이브러리 파일명은 보통 lib로 시작하고 확장자는 .a 
    • 일반 프로그래머도 아카이버 ar 명령으로 라이브러리를 만들어 사용함

     

    라이브러리와 링커 옵션

    • sin(), tan(), printf() 등과 같은 함수 GNU에서 컴파일된 형태로 묶어 라이브러리 모듈로 제공하고 있음
    • 수학함수 라이브러리 사용 방법 : 원시 프로그램 앞 부분에 #include <math.h> 포함
    • math.h 파일을 열어 주 프로그램에서 수학 함수 호출을 위한 프로토타입 포함
    • 링커 옵션에 -lm 추가
    • 링크 과정에서 libm.a 라이브러리 탐색
    • 주 프로그램에서 호출한 수학 함수 라이브러리를 기계어와 연결

     

    printf() 함수

    • vfprintf() 함수를 기본으로 변형된 함수
    • vfprintf() 함수는 % 문자 뒤에 d, c, u, f, o, x 등 매우 다양한 출력이 가능함
    • 타깃 코드의 크기를 위한 3가지 링커 옵션

     

    구분 기능 라이브러리 링커 옵션 파일크기
    기본형 부동소수점에 대한 출력을 제외하고 모든 % 형식의 출력을 지원함 libc.a 없음 보통
    최소형 매우 기본적인 정수형과 문자형에 대한 % 형식의 출력만을 지원 (문자열과 정수형) libprintnf_min.a -WI, -u, vfprintf -lprintf_min 작아짐
    충족형 부동소수점에 대한 출력까지 포함한 모든 % 형식의 출력을 지원함 Libprintf_flt.a -WI, -u, vfprintf -lprintf_flt 커짐

     

    Scanf() 함수

    • vfscanf() 함수를 기본으로 변형된 함수
    • vfscanf() 함수는 % 문자 뒤에 d, c, u, f, o, x 등 매우 다양한 출력이 가능함
    • 타깃 코드의 크기를 위한 3가지 링커 옵션
    구분 기능 라이브러리 링커 옵션 파일크기
    기본형 부동소수점을 제외하고 모든 % 형식의 입력 지원 libc.a 없음 보통
    최소형 기본형과 유사하고 [] 매칭 기능 제공 안됌 libscan_min.a -WI, -u, vfscanf -lscanf_min 작아짐
    충족형 기본형에 부동소수점까지 % 형식 외 입력 지원, 문자 검색 길이 제한 없음 libscan_flt.a -WI, -u, vfscanf -lscanf_min 커짐

    댓글

Today
Designed by Danbee Park.