Программные проблемы Arduino
1] Компилятор не справился с вызовом функции объекта из цикла loop. Пришлось создать отдельную функцию и вызвать оттуда.
Мне, всего лишь, надо было записывать в часы введённое время при повороте джойстика вправо в определенном экране. Скомпилированное и загруженное вешало этот «компьютер» после нажатия джойстика вправо откуда угодно.
Это явно компилятор какие-то не такие коды записал. Он должен читать ИмяФунуции() и писать ассемблерное jmp [Адрес функции], что в кодах уже означает код команды jmp (прыжок) и этот адрес. Вместо нужных команд – кодов он что-то не то понаписал.
2] Получила от компилятора сообщение «Low memory available, stability problems may occur», означающая что написанное не влезает в память микросхемы (слишком большая программа, точнее не хватило места на переменные).
Вот что он пишет, когда места пока хватает:
Sketch uses 24 356 bytes (84%) of program storage space.
Maximum is 28 672 bytes.
Global variables use 1 458 bytes (71%) of dynamic memory, leaving 590 bytes for local variables. Maximum is 2 048 bytes.
Я с таким не сталкивалась. В начале 90-х уже не было недостатка памяти. Разве что быстро но плохо компилирующий blinker (для языка Clipper) мог сделать что-то не влезающее в память DOS-а. Но были времена когда и такие вещи были критичны и приходилось оптимизировать тексты.
3] Проблема с памятью пока решилась отказом (где возможно) от строк типа String. Т.е заменой двойных кавычек в текстах на одинарные и String на Char[]. Эти String подключены и если очень хочется, то их можно использовать. Но они как-то не очень корректно работают. Тип char[] не очень удобная классика Си. Но в классическом Си было ещё и динамическое выделение памяти функциям malloc и alloc, которых тут, похоже, нет. Это все не проблемы. Скорее неожиданные особенности.
p/s Такое ощущение, что при создании и даже присвоении типа String он использует какое-то malloc выделение памяти, но потом он эту память не чистит. Отсюда и проблемы.
|