Adafruit NeoPixel какая-то дурацкая проблема
- Войдите на сайт для отправки комментариев
Пт, 04/12/2020 - 12:14
Здравствуйте.
Есть вот такой простой код:
#include <Adafruit_NeoPixel.h> #define WIDTH 18 // ширина матрицы #define HEIGHT 17 // высота матрицы #define NUM_LEDS WIDTH * HEIGHT // общее количество диодов #define PIN 2 // пин матрицы1 #define PIN_el 6 // пин матрицы2 Adafruit_NeoPixel matrix(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel matrix_el(NUM_LEDS, PIN_el, NEO_GRB + NEO_KHZ800); const uint16_t colors[] = {matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) }; const uint16_t colors_el[] = {matrix_el.Color(255, 0, 0), matrix_el.Color(0, 255, 0), matrix_el.Color(0, 0, 255) }; void setup() { pinMode(PIN, OUTPUT); pinMode(PIN_el, OUTPUT); matrix.begin(); matrix_el.begin(); matrix_el.setBrightness(10); } void loop() { matrix_el.setPixelColor(10, 0xFFFFFF); matrix_el.show(); delay(100); matrix_el.setPixelColor(10, 0x000000); matrix_el.show(); delay(100); }
и он прекрасно работает на мега256 с кварцем 16 МГц, но совершенно не работает на 328 с внутренним генератором на 8 МГЦ.
Если из этого кода убрать объект matrix и оставить все только для объекта matrix_el то код замечательно работает и на 328 с внутренним генератором 8МГц.
А с двумя объектами отказывается работать. не понимаю в чем дело. куда смотреть? как исправить. очень прошу совета.
Смотреть в сторону покупки кварца, очевидно.
да это понятно. можно и платки в помойку выкинуть и забыть про них. развести еще одну. заказать в "резоните", отдать еще 7 000 рублей за 10 платок за срочность, но может все-таки как-то можно решить программно?
а то получается что с одним обьектом все работает хорошо, а с двумя уже никак?
виима, памяти не хватат.
adafruit у себя унутре хапает памяти либо 3*число светодиодов, либо 4 *
Светодиодов у тебя 306, значит памяти отхапаеца минимум 918 байт на 1 ленту. Вторая всяко в 328 мегу не влазиит
да это понятно. можно и платки в помойку выкинуть и забыть про них. развести еще одну. заказать в "резоните", отдать еще 7 000 рублей за 10 платок за срочность, но может все-таки как-то можно решить программно?
Довольно мелкая плата за ленивость протестировать до заказа.
"Отказывается" письменно или устно?
виима, памяти не хватат.
adafruit у себя унутре хапает памяти либо 3*число светодиодов, либо 4 *
Светодиодов у тебя 306, значит памяти отхапаеца минимум 918 байт на 1 ленту. Вторая всяко в 328 мегу не влазиит
да. вы правы. так и есть.
да. вы правы. так и есть.
Дыкёптыть.
почему ж тогда arduino IDE обманывает меня показывая, что всего 3% памяти используется
потому что ИДЕ умеет считать память только на глобальные переменные, а у вас основной расход - на локальные переменные внутри библиотеки NeoPixel. которые к тому же наверняка еще и динамические, которые ИДе тоже не видит
а атмел студио умеет? давно уже думаю перейти на нее
а атмел студио умеет? давно уже думаю перейти на нее
не знаю, но сомневаюсь.
Посчитать налезание стека на кучу или наоборот - не такая простая задача
внимательно посмотри на строку 6. Откуда компилятору знать, сколько памяти будет жрать этот массив? Это знает только менеджер кучи, уже на этапе выполнения.
Переходить на Atmel Studio в таком контексте - бессмысленно, он тоже не узнает что у тебя в голове.
понял. спасибо большое.