Недостаточно памяти, программа может работать нестабильно arduino

Обновлено: 03.07.2024

на самом деле это не проблема, за исключением того, что предоставленный код mlx90460 mlx90640 не работает на Arduino.

Я использую тот факт, что датчик mlx90460 mlx90640 имеет встроенную оперативную память и может хранить данные.
то, что делает код по ссылке выше, считывает 1 строку оперативной памяти за раз (до 32 датчиков). в настоящее время он не калибрует временные данные, но это будет достаточно легко сделать на лету, используя EEPROM для хранения EROM калибровки датчика. и прочитать его из eeprom, или предварительно загрузить его и загрузить во флэш-память вместо оперативной памяти (программа)

в любом случае примеры, которые у меня есть в настоящее время, работают,
есть скетч, чтобы увидеть, можно ли обнаружить mlx90460 mlx90640
скетч, который считывает 1 страницу и 16 датчиков и выводит на терминал, чтобы вы могли видеть, как он работает
скетч, который считывает и показывает на терминале весь вывод 768 датчиков с 5 уровнями выходных символов. ((пробел), .,+,о,о)

Текст был успешно обновлен, но возникли следующие ошибки:

jamesdanielv прокомментировал 2 октября 2018 г. •

для этого может потребоваться производительность с плавающей запятой, а может и нет.
Термоэлементные датчики (mlx90460 . mlx90640) более сложны, чем термисторные (AMG8833, как показано на его схемах), датчики, но ненамного

ralvescosta прокомментировал 17 декабря 2018 г.

Я начинаю изучение с MLX90460, я считаю, что ваш пример очень классный, но у меня есть несколько вопросов. Какую модель Arduino вы используете для тестирования этого проекта?

Спасибо за внимание.

jamesdanielv прокомментировал 17 декабря 2018 г.

привет, я использую Arduino Duemilanove, аналог uno, использует ATmega328. У Duemilanove флэш-памяти на 1,5 КБ меньше, чем у UNO.

jamesdanielv прокомментировал 5 сентября 2019 г. •

У меня есть функциональная версия, которая работает на uno, nano, teensy-lc. и он работает с использованием заводских калибровок и выводит температуру в градусах Цельсия.

Во-первых, я хотел бы поблагодарить Spark Fun и Melexis, потому что на самом деле создание кода заняло бы намного больше времени, если бы они не предоставили работающий пример.

Кроме того, несмотря на то, что документация melexis * отредактирована с оригинальными примечаниями в конце*, ее было нелегко читать. честно говоря, это было достаточно хорошо. распечатайте его и прочитайте с линейкой под областью, которую вы читаете через него. термины настолько похожи, и так много всего происходит, что это сведет вас с ума. Я искренне извиняюсь, так как с документацией пока все в порядке. это с часами и часами, возвращающимися к разделу примеров 11 «Вычисление температуры объекта» и 11.2.2.2, а также к примерам для завершения. Я предложил 20$ любому, кто прочитает это, у кого есть инструменты, время или исключительные навыки, чтобы прочитать это и найти ошибки. вы это заработаете.

мой код теперь работает даже на uno и на 8-битных версиях, насколько мне известно. Я публикую ошибки в разделе вопросов, когда я их нахожу. до сих пор у меня были студенты-инженеры, которые предлагали мне свои отзывы о том, как сделать некоторые вещи более понятными; но обычно это помогает с инструкциями по настройке i2c, и я включу это в руководство по часто задаваемым вопросам. не все получают плату sparkfun, и люди, кажется, думают, что могут обойтись без резисторов pull_up. внешний 2.2k является обязательным, если вы не используете плату sparkfun, но я бы порекомендовал человеку получить плату. Я также должен отметить, что мне не платят за это, и я не прошу денег. Меня лично интересуют датчики тепловизионных камер и то, как они в конечном итоге помогут с некоторыми инструментами для добычи полезных ископаемых и картографированием местности.

