Как Arduino UNO различает данные программы/флэш-памяти и данные последовательного терминала

Я рад узнать, как Arduino UNO или nano различают программные данные, которые должны быть записаны во флэш-память, когда мы нажимаем Загрузить скетч, и последовательный терминал. данные, когда мы нажимаем Отправить? Есть ли какая-то особая последовательность для их идентификации? Как он будет идентифицирован загрузчиком?

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

  1. Когда мы нажимаем «Загрузить скетч», отправляется сигнал RST.
  2. Контроллер ATmega, когда он получает сигнал RST, переходит к разделу Bootloader флэш-памяти и ожидает определенной последовательности от UART
  3. Если он получает, то начинает записывать данные, буферизованные из UART, во флэш-память. Этот процесс обрабатывается загрузчиком.
  4. Если он не получает последовательность, она ожидает тайм-аута, затем переходит к разделу флэш-памяти и начинает выполнение с 0x0000.

, 👍1

Обсуждение

Это в значительной степени подводит итог последовательности, да., @Majenko


1 ответ


-2

В отличие от наших детей, он делает то, что ему говорят, а не то, что, как мы думали, мы ему сказали. Разные инструкции делают разные вещи. Serial.print("Привет"); хранится в ОЗУ, будет печатать из ОЗУ, однако, если вы наберете Serial.print(F("Hi"); он будет печатать из флэш-памяти. Макрос "F" указывает, откуда печатать. Serial.print(" Привет"); хранится во флэш-памяти, но перемещается в ОЗУ и хранится там, пока ваша программа запущена и работает, независимо от того, распечатываете вы ее или нет. Макрос "F" сохраняет ее во флэш-памяти, не используя ОЗУ. Все, что происходит при запуске Либо в вашем коде, либо в загрузчике есть код, который был запрограммирован и хранится во флеш-памяти.Загрузчик декодирует поток данных кода при загрузке и сохраняет его в указанном месте.Он не знает, что это, он просто читает хранит его, я не знаю, как он здесь называется, но раньше был программный модуль под названием «CSTART», который после перезагрузки получал управление, инициализировал всю память и устанавливал переменные перед тем, как передать управление пользовательской программе. делает то же самое, данные должны быть помещены в нужное место перед запуском.

,

Вы читали вопрос?, @Edgar Bonet

Привет Гил. Спасибо за длинный ответ, объясняющий все, но это не ответ на мой вопрос. Вы создали другую тему или ответили не на тот пост. Мой вопрос не связан с оперативной памятью и флэш-памятью. Arduino использует avrdude для записи во Flash, верно? Я хочу знать последовательность байтов или обмен данными, который происходит при программировании оборудования Arduino. И как различаются флэш-данные и последовательные данные., @Next-93

Вы можете найти это в исходном коде загрузчика. Для начала попробуйте эту ссылку: https://www.electronicwings.com/arduino/basics-to-developing-bootloader-for-arduino., @Gil