GyverCore for ATmega328p/168p
Быстрое ядро для Arduino IDE. В разработке
Основано на оригинальном ядре Arduino версии 1.8.9, большинство функций заменены на более быстрые и лёгкие аналоги, убрано всё лишнее и не относящееся к микроконтроллеру ATmega328p, убран почти весь Wiring-мусор, код упрощён и причёсан.
Установка
-
Открой the Arduino IDE
-
Зайди в Файл > Настройки
-
Вставь этот адрес в Дополнительные ссылки для менеджера плат:
https://alexgyver.github.io/package_GyverCore_index.json
-
Открой Инструменты > Плата > Менеджер плат...
-
Подожди загрузку списка
-
Листай в самый низ, пока не увидишь GyverCore
-
Жми Установка
-
Закрой окно
-
Выбери плату в Инструменты > Плата > GyverCore > ATmega328p based
-
Выбери в CPU & BOOT нужный вариант загрузчика
-
Готово
Изменения
Облегчено и ускорено
Время выполнения функций, мкс
Функция | Arduino | GyverCore | Быстрее в |
---|---|---|---|
pinMode | 2.90 us | 0.57 us | 5.09 |
digitalWrite | 2.90 us | 0.57 us | 5.09 |
digitalRead | 2.45 us | 0.50 us | 4.90 |
analogWrite | 4.15 us | 1.13 us | 3.67 |
analogRead | 112.01 us | 5.41 us | 20.70 |
analogReference | 0.00 us | 0.69 us | 0.00 |
attachInterrupt | 1.20 us | 1.18 us | 1.02 |
detachInterrupt | 0.82 us | 0.57 us | 1.44 |
Занимаемое место, Flash, байт
Функция | Arduino | GyverCore | Разница, Flash |
---|---|---|---|
pinMode | 114 | 24 | 90 |
digitalWrite | 200 | 24 | 176 |
digitalRead | 190 | 24 | 166 |
analogWrite | 406 | 48 | 358 |
analogRead | 32 | 72 | -40 |
analogReference | 0 | 32 | -32 |
attachInterrupt | 212 | 180 | 32 |
detachInterrupt | 198 | 150 | 48 |
Serial.begin | 1028 | 166 | 862 |
print long | 1094 | 326 | 768 |
print string | 2100 | 1484 | 616 |
print float | 2021 | 446 | 1575 |
parseInt | 1030 | 214 | 816 |
readString | 2334 | 1594 | 740 |
parseFloat | 1070 | 246 | 824 |
Примечание: analogRead и analogReference имеют расширенную функциональность и весят чуть больше
Добавлено
- Подсветка в коде A0, A1.. A7
- Макрос bitToggle(value, bit), инвертирует состояние бита bit в байте value
- Функция digitalToggle(pin), инвертирует состояние пина
- Расширенная генерация ШИМ:
- setPWM_20kHz(byte pin) - установить частоту ШИМ 20 кГц (8 бит) на пинах 3, 5, 9, 10
- setPWM_9_10_resolution(boolean resolution) - разрешение ШИМ на пинах 9 и 10 (для режима 20 кГц): PWM_8BIT / PWM_10BIT
- setPwmFreqnuency(pin, freq) - установить частоту ШИМ (8 бит) на пинах 3, 5, 6, 9, 10, 11: PWM_DEFAULT / PWM_8KHZ / PWM_31KHZ
- setPWM_default(byte pin) - настроить ШИМ по умолчанию
- Расширенная работа с АЦП
- analogStartConvert(byte pin) - начать преобразование с выбранного пина
- analogGet() - получить преобразованное значение (между analogStartConvert и analogGet можно выполнять действия, в отличие от ожидания в analogRead())
- analogPrescaler(uint8_t prescl) - установить предделитель для АЦП (2, 4, 8, 16, 32, 64, 128)
- В функции analogRead(pin) вместо пина можно указать INTERNAL (получить значение внутреннего опорного напряжения) или THERMOMETR (получить приблизительную температуру МК). Примечание: нужно установить предделитель 128
- Добавлен быстрый и лёгкий UART (аналог классу Serial)
- uartBegin() - запустить соединение по последовательному порту со скоростью 9600
- uartBegin(baudrate) - запустить соединение по последовательному порту со скоростью baudrate
- uartEnd() - выключить сериал
- uartPeek() - вернуть крайний байт из буфера, не убирая его оттуда
- uartClear() - очистить буфер
- uartRead() - вернуть крайний байт из буфера, убрав его оттуда
- uartWrite() - запись в порт
- uartPrint() - печать в порт (числа, строки, char array)
- uartPrintln() - печать в порт с переводом строки
- uartAvailable() - возвразает true, если в буфере что-то есть
- uartSetTimeout() - установить таймаут для функций парсинга (по умолчанию 100 мс)
- uartParseInt() - принять целочисленное число
- uartReadString() - принять строку
- uartParseFloat() - принять число float
- uartParsePacket(dataArray) - принять пакет вида $50 60 70; в массив dataArray (смотри пример)
Дополнительно
- Добавлен вариант прошивки без загрузчика (во всю доступную Flash память) для прошивки через ISP
- Добавлен вариант прошивки с отключенными функциями времени (освобождает вектор TIMER0_OVF_vect для личного пользования)