в отличие от кода моего датчика amg8833, моей целью была совместимость с несколькими процессорами.

текущий код mlx90640 использует около 1 КБ оперативной памяти и около 20 КБ флэш-памяти.

этот код является экспериментальным и немного запутанным, потому что он должен работать в старых и новых методах, чтобы каждый мог сравнивать функции. я ожидаю, что со временем это исправится.

управление памятью контролируется через Z_MemManagment.h в этом файле:
NEW_METHOD false приведет к тем же методам работы с памятью, что и код sparkfun melexis.

NEW_METHOD true приведет к новой сети управления памятью, для которой требуется менее 1 КБ оперативной памяти

по умолчанию NEW_METHOD true

Вот видео вывода на arduino uno. вывод deg имеет разрешение 32 x 24, чтобы обеспечить управляемость экрана.

и, кстати, работает и в разрешении 64x48! как на видео здесь

если вы делаете собственный код, функция
DoubleResolutionValue(x,y) возвращает новое интерполированное значение разрешения (0-63,0-47)
Readmlx90640To() напрямую считывает ячейку памяти ( 0-767)
дополнительную информацию см. в help_hints.

в настоящее время teensy3.1/3.2 работает быстрее благодаря оперативной памяти и превосходной математической производительности

но только с запасом. uno и teensy_lc примерно одинаковы, за исключением того, что у teensy более быстрый i2c

шина, и оба процессора teensy имеют прямую связь через USB. однако uno может делать серийный номер

связь на частоте до 1 МГц, так что это не большая проблема. в любом случае я работаю над улучшением i2c

производительность для уменьшения количества обращений к чипу i2c и повышения математической производительности в uno.

есть некоторая ирония в версии для рук и в старом методе памяти. процессор ждет через некоторое время

цикл для считывания всех данных дважды. он буквально тратит 98% или более своего времени через какое-то время

петля! новый метод может быть более эффективным, так как он находится только в цикле while, ожидая смещения и

получить данные о чтении страницы датчика. эта часть кода изменится в будущем, так как я не думаю, что мне нужно читать ее дважды, кроме vdd, и получать значения. время покажет, и он находится в постоянном развитии.

наслаждайтесь, и, пожалуйста, дайте мне обратную связь и вопросы. я хотел бы создать руководство по часто задаваемым вопросам и

объясните некоторые из новых методов и функций.

Я не смог обосновать свое первоначальное заявление об ошибках в течение трех часов, которые я дал себе, чтобы найти их снова. на данный момент это не означает, что их там нет, просто у меня нет времени искать дальше, и я плохо документировал некоторые проблемы, с которыми столкнулся. не исключено, что ошибаюсь и я. Но чтобы быть уверенным. Я предлагаю 20$ из моих собственных наличных в PayPal, читайте в конце этого комментария.

Я удалил исходное заявление, которое было у меня ранее. в это время я не могу очень это:

Изображение стеков 3519

Введение: что такое Arduino и почему вы хотите его использовать.
Установка: пошаговые инструкции по настройке программного обеспечения Arduino и подключению его к Arduino Uno, Mega2560, Duemilanove, Mega, или Diecimila.
Windows
Mac OS X
Linux (на вики-сайте Playground)
Environment: Описание среды разработки Arduino и способ изменения языка по умолчанию.
Библиотеки: использование и установка библиотек Arduino.
Устранение неполадок: советы о том, что делать, если что-то не работает.

Arduino Uno — это плата микроконтроллера на основе ATmega328 (техническое описание). Он имеет 14 цифровых входных/выходных контактов (из которых 6 могут использоваться как выходы ШИМ), 6 аналоговых входов, керамический резонатор 16 МГц, USB-соединение, разъем питания, разъем ICSP и кнопку сброса. Он содержит все необходимое для поддержки микроконтроллера; просто подключите его к компьютеру с помощью USB-кабеля или подключите адаптер переменного тока к постоянному или аккумулятор, чтобы начать работу.

Технические характеристики Arduino Uno
Микроконтроллер – ATmega328;
Рабочее напряжение – 5В;
Входное напряжение (рекомендуемое) – 7-12В;
Входное напряжение (пределы) – 6-20В. ;
Контакты цифрового ввода/вывода — 14 (из которых 6 обеспечивают выход PWM);
Контакты аналогового ввода — 6;
Постоянный ток на контакт ввода/вывода — 40 мА
DC Ток на выводе 3,3 В – 50 мА;
флэш-память – 32 КБ (ATmega328), из которых 0,5 КБ используется загрузчиком;
SRAM – 2 КБ (ATmega328);
EEPROM – 1 КБ ( ATmega328);
Тактовая частота — 16 МГц;

Справочник по языку программирования
Онлайн-справочник по языку программирования Arduino с использованием бесплатной среды разработки IDE.

Программирование
Arduino Uno можно запрограммировать с помощью программного обеспечения Arduino (скачать). Выберите «Arduino Uno» в меню «Инструменты» > «Плата» (в соответствии с микроконтроллером на вашей плате). Для получения подробной информации см. справочник и учебные пособия.
ATmega328 на Arduino Uno поставляется с предварительно записанным загрузчиком, который позволяет закодируйте его без использования внешнего аппаратного программатора.

Память
У ATmega328 32 КБ (из них 0,5 КБ используются для загрузчика). Он также имеет 2 КБ SRAM и 1 КБ EEPROM (которую можно читать и записывать с помощью библиотеки EEPROM).

Связь
Arduino Uno имеет ряд средств для связи с компьютером, другим Arduino или другими микроконтроллерами. ATmega328 обеспечивает последовательную связь UART TTL (5V), которая доступна на цифровых контактах 0 (RX) и 1 (TX). ATmega16U2 на плате направляет эту последовательную связь через USB и отображается как виртуальный COM-порт для программного обеспечения на компьютере. Прошивка '16U2 использует стандартные драйверы USB COM, и внешний драйвер не требуется. Однако в Windows требуется файл .inf. Программное обеспечение Arduino включает в себя последовательный монитор, который позволяет отправлять простые текстовые данные на плату Arduino и с нее. Светодиоды RX и TX на плате будут мигать, когда данные передаются через микросхему USB-to-serial и USB-подключение к компьютеру (но не при последовательной связи на контактах 0 и 1). Библиотека SoftwareSerial обеспечивает последовательную связь на любом из цифровых контактов Uno.
ATmega328 также поддерживает связь I2C (TWI) и SPI. Программное обеспечение Arduino включает библиотеку Wire для упрощения использования шины I2C; подробности см. в документации. Для связи SPI используйте библиотеку SPI.

Питание
Arduino Uno может питаться через USB-соединение или от внешнего источника питания. Источник питания выбирается автоматически. Внешнее (не USB) питание может поступать либо от адаптера переменного тока в постоянный (настенная бородавка), либо от аккумулятора. Адаптер можно подключить, вставив штекер 2,1 мм с центральным положительным контактом в разъем питания на плате. Выводы от аккумулятора можно вставить в контактные разъемы Gnd и Vin разъема POWER. Плата может работать от внешнего источника питания от 6 до 20 вольт. Однако при подаче менее 7 В на контакт 5 В может подаваться менее пяти вольт, и плата может работать нестабильно. При использовании более 12 В регулятор напряжения может перегреться и повредить плату. Рекомендуемый диапазон составляет от 7 до 12 вольт.
Пинцы питания следующие:
VIN. Входное напряжение платы Arduino при использовании внешнего источника питания (в отличие от 5 вольт от USB-подключения или другого регулируемого источника питания). Вы можете подать напряжение через этот контакт, или, если напряжение подается через разъем питания, получить к нему доступ через этот контакт.
5V. Этот контакт выводит регулируемое 5V от регулятора на плате. Плата может питаться от разъема питания постоянного тока (7–12 В), разъема USB (5 В) или контакта VIN платы (7–12 В). Подача напряжения через контакты 5 В или 3,3 В обходит регулятор и может повредить вашу плату. Мы не советуем.
3V3. Питание 3,3 В, генерируемое бортовым регулятором. Максимальный потребляемый ток 50 мА.
Земля. Контакты заземления.
IOREF. Этот контакт на плате Arduino обеспечивает опорное напряжение, с которым работает микроконтроллер. Правильно настроенный экран может считывать напряжение на контакте IOREF и выбирать соответствующий источник питания или включать преобразователи напряжения на выходах для работы с 5 В или 3,3 В.

Автоматический (программный) сброс
Вместо того, чтобы требовать физического нажатия кнопки сброса перед загрузкой, Arduino Uno сконструирован таким образом, что его можно сбросить с помощью программного обеспечения, запущенного на подключенном компьютере. Одна из линий аппаратного управления потоком (DTR) ATmega8U2/16U2 подключена к линии сброса ATmega328 через конденсатор емкостью 100 нанофарад. Когда эта линия активна (низкий уровень), линия сброса падает на время, достаточное для сброса микросхемы. Программное обеспечение Arduino использует эту возможность, чтобы вы могли загружать код, просто нажав кнопку загрузки в среде Arduino. Это означает, что загрузчик может иметь более короткое время ожидания, так как снижение DTR может быть хорошо скоординировано с началом загрузки.
Эта настройка имеет и другие последствия. Когда Uno подключен к компьютеру с Mac OS X или Linux, он сбрасывается каждый раз, когда к нему подключается программное обеспечение (через USB). Следующие полсекунды или около того загрузчик работает на Uno. Хотя он запрограммирован на игнорирование искаженных данных (то есть всего, кроме загрузки нового кода), он будет перехватывать первые несколько байтов данных, отправленных на плату после открытия соединения. Если скетч, работающий на плате, получает одноразовую конфигурацию или другие данные при первом запуске, убедитесь, что программное обеспечение, с которым он взаимодействует, ждет секунду после открытия соединения и перед отправкой этих данных.
Uno содержит трассировку, которую можно обрезать, чтобы отключить автосброс. Площадки с обеих сторон дорожки можно спаять вместе, чтобы снова включить ее. Он помечен как «RESET-EN». Вы также можете отключить автосброс, подключив резистор 110 Ом от 5В к линии сброса; подробности см. в этой ветке форума.

Защита USB от перегрузки по току
Arduino Uno имеет сбрасываемый предохранитель, который защищает USB-порты вашего компьютера от короткого замыкания и перегрузки по току. Хотя большинство компьютеров обеспечивают собственную внутреннюю защиту, предохранитель обеспечивает дополнительный уровень защиты. Если на USB-порт подается более 500 мА, предохранитель автоматически разорвет соединение до тех пор, пока короткое замыкание или перегрузка не будут устранены.

Физические характеристики
Максимальная длина и ширина печатной платы Uno составляют 2,7 и 2,1 дюйма соответственно, при этом разъем USB и разъем питания выходят за прежние размеры. Четыре отверстия для винтов позволяют прикрепить плату к поверхности или корпусу. Обратите внимание, что расстояние между цифровыми контактами 7 и 8 составляет 160 мил (0,16 дюйма), что не является даже кратным 100 мил расстояния между другими контактами.

После входа в систему вы будете перенаправлены обратно к этому руководству и сможете подписаться на него.

Самый очевидный признак проблемы с памятью — это когда компилятор сообщает вам, что ваш скетч слишком велик.

learn_arduino_Too_Big. jpg

Но многие проблемы с памятью проявляются гораздо более тонкими симптомами. Ваша программа может загрузиться, но не запуститься. Он может сильно разбиться или просто начать вести себя странно.

Если ваша программа компилируется и загружается успешно, но одно из следующих утверждений верно, велика вероятность, что у вас проблемы с памятью.

    • "Добавлена ​​еще одна библиотека"
    • "Добавлено еще несколько светодиодных пикселей"
    • "Открыл файл на SD-карте"
    • "Инициализирован графический дисплей"
    • "Объединено в другой эскиз"
    • "Добавлена ​​новая функция"

    Архитектуры памяти

    Архитектура фон Неймана (также известная как Princeton), разработанная для ENIAC, использует одну и ту же память и пути данных как для программ, так и для хранения данных.

    Гарвардская архитектура, характерная для Harvard Mark 1, использовала физически отдельные пути памяти и данных для программы и памяти.

    У каждой архитектуры есть свои преимущества. При прочих равных условиях гарвардская модель имеет преимущество в производительности. Модель фон Неймана более гибкая.

    В наши дни большинство компьютеров общего назначения (ПК, Mac и т. д.) представляют собой гибридные конструкции, которые позволяют использовать лучшее из обеих архитектур. Глубоко внутри ЦП они работают по гарвардской модели, используя отдельные кэши для инструкций и данных, чтобы максимизировать производительность. Но кэши инструкций и данных загружаются автоматически из общего пространства памяти. С точки зрения программирования эти компьютеры кажутся чистыми фон-неймановскими машинами со многими гигабайтами виртуальной памяти.

    Микроконтроллеры, подобные тем, что питают Arduino, предназначены для встраиваемых приложений. В отличие от компьютеров общего назначения, у встроенного процессора обычно есть четко определенная задача, которую он должен выполнять надежно и эффективно — и при минимальных затратах. Конструкции микроконтроллеров имеют тенденцию быть довольно спартанскими. Они отказываются от роскоши многоуровневого кэширования и дисковых систем виртуальной памяти и придерживаются того, что необходимо для выполнения задачи.

    Гарвардская модель хорошо подходит для встроенных приложений, а Atmega 328, используемая в Arduino UNO, использует относительно чистую гарвардскую архитектуру. Программы хранятся во флэш-памяти, а данные — в SRAM.

    По большей части компилятор и системы выполнения позаботятся об этом за вас, но когда дела начинаются плохо, полезно знать, как все работает внутри. И на этих крошечных машинах все становится намного быстрее!

    Самая большая разница между этими микроконтроллерами и обычным компьютером заключается в огромном объеме доступной памяти. Arduino UNO имеет только 32 КБ флэш-памяти и 2 КБ SRAM. Это более чем в 100 000 раз МЕНЬШЕ физической памяти, чем у бюджетного ПК! И это не считая дисковода!

    Работая в этой минималистичной среде, вы должны разумно использовать свои ресурсы.

    Если здесь нет ответа на ваш вопрос, задайте его на форуме. PJRC следит за форумом и делает все возможное, чтобы ответить на вопросы клиентов.

    Вы должны опубликовать код или сведения, необходимые для воспроизведения проблемы. Пожалуйста, ознакомьтесь с правилами публикации. Всего несколько минут на составление подробного вопроса обычно помогают гораздо лучше.

    Краткий справочник Teensy: примеры кода, советы и рекомендации содержит список полезных ресурсов и решений для многих распространенных проектов.

    Наиболее распространенные проблемы

    Ненадежная связь

    Некоторые концентраторы USB имеют проблемы с обработкой быстрой последовательности событий подключения/отключения при программировании Teensy. Большинство концентраторов работают нормально, но некоторые из них могут вызвать очень странные проблемы. Если у вас возникли проблемы, всегда пытайтесь подключить Teensy напрямую с помощью качественного USB-кабеля.

    Teensy 3.0 не распознается Teensy Loader

    Teensy Loader 1.07 — первая версия, поддерживающая Teensy 3.0. Вы можете проверить версию, используя Help > About. Версия 1.07 является частью установщика Teensyduino. Он автоматически запускается, когда вы нажимаете «Загрузить» или «Проверить» в Arduino.

    Совершенно новый Teensy не распознан

    1. Сначала перезагрузите компьютер и удалите все схемы, подключенные к Teensy.
    2. Светодиод должен мигать при подключении USB-кабеля. Каждая модель Teensy предварительно запрограммирована на программу мигания светодиода во время тестирования продукта. Для мигания светодиода не требуется никаких драйверов или программного обеспечения на вашем компьютере. Необходимо только питание от кабеля USB. Если светодиод не мигает, проверьте напряжение на плате с помощью вольтметра или попробуйте другой кабель или USB-порт и избегайте любых USB-концентраторов. Если светодиод никогда не мигает, не беспокойтесь о драйверах или программном обеспечении. Если светодиод не мигает, это означает, что на плату не подается питание!
    3. При нажатии кнопки светодиод должен перестать мигать. Никакое программное обеспечение или драйверы на вашем компьютере не требуются, чтобы кнопка перестала мигать светодиодом. Когда светодиод мигает, а кнопка прекращает мигание, это очень хороший показатель того, что ваше оборудование Teensy работает правильно.
    4. Когда светодиод перестанет мигать, если программа Teensy Loader запущена, она должна обнаружить плату Teensy. Сообщение «Нажмите кнопку для активации» исчезнет, ​​и изображение покажет, какая плата присутствует. Для этого не нужно устанавливать драйверы на Windows или Mac. В Linux должен быть установлен файл правил udev. Если светодиод мигает, а кнопка перестает мигать, но Teensy Loader так и не обнаруживает вашу плату, а вы выполнили описанные выше действия, проблема почти наверняка связана с неисправным кабелем USB. Многие USB-кабели, предназначенные для зарядки устройств, имеют только провода питания, но не линии передачи данных.
    5. В Windows установка драйвера необходима только для использования последовательного монитора Arduino, когда Teensy реализует последовательное устройство (из меню «Инструменты» > «Тип USB»), и для автоматического перепрограммирования с помощью «Загрузки», когда Teensy запрограммирован как последовательный. Без драйвера через 5 секунд после того, как вы нажмете «Загрузить», появится сообщение с просьбой нажать кнопку на вашем Teensy. Windows может выдавать вводящие в заблуждение ошибки, указывающие на то, что драйверы должны быть установлены, но НИКАКОЙ ДРАЙВЕР НЕ НУЖЕН в Windows, чтобы просто заставить Teensy Loader распознать ваш Teensy и запрограммировать новый код. Выполните шаги 1–3 выше, прежде чем беспокоиться о драйверах!

    Teensy не распознается Teensy Loader

    1. Физически отключите Teensy.
    2. Перезагрузите компьютер (лучше полностью отключить питание)
    3. Убедитесь, что приложение Teensy Loader запущено.
    4. Удерживайте нажатой кнопку сброса перед подключением USB-кабеля.
    5. Подключите USB-кабель, продолжая удерживать кнопку.
    6. После того, как кабель будет полностью вставлен, отпустите кнопку.

    В системах Windows иногда сообщается о "странных" проблемах, когда Windows не обнаруживает новые устройства. Не похоже, что это уникально для Тинси. Создание новой учетной записи пользователя иногда решает проблему. Также может помочь подключение кабеля к разным USB-портам. Перезагрузка всегда хорошая идея. Лучше всего попробовать на компьютере с Mac или Linux или на другом компьютере с Windows.

    Нет последовательного порта во время программирования

    Платы Arduino представляют собой последовательное устройство для всего программирования и связи. Arduino остается подключенным как последовательное устройство во время перезагрузки. Teensy — это родное USB-устройство. Опыт устранения неполадок Arduino не распространяется на Teensy!

    Во время программирования Teensy отображается как HID-устройство. Когда Teensy перезагружается, электрически ваш компьютер видит, что Teensy отключен, как если бы кабель был физически отключен. Когда Teensy начинает запускать вашу программу, USB отключается.

    Примеры быстрого и медленного мигания светодиода не включают USB-порт.

    Когда программы используют USB, тип устройства Teensy зависит от загруженного вами кода. Ваш компьютер увидит подключение нового USB-устройства, когда ваша программа начнет использовать USB-порт. В Arduino тип устройства управляется меню Tools > USB Type. В языке C используемый вами USB-код определяет тип устройства. Программа hid_listen реагирует только на определенные программы C. При устранении неполадок вы должны искать тип устройства, которое реализует ваша программа.

    TODO: список кодов C и типов устройств Teensyduino, номера VID/PID для каждого.

    Кнопка не сбрасывает приложение

    Кнопка позволяет вручную перевести Teensy в режим программирования. С Arduino это происходит автоматически, когда вы нажимаете «Загрузить». Но если ваш код отключает порт USB, отключает прерывания или переходит в режим глубокого сна, который останавливает ЦП, Teensy не сможет ответить на запрос перезагрузки через USB.

    Каждый Teensy оснащен физической кнопкой, позволяющей восстановить работу программы, которая не отвечает.

    Эта кнопка НЕ ​​перезапускает приложение Teensy. Однако, если Teensy подключен к вашему компьютеру, а загрузчик Teensy запущен и настроен на автоматический режим (по умолчанию при использовании с Arduino), нажатие кнопки войдет в режим программирования. Teensy Loader быстро перепрограммирует и перезапустит ваш Teensy. Этот перезапуск вашего приложения связан с «автоматическим» режимом Teensy Loader, а не только с кнопкой.

    Светодиод мигает зеленым или синим

    У вас поддельная доска. PJRC никогда не производила Teensy с зеленым или синим светодиодом. Если вы купили с помощью Ebay и Paypal, мы рекомендуем вам немедленно начать спор на веб-сайте Paypal. Не спешите связываться с продавцом. Они уже обманули многих людей бракованными платами, но им просто все равно. Спор на Paypal - единственный способ вернуть свои деньги. Чем раньше вы подадите спор, тем выше ваши шансы на возврат средств. Мы рекомендуем подождать, чтобы оставить отрицательный отзыв, пока Paypal не вернет вам деньги.

    Большие программы загадочным образом аварийно завершают работу

    В Teensy 2.0 компилятор помещает строковые константы в оперативную память. Если у вас их много, оперативная память может быстро закончиться. В Arduino вы можете использовать F(), чтобы строки, используемые с print(), не использовали оперативную память.

    В языке C обычно используется PSTR(), и должны вызываться специальные функции, которые обращаются к флэш-памяти. Часто они имеют суффикс "_P".

    Большие таблицы данных или массивы также могут вызывать проблемы. Если данные постоянны, можно использовать PROGMEM и pgm_read_byte(). Подробнее см. в руководстве по avr-libc.

    Teensy LC, 3.0, 3.1 не имеют этой проблемы. Переменные, определенные с помощью "const", размещаются только во флэш-памяти, но к ним можно получить обычный доступ. Эти специальные шаги требуются только для старых 8-битных плат на базе AVR, чтобы строки и переменные только для чтения не занимали ограниченное количество оперативной памяти.

    Windows: Драйвер последовательного порта установлен, но не используется

    В Windows, даже если программа установки последовательного драйвера работает правильно, иногда Windows сохраняет старую информацию в своем реестре и не может загрузить драйвер. Диспетчер устройств покажет "USB Serial" с ошибкой вместо "USB Serial (класс связи, абстрактная модель управления)" с назначенным номером COM-порта.


    1. Запустите программу серийной установки еще раз или запустите программу установки Teensyduino и используйте опцию обновления драйвера на первом этапе.
    2. Нажмите кнопку «Обновить драйвер» в диспетчере устройств. Если программа установки драйвера запущена, Windows должна найти драйвер.
    3. Подключите кабель к другому порту USB. Реестр Windows обрабатывает каждый физический порт с помощью отдельных записей реестра.
    4. Выполните и/или все вышеперечисленное с подключенным устройством или без него. Иногда Windows будет действовать по-разному, если устройство присутствует или отсутствует.

    Если «USB Serial» вообще нет, помните, что Teensy становится последовательным устройством только тогда, когда это запрограммировано. См. «Нет последовательного порта во время программирования» выше.

    Windows 7: неизвестное устройство (код 43)

    Windows «Код 43» — загадка. Другие устройства, даже Apple iPod, столкнулись с этой проблемой. Решение похоже на полное отключение питания, а если ноутбук, извлеките аккумулятор на несколько минут. Об этом же решении сообщалось несколько раз с успехом.

    Эта ошибка с кодом 43 является загадкой. Это может быть связано с тем, что ноутбуки переходят в режим ожидания? Если у вас есть идеи, свяжитесь с нами!

    Питер Раутенбах обнаружил случай, когда программирование неправильного HEX-файла (скомпилированного для другого чипа) вызывало ошибку 43.


    Windows: окно загрузчика Teensy не появляется

    1. Windows 7: удерживая клавишу Shift, щелкните правой кнопкой мыши загрузчик Teensy на панели задач.
      Windows Vista и XP: щелкните правой кнопкой мыши загрузчик Teensy на панели задач.
    2. Выберите "Переместить".
    3. Используйте клавиши со стрелками на клавиатуре, чтобы переместить окно, пока оно не появится.


    Дополнительная информация от Гилберта Херсшенса:

    "Поскольку вы не видите отсутствующее окно, вы не будете знать наверняка, видимо оно или скрыто. Но вы можете увидеть это в контекстном меню. Когда окно отображается на отсутствующем дисплее, пункт меню «Переместить» будет активен, а пункт «Восстановить» будет выделен серым цветом. Когда он скрыт, все будет наоборот. Вы можете перемещать окно только в его видимом состоянии. Чтобы скрыть или показать окно, вы можно щелкнуть значок на панели задач, чтобы изменить его состояние, или использовать соответствующие пункты контекстного меню.

    Linux: набор инструментов Gentoo и Arch AVR

    Если вы запускаете avr-gcc с make-файлом, загрузите Arduino 1.0.1 и установите $PATH для доступа к набору инструментов в каталоге arduino-1.0.1/hardware/tools/avr/bin.

    Linux: большая задержка перед обнаружением последовательного порта USB

    В некоторых системах Linux последовательный порт USB обнаруживается очень медленно. Ядро быстро обнаруживает устройство (обычно видно с помощью «tail -f /var/log/messages»), но файлы устройства не появляются очень долго.

    Отредактируйте "/lib/udev/rules.d/77-nm-probe-modem-capabilities.rules", добавив эту строку:

    Linux: много повторяющихся имен устройств в Ubuntu 9.10

    В Ubuntu 9.10 (и, возможно, в других системах) при использовании последовательного типа устройства ядро ​​каждый раз присваивает новый номер, /dev/ttyACM0, /dev/ttyACM1, /dev/ttyACM2 и т. д.

    Это вызвано Gnome Modem Manager, который удерживает порт (насколько это касается kerel) в использовании даже после того, как вы перезагрузили Teensy и порт больше не существует. Самое простое решение — удалить Modem Manager и перезапустить сетевой менеджер или просто перезагрузиться.

    Вы также можете попробовать удалить /usr/lib/ModemManager/libmm-plugin-generic.so и, конечно же, перезагрузиться. Это может привести к тому, что Modem Manager сможет работать с большинством модемов, но не будет мешать работе Teensy.

    Известной ошибкой является неудобная проверка Modem Manager и невозможность настроить исключения для определенного устройства. Надеюсь, это будет исправлено в будущих версиях.

    Читайте также: