Условная компиляция ядра.

DeGlucker
Offline
Зарегистрирован: 23.07.2014

Как сделать условную компиляцию ядра ? #define в скетче компилятор игнорирует, видимо ядро компилируется до скетча
Спасибо.
 

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

Какого ядра и зачем компиляции быть условной?

DeGlucker
Offline
Зарегистрирован: 23.07.2014

Мне надо знать адрес стека до loop

в main cpp

#if defined(__SAVESP__)
  cli();
  asm volatile (
  " in   r24, __SP_L__\n"
  " in   r25, __SP_H__\n"
  " sts  __USP__, r24\n"
  " sts  __USP__+1, r25\n"
  ::);
  sei();
#endif

и еще некоторые действия, которые надо выполнять в отдельных случаях.

 

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

Мошт в IDE кэширование агрессивное включено и на второй раз компилятор уже игнорит изменения в main.cpp ? Хотя, конечно, не должен. 

DeGlucker
Offline
Зарегистрирован: 23.07.2014

build я очищаю, main.cpp.o создается новый, но без моих доработок.

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

DeGlucker пишет:

в main cpp

И кто-то, кроме тебя, должен знать, что это за файл, откуда он вылез, в каком порядке компилируется, и так далее?

DeGlucker
Offline
Зарегистрирован: 23.07.2014

D:\arduino16\hardware\arduino\avr\cores\arduino\main.cpp,

в каком порядке компилируется не знаю, но думаю что до скетча, т.к. в скетче #if defined действует.

ОбЪявленная в main.cpp __USP__ в скетче как external доступна, но равна 0

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

DeGlucker пишет:

в скетче #if defined действует

порядок компиляции не имеет значения

#define макрос действует только "вниз" от места своего определение до конца файла или до директивы #undef. Понятие "вниз" включает так же файлы, включенные директирой #include ниже места определения макроса и файлы. куда включен файл с определениемю

Так что макросы, определенные в скетче - естесственно только в скетче и действуют.  Их действие никак не распространяется на иные единицы трансляции, как например main.c - и изменить это невозможно

То что вы хотите сделать - задается как ключи компилятора опциями -D

DeGlucker
Offline
Зарегистрирован: 23.07.2014

b707 Спасибо за  внятный ответ.

А какой директивой можно задать ключ компилятора из скетча ?