разное потребление ресурсов памяти при казалось бы однотипном коде

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

заметил, что если при опросе пинов, номера заданы явно - то памяти требуется меьнше, чем если через переменную...

 int BTN[8] = {6,7,8,4,5,2,3,1};/* -, + , сброс, K1+-, K2=  , K3=, K4=, датчик */
 bool btn_b[8]={0,0,0,0,0,0,0,0};
 
void setup() {}

void loop() {
for (int i = 0; i < 8; i++) {  btn_b[i]=!digitalRead(BTN[i]);   }   /*опрос физических кнопок*/
}

Скетч использует 740 байт (2%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 33 байт (1%) динамической памяти, оставляя 2015 байт для локальных переменных. Максимум: 2048 байт.

и

 int BTN[8] = {6,7,8,4,5,2,3,1};/* -, + , сброс, K1+-, K2=  , K3=, K4=, датчик */
 bool btn_b[8]={0,0,0,0,0,0,0,0};
 
void setup() {}

void loop() {

for (int i = 0; i < 8; i++) {  btn_b[i]=!digitalRead(i);   }   /*опрос физических кнопок*/

}

Скетч использует 692 байт (2%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 17 байт (0%) динамической памяти, оставляя 2031 байт для локальных переменных. Максимум: 2048 байт.

16 байт ОЗУ экономии на ровном месте выходит....

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

А если ТС включит ум и протрет глаза. Намек где const коде? или #define 

Вот что животворящий const делает

const byte BTN[] = {6, 7, 8, 4, 5, 2, 3, 1}; /* -, + , сброс, K1+-, K2=  , K3=, K4=, датчик */
bool btn_b[] = {0, 0, 0, 0, 0, 0, 0, 0};

void setup() {}

void loop() {
  for (int i = 0; i < 8; i++) {
    btn_b[i] = !digitalRead(BTN[i]);    /*опрос физических кнопок*/
  }
}
/*Скетч использует 730 байт (2%) памяти устройства. Всего доступно 30720 байт.
  Глобальные переменные используют 25 байт (1%) динамической памяти, оставляя 2023 байт для локальных переменных. Максимум: 2048 байт.
*/

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

они тут не причем- внимательнее сравните оба кода

или вы можете сделать с дефайном/константой код более легким и выполняющим этоже самое действие?

sadman41
Offline
Зарегистрирован: 19.10.2016

И вновь нечестный Си. Проср... утерял  массив из восьми элементов по два байта, скотина такая.

 

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

он не утерял

если взять отдельно любое дейтсиве с массивом в лупе - тоесть он будет явно задейтвован - то разница в 16 байт останется

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, и чем вопрос? Использовали массив - +16байт, не испоьзовали - +0байт. 

Компилятор наперсточниками писан - постоянно туда-сюда байты прячет, добавляет. Смиритесь уже.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не, ну точно: "аналогичные операции, функции, конструкции отлично работают в php, js, jass( хотя он сильно урезаная версия java) paskal но вот в "С" они странным образом глючат на ровном месте".

Надо срочно переходить с этого богомерзкого "С" на тёплый, ламповый "paskal".

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

О, изморозь столкнулась с оптимизацией компилятора :) Завтра откроет ещё чего-нибудь нового. Посоны, только не говорите ему, что можно подробный вывод сообщений компилятора в IDE включить, и тогда во втором случае ему вывалится warning про unused variable :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ELITE пишет:

заметил, что...

Наблюдательный!

Клапауций 567
Offline
Зарегистрирован: 17.02.2018

ELITE пишет:

16 байт ОЗУ экономии на ровном месте выходит....

сделай так и подумай, почему получается экономия:

//  int BTN[8] = {6,7,8,4,5,2,3,1}; /* -, + , сброс, K1+-, K2=  , K3=, K4=, датчик */
 bool btn_b[8]={0,0,0,0,0,0,0,0};
 
void setup() {}

void loop() {
for (int i = 0; i < 8; i++) {btn_b[i]=!digitalRead(i);}   /*нифига не опрос физических кнопок*/
}

твоя логическая ошибка в том, что ты сравниваешь два кода с разным функционалом - результат сравнения может быть любой.

предлагаю не отсанавливаться на достигнутом, а и сравнимать всё со всем... например, яблоки с грушами - оба казалось бы(с) фрукты, а по вкусу отличаются. О_О