Как лучше исключать куски кода из скетча?

Sakolua
Offline
Зарегистрирован: 13.08.2019

Отладка устройства идет через экран, которого не будет в конечном варианте.
Как лучше в таком случае поступить с той частью, программы, которая отвечает за обработку экрана? Просто игнорировать не получается. Без него зависает. Удалять все строки тоже не вариант.
Как лучше поступать в таком случае? Есть какие-то стандартные решения типа билда release или debug, кроме завести переменную и проверки.

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

#ifdef DEBUG_ON
Serial.begin(9600)
#endif

...

#ifdef DEBUG_ON
Serial.print("i=");Serial.println(i);
#endif
anatoli_nik
Offline
Зарегистрирован: 17.01.2019

Есть такая хрень, директивы препроцессора.

Примерно так:

//нужное раскоментировать, ненужное закоментировать
#define OTLADKA
//#define RELISE

#ifdef OTLADKA
 //какой то говнокод
#endif

#ifdef RELISE
//быдлокод
#endif

Опередили :(

rkit
Offline
Зарегистрирован: 23.11.2016

Именно константной переменной в C++ это и делается.

b707
Offline
Зарегистрирован: 26.05.2017

по отладочной печати где-то подсмотрел такое:

//#define DEBUG

#ifdef DEBUG
#define DEBUG_PRINT(x)     Serial.print(x)
#define DEBUG_PRINTLN(x)  Serial.println(x)
#define DEBUG_PRINTDEC(x)     Serial.print(x, DEC)

#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTDEC(x)
#define DEBUG_PRINTLN(x)
#endif 

#endif 

удобно, что не надо каждый вывод в сериал окружать #ifdef #endif

 

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

rkit пишет:

Именно константной переменной в C++ это и делается.

А что такое константная переменная?

Sakolua,

есть старый добрый дедушкин #define о котором коллеги Вам уже рассказали. Но это как сегодня КТ315 использовать. Для молодых, прогрессивных и продвинутых есть "constexpr if". Сам я использую #define (когда не выпендриваюсь).

rkit
Offline
Зарегистрирован: 23.11.2016

Такая переменная, которая не меняется и задана в момент компиляции.

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

b707 пишет:

удобно, что не надо каждый вывод в сериал окружать #ifdef #endif


Удобно, бесспорно. Пока внутре скобок один-два оператора и нет if-а. С if-ом у IDE автоформатирование клинит.

Sakolua
Offline
Зарегистрирован: 13.08.2019

Нашел еще вот такой пример, расширеный

https://github.com/landis/arduino/blob/master/libraries/DebugUtils/Debug...

Green
Offline
Зарегистрирован: 01.10.2015

sadman41 пишет:
Удобно, бесспорно. Пока внутре скобок один-два оператора и нет if-а. С if-ом у IDE автоформатирование клинит.

Неужто кто то пишет в IDE? 

Sakolua
Offline
Зарегистрирован: 13.08.2019

А в чем?

Green
Offline
Зарегистрирован: 01.10.2015

Галочка в настройках "использовать внешний редактор".

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

Я пишу в IDE и не испытываю тошноты.

Green
Offline
Зарегистрирован: 01.10.2015

Мало пишешь. К тому же "у IDE автоформатирование клинит".)

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

Ну, каждый день не пишу (но объемные штуки есть). Это же хобби, а не повинность.

Green
Offline
Зарегистрирован: 01.10.2015

b707 пишет:
удобно, что не надо каждый вывод в сериал окружать #ifdef #endif

 

​#define DBG(x) x
DBG( всё что хош; )

 

Sakolua
Offline
Зарегистрирован: 13.08.2019

что это?

b707
Offline
Зарегистрирован: 26.05.2017

Sakolua пишет:

что это?

то что вы спрашивали