Да как так-то??? (цикл уходит за пределы)
- Войдите на сайт для отправки комментариев
Вс, 13/12/2015 - 20:53
Картинка скажет сама за себя. У кого не отображается - замечу, что банальный цикл выходит за пределы. Неведомым мне образом. Соответственно вся обработка данных (а там структуры и массивы) уходит в левые области памяти, контроллер уходит в ребут.
Может банально не хватать ОЗУ, например. Это всего лишь предположение.
А как это можно узнать?
просто не очень охота переносить все на MEGA. Я хотел в итоге программу перенести на NANO, а ее вставить в плату с исполнительными устройствами. Да и мега дороже. Да и зря чтоли я мучался с оптимизацией или рисованием ;)
Памяти в MEGA не на много больше...
Да и по программной памяти укладываюсь с запасом: провел кое-какие оптимизации. Привожу код целиком, за исключением слегка модифицированных UTFT_buttons
Строка 149, длина буфера 30 байт. Строка формата, 27 байт длиной, плюс имя сенсора, ещё 7 байт, уже 34. Остальное даже не смотрел, с такими плюхами выполнение кода непредсказуемо.
Круто! Спасибо большое!
Я неопытный в сях приплюснутых, делаю тупые ошибки. последние 10..15 лет программировал на интерпретируемых языках, с нечеткой типизацией.
Подскажите, пожалуйста, есть ли методы анализа сколько памяти используется?
Не сочтите за наглость, не могли бы Вы проконсультировать по поводу этой функции?
Если включить блок кода после комментария "раз в минуту сохраняем данные" то после вызова этой фунции ничего не работает. Сама функция - тоже, в последовательный порт не уходят сообщения, которые определены в начале функции. Подозреваю что дело в размере массива данных sensor[n].data[]: сейчас он определяется тупо так:
{"OUTDOOR",{ 0x08, 0xFF, 0x79, 0xF6, 0x01, 0x15, 0x02, 0xAA },56,2 ,{0,0,0,0,0,0,0,0,0,0}},//улица
Большое спасибо!
Ну там вообщетто новые IDE после компилляции пишут про память.
32 строка,, byte - беззнаковые, значит условие i >= 0 выполняется всегда, цикл бесконечный.
kisoft, спасибо! Но не помогло. Исполнение не доходит до этого участка кода вообще
У вас lastTime инициализируется в теле функции. Нужно сделать ее глобальной.
Если включить блок кода после комментария "раз в минуту сохраняем данные" то после вызова этой фунции ничего не работает. Сама функция - тоже, в последовательный порт не уходят сообщения, которые определены в начале функции. Подозреваю что дело в размере массива данных sensor[n].data[]: сейчас он определяется тупо так:
{"OUTDOOR",{ 0x08, 0xFF, 0x79, 0xF6, 0x01, 0x15, 0x02, 0xAA },56,2 ,{0,0,0,0,0,0,0,0,0,0}},//улица
Большое спасибо!
Функция millis возвращает значение не того типа, которое Вы определили переменной curtime.
Подскажите, пожалуйста, есть ли методы анализа сколько памяти используется?
http://andybrown.me.uk/2011/01/01/debugging-avr-dynamic-memory-allocation/
ЕвгенийП, спасибо, попробую!
Вот что получилось:
Сейчас смотрю где память можно подрезать. Хотя бы до 1 тыс. отсчетов увеличить.
Еще пытаюсь решить проблему с мерцанием и фиговым качеством изображения. Особенно это видно когда рисуешь много линий. Например, графики те же. По экрану мерцают вертикальные линии хаотично...
Ну, не знаю, как мерцает, а в статике красиво выглядит
Товарищи, имейте в виду что библиотека UTFT_Buttons с ходу отжирает около 500 байт ОЗУ. Ибо там одни классы и все в оперативке