Вопрос по #ifdef ARDUINO
- Войдите на сайт для отправки комментариев
Чт, 06/02/2020 - 17:16
Здарвстуйте. Мне нужно поправить библиотеку, и в ней я наткнулся на незнакомую директиву #ifdef ARDUINO. По контексту можно догадаться, что эта библиотека может использоваться не только в Arduino IDE, но так ли это? Для этого там используется такая запись? Т.е в ардуино.h первых строкой прописано #define ARDUINO?
Не помню такого в ардуино.хэ
Сделайте поиск по файлам фразы "define ARDUINO"
такой код
В какой папке искать?
Сложно сказать. Может в файлах проекта.... Ну, можно и в C:\Programm Files\Arduino ещё...
В общем поискал в папке с ардуино, в билиотеках, в папке Arduino15, нигде нет.
Еще в библиотеках такую запись видел
Тоже непонятно что оно делает.
Это директивы препроцессора
А, ну эта хреновина задаёт версию IDE. В ветке 1.0.x версия обозначалась в этом макросе, получается.
судя по контексту - она и сейчас так обозначается. только ARDUINO теперь примерно 190
Это директивы препроцессора
#define, #ifdef - это директивы препроцессора.
#define, #ifdef - это директивы препроцессора.
их еще много - #ifndef #else #endif #include и тд
#define, #ifdef - это директивы препроцессора.
их еще много - #ifndef #else #endif #include и тд
Ну да, все что с решетки начинается...
Получается ARDUINO хранит версию IDE, не более. Надеюсь нулевой версии не было.
<Папка-с-ArduinoIDE>/hardware/arduino/avr/platform.txt
Обсуждаемый дефайн жирным выделен. Ключ компилятора -D - не нужно объяснять? Очень надеюсь...
## Preprocessor
preproc.includes.flags=-w -x c++ -M -MG -MP
recipe.preproc.includes="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {preproc.includes.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}"
preproc.macros.flags=-w -x c++ -E -CC
recipe.preproc.macros="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {preproc.macros.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{preprocessed_file_path}"
----------------------------
И да - я хотел вставить как "код", но внутри кода не выделяется жирным.... :((
Мне нужно поправить библиотеку, и в ней я наткнулся на незнакомую директиву #ifdef ARDUINO.
Если эта директива Вам незнакома - не лезьте править библиотеку - ничего хорошего из этого не вырастет.
Прости, брат. Я правлю для личных целей, тут нет какой-то ответственности если это все вдруг не выполнит возлагаемую на него функцию. Просто без правки это работать не будет. Мне нужно чтобы эта библиотека корректно работала и на STM32 и на других ардуинах. Сама библиотека очень грубо адаптирована под STM народными "умельцами", и она сделала мне подвох, по тому что у меня перестал в один прекрасный момент работать обмен по NRF24. Оказалось там товарищи, которые ее адаптировали, почему-то не учли, что делитель частоты SPI должен быть другим, нежели для 16МГц процессора. И еще я хочу без ущерба использовать эту же библиотеку и для ATMEG.
Поэтому все навсего заменю
на
Все должно работать.
Все должно работать.
Должно работать или действительно работает? :)
Я брал стандартную библиотеку NRF и она у меня нормально запускалась на СТМ, без всяких манипуляций. А у вас источник проблемы может быть в том, что вы посадили на одну шину SPI два девайса, требующих разных скоростей шины. В этом случае полезно вспомнить, что например на STM32F103 два канала SPI и конфликтующие клиенты можно разнести по разным каналам
Все должно работать.
Должно работать или действительно работает? :)
Изначально она у меня тоже работала. Потом я стал менять прошивки, перепаивать провода и все, капут короче, чего я только не делал. Даже если возвращал старую прошивку, или прошивал самую простую ничего не помогало. Потом я с помощью printDetails увидел как что-то каверкает адреса, что я шлю NRFу. Т.е. я шлю F0F1F2F3F4LL а контроллер мне возвращает что-то типа этого: 1111 1000 1111 1001 1111 1011 1111 1011 1111 1111 в двоичном виде. И я понял что что-то не успевает обрабатывать или сменять приходящие биты. Я проверил эту теорию, уменьшив частоту STM до 48 МГц, и о чудо, все заработало. И потом я нашел этот параметр обмена по SPI. Там даже в комментах пишут что:
" // Minimum ideal SPI bus speed is 2x data rate
// If we assume 2Mbs data rate and 16Mhz clock, a
// divider of 4 is the minimum we want.
// CLK:BUS 8Mhz:2Mhz, 16Mhz:4Mhz, or 20Mhz:5Mhz"
А если 72 делить на 4, то получится 18МГц, что не есть хорошо.
...А у вас источник проблемы может быть в том, что вы посадили на одну шину SPI два девайса, требующих разных скоростей шины.