Цитата:
|
А возможно это сделать с использованием интерпритатора? (обрабатывать команды при помощи мк,
а считывать с памяти)
|
Никто не мешает Вам читать данные из внешней памяти, напр. через SPI, и далее декодировать, напр. методом табличной выборки, и вызывать соответствующую команде подпрограмму. НО это применимо когда нужно оперативно изменять программу работы устройства. Команды в памяти - это не исполняемый код процессора, а своего рода высокоуровневый язык описания алгоритма работы. Если Вы захотите написать программу напр. на С, а затем оттранслировать ее, записать во внешнюю память и чтобы она выполнялась, то у Вас ничего не получится. Теоретически конечно можно, но практически нужно загружать в память программ, и если Вам не хватает памяти, то нужно либо писать более эффективную программу, либо брать другой МК.
Приведу пример из своей практики использования памяти EEPROM в качестве "памяти программ". Есть некоторое устройство телеметрии с каналом связи. Перед работой необходимо запрограммировать протокол передачи данных в зависимости от условий работы. Порядок измерения, передачи данных, паузы, скорость, количество повторений, переходы описаны в программе.
Устройство при определенных условиях переходит в режим программирования, используется свой загрузчик с командами, контрольными суммами и другой лабудой. Загружается программа в EEPROM и далее исполняется.
Пример программы:
1. Выдать кадр синхронизации 5 раз
2. Выполнить полный замер и передать кадр типа 0 1 раз
3. Выполнить полный замер и передать кадр типа 1 1 раз
4. Выполнить короткий замер и передать кадр типа 2 3 раза
5. Повторить строки с 3 по 4 10 раз
6. Перейти к строке 2
7. Конец программы
Каждая команда имеет свой код. В моем случае это был код с полями в которых указывался тип команды (замер или оператор перехода по счетчику повторений или др.), номер кадра, количество повторений кадра, дополнительные параметры. После считывания команды она декодируется и вызывается соответствующая подпрограмма.
Вообще конечно у меня это сложнее, но был и такой случай. Устройство получает по последовательному интерфейсу команду, она декодируется, т.е. из таблицы выбирается адрес подпрограммы, и исполняется. В таблице в ячейке с индексом 0 содержиться адрес подпрограммы, соответствующей команде с кодом 0 и т.д.
Подитожим. В AVR память программ CODE только встроенная, внешней может быть только память данных. Чтобы изменять программу в процессе работы можно использовать память данных совместно с интерпретатором. Для этих же целей можно использовать и внутрисхемное программирование, в т.ч. с помощью другого сервисного МК, не обязательно компьютера. Для сокращения объема кода необходимо использовать эффективное программирование. Для увеличения обьема памяти программ нужно использовать другой МК, либо два МК, двухъядерный контроллер это круто! Правда надо будет грамотно распараллелить задачи и обеспечить бесконфликтное взаимодействие.
В любой ситуации есть хотя бы один выход. Удачи.