2016-07-18 2 views
0

저는 Atmel AVR 프로젝트를 작업하고 있으며,이 두 가지 방법 중 어느 것이 더 적은 메모리를 사용하는지 궁금합니다. 나는 8 비트 Atmel Atmega328을 연구 중이다. 나는 여러 외부 함수 (클래스 외부)에 전달해야 할 가치가있다.제한된 메모리로 개발

사례 1 : 처리기 매크로 :

#define MY_VALUE 0x10 

class MyClass 
{ 
    public: 
     MyClass (); 
     void myMethod (); 
     void myMethod2 (); 
}; 

// Constructor 

void MyClass::myMethod () 
{ 
    externalFunction (MY_VALUE); 
} 

void MyClass::myMethod2 () 
{ 
    externalFunction2 (MY_VALUE); 
} 

사례 2 : 사용 CONST 정적 값 :

class MyClass 
{ 
    public: 
     const static uint8_t MY_VALUE = 0x10; 

     MyClass (); 
     void myMethod (); 
     void myMethod2 (); 
}; 

// Constructor 

void MyClass::myMethod () 
{ 
    externalFunction (MyClass::MY_VALUE); 
} 

void MyClass::myMethod2 () 
{ 
    externalFunction2 (MyClass::MY_VALUE); 
} 

아니면 메모리 사용을 redusing 더 나은 방법이 존재한다.

질문 2 : 이상으로 동일하지만 uint8_t 대신 uint16_t 또는 uint32_t을 사용 하시겠습니까?

+1

컴파일 된 결과는 컴파일러에 따라 다르지만 이는 학교의 미세 최적화 예제입니다. 예 : 'externalFunction'가'int'를 받아들이면 첫 번째 예제에서'0x10'는'int '(8 비트 컨트롤러에서'sizeof (int) == 2'라고 가정)로 컴파일 될 것이고, 추가 바이트). 프로토 타입이'uint8_t'를 받아들이면 아무런 차이가 없을 것입니다. 그러나 이러한 세부 사항에 에너지를 낭비하지 않는 것이 좋습니다. – Groo

+0

binutils의 gnu objdump는이 정보를 표시합니다. https://sourceware.org/binutils/docs-2.26/binutils/objdump.html#objdump를 참조하십시오. – Gregg

+0

AVR과 같은 리소스가 제한된 시스템의 경우 C++가 아닌 C를 사용하십시오. – JimmyB

답변

0

사례 1 : 프로세서 매크로 : 메모리가 주요 우려 경우 내가가 #define한다 또는 열거에 비해 추가 메모리를 사용 const를 때문에 #DEFINE 또는 열거하라는 제안합니다.

관련 문제