Ви не увійшли.
нано/уно/мега/... - різні плати мають різну кількість виводів (які, зокрема, мають особисту нумерацію).
Чи існують оператори коду, за допомогою яких, при наявности номера, можно б було виконати перевірку - чи є у плати, на яку записан цей скетч, реальний вивод за перевіряємим номером?
Неактивний
#ifdef D23
// do something
#endif
Десь так
Чи існують оператори коду, за допомогою яких, при наявности номера, можно б було виконати перевірку - чи є у плати, на яку записан цей скетч, реальний вивод за перевіряємим номером?
Можете описати конкретніше, яку саме проблему хочете цим вирішити? Перевірити під час компіляції чи під час виконання? Вас цікавлять виводи портів GPIO чи їх альтернативні функції?
Неактивний
Треба подивитися. Там всередині всі кросплатформені штуки на define/ifdef. Можливо, воно називається інакше. Ctrl click в digitalWrite - і кому треба той побачить.
Треба подивитися. Там всередині всі кросплатформені штуки на define/ifdef. Можливо, воно називається інакше.
Воно ніяк не називається, номери пінів у фреймворка - це просто числа. Вони використовуються як індекси в таблицях. Є макроси для пінів з функцією аналогового входа.
Для загального випадка такого "інструмента" нема. Для вирішення якоїсь конкретної проблеми можуть бути варіанти.
Остання редакція dimich (2025-08-06 11:41:35)
Неактивний
Загальна ідея була така: експлуатація виробу планується на мега, де виводи використовуються як ціфрові... А ось обкатка, зачасту йде на нано чи уно, і при звернені до відсутніх віводів... - відбуваєтся богна що. Через окремі меркування, реалізувати відхилення звернень до відсутніх виводів на рівні верхнього керовання не можно. Тому й задав це питання, щоб не множити окремі скетчі до різних плат, а один раз закласти перевирку номерів....
Неактивний
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
Можна так
Або почитати як влаштовано pins_arduino.h
щоб не множити окремі скетчі до різних плат
#idef __AVR_ATmega8__
#else
#endif
Для кожної вашої каменюки - свій ifdef. І зробити, щоб під неправильний камінь не зібралось. І буде вам щастя.
Остання редакція jokeR (2025-08-06 12:09:16)
Неактивний
щоб не множити окремі скетчі до різних плат, а один раз закласти перевирку номерів....
Фреймворк визначає макрос відповідно до плати, для якої збирається скетч. Ви можете перевіряти ці макроси препроцесором, наприклад:
#if defined(ARDUINO_AVR_UNO)
...
#elif defined(ARDUINO_AVR_NANO)
...
#elif defined(ARDUINO_AVR_MEGA) || defined(ARDUINO_AVR_MEGA2560)
...
#else
#error Board not supported
#endif
Імʼя макроса складається з префікса ARDUINO_ та значення .build.board= відповідної цільової плати з boards.txt.
Неактивний
#idef __AVR_ATmega8__
Ці макроси визначаються компілятором відповідно до опції -mmcu. До самих плат ардуіно вони не мають відношення, для різних плат з однаковим процесором ці макроси однаково визначені.
Неактивний