2016-07-18 4 views
0

Я работаю над проектом AVM Atmel в настоящий момент, и startet удивляется, какой из этих двух методов использует меньше памяти. Я работаю с 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' (предполагая 'sizeof (int) == 2' на вашем 8-битном контроллере, он получит дополнительный байт). Если прототип принимает 'uint8_t', то, вероятно, не будет различий. Но я настоятельно рекомендую вам не тратить свою энергию на такие детали. – Groo

+0

gnu objdump в binutils отображает эту информацию, см. Https://sourceware.org/binutils/docs-2.26/binutils/objdump.html#objdump. – Gregg

+0

Используйте C, а не C++, для систем с ограниченными ресурсами, таких как AVR. – JimmyB

ответ

0

Случай 1: Использование процессора макросъемки: если память является основным обеспокоенный я предлагаю пойти на #define или перечислимого потому Const использует дополнительную память по сравнению с #define или ENUM.