본문 바로가기

컴퓨터 과학 & 영상처리 관련/임베디드

메모리는 돈이다

rom 최적화 방법

매크로나 인라인을 사용하지 않는다 -> 코드가 길어지므로

전역 변수는 초기화 하지 않는다 -> bss는 startup코드가 생성하니깐

상수나 전역 변수 대신 지역 변수 사용 -> 스택에서 쓰므로

표준 라이브러리 함수 자제 -> 사용하지 않는 부분이 많이 담겨있다. 직접 필요 부분만 만들어 쓰도록

 

 

 

ram 최적화 방법

ram 최적화는 스택 최적화로 볼 수 있다. 그래서 스택을 얼마나 효율적으로 사용하느냐가 관건이 된다. 스택에는 지역 변수나 함수의 인자와 문맥이 저장된다.

 

함수 호출은 깊지 않게

 

값이 변하지 않는 전역 변수의 상수화

-const를 이용

 

프로그램은 롬에서 실행

- text세그먼트를 ram으로 옮기는 경우 rom보다 속도가 빨라서 그렇게 하지만 용량을 줄이자면 이렇게 할 수 있다

 

비트 플래그 활용

-인터럽트 발생 여부, 검색 여부, 등 이러한 플래그는 참,거짓만을 나타내기 때문에 1비트로 충분. boolean 타입이 없으므로 보통 int형 변수를 사용한다

 

 

 

#include <stdio.h>

struct SR{
     unsigned int CF : 1,
     PF:1,
     AF:1,
     ZF:1,
     SF:1,
     IF:1,
     MOD:4;
};


int main(void)
{
     struct SR flag = {1,1,1,1,1,1,0xF};

     if(flag.CF)
          printf("carry");
     if(flag.PF)
          printf("parity");
     if(flag.AF)
          printf("assistant carry");
     if(flag.ZF)
          printf("zero");

return 0;
}

 

결과 전부 출력됨...printf()로 32bit 전부 보고싶은데 그건 안되는 모양

 31 - 0

여기서 0쪽부터 cf,pf,a,zf,sf,if,mod 순으로 저장됨