Допустим, у вас был довольно простой и небольшой микроконтроллер, и у вас не было интерфейса, компьютера, отладчика, компилятора или ассемблера. Не могли бы вы написать свой код в сборке, преобразовать его (вручную) в машинный код, а затем подать питание на соответствующие контакты с помощью источника напряжения?
Я понимаю, что вам нужны соответствующие устройства ввода-вывода и память, чтобы действительно что- то делать , но если бы вы были настолько склонны и имели время, могли бы вы сделать это? Я думаю, исторически, как это было сделано, когда не было компьютера / компилятора / ассемблера для начала? Не стесняйтесь связать меня с внешним ресурсом. Благодарность! :)
Ответы:
Да!
Код может быть написан "из вашей головы" в двоичном формате, если вы хотите.
Давным-давно-так я начал использовать (тогда) микропроцессоры.
Я и друзья писали код на ассемблере, компилировали его вручную в машинный код (что-то, что вы можете сделать «проверкой» после некоторой практики), а затем вводили его в процессор различными способами. В одной системе, которую мы построили, мы устанавливаем адрес на двоичных (вкл. / Выкл.) Переключателях или используем функцию автоприращения процессора, вводим 8 бит данных на бинарных переключателях и затем нажимаем переключатель «часы» для ввода данных в память.
Эквивалентная функциональность может быть достигнута с помощью еще меньшего числа переключателей на современном микроконтроллере, использующем последовательное программирование SPI - см. Ниже.
Да!
Но это было бы невероятно медленно!
Многие современные микроконтроллеры позволяют использовать интерфейс "SPI" для программирования.
Как правило, он состоит из строк входных и выходных данных и линии «часов», и обычно это строка сброса.
Многие процессоры допускают, чтобы тактовая частота и данные SPI были «статичными», что означает, что нет никаких ограничений на то, сколько времени вы можете установить между битами. Вы можете запрограммировать такой процессор, используя линию данных и тактовую линию, которые управляются переключателями, управляемыми вручную. Линия синхронизации должна быть «без скачков» - вы должны иметь возможность устанавливать ее на высоком или низком уровне за один переход на одну операцию - поэтому минимальный интерфейс может потребовать включения триггера Шмитта. Вы можете «сойти с рук» только с задержкой RC и кнопочным переключателем, но срабатывание по Шмитту безопаснее. Строка данных не должна быть отказов, так как ее состояние читается только на границе часов.
Некоторые интерфейсы являются интерактивными - данные выводятся процессором во время программирования (например, data out = MISO = Master In Serial Out на процессорах AVR). Чтобы прочитать это, вам нужно добавить, например, светодиод и резистор (и, может быть, буфер или транзистор, если емкость привода была ДЕЙСТВИТЕЛЬНО низкой).
MC6800:
Из полусухой памяти (почти 40 лет!)
LDI A, $ 7F ...... 86 7F ...... 1000 0110 0111 1111
STA, $ 1234 ...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X, $ 2734 .. CE 27 34 ... 1100 1110 0010 0111 0011 0100
...
источник
Первоначально в программируемых машинах программы вручную перфорировали в бумажную ленту или карточки. Позже они использовали печатную машинку для перфорации, и даже позже компьютеры (как они к тому времени стали известны) могли перфорировать свою собственную бумажную ленту.
Он буквально сидел там с картой и делал в ней отверстия.
Каждый столбец представляет собой команду или бит данных, которые интерпретируются конечным автоматом ЦП для выполнения задач.
Теперь, если, конечно, все это флэш-память, и да, для получения данных там, как правило, нужен компьютер для этого. Но это не совсем на 100% верно.
В конце концов, что делает компьютерный и аппаратный программист, но устанавливает правильное состояние выводов ввода-вывода? Таким образом, если вы действительно достаточно мазохистки, вы можете создать систему, которая позволит вам правильно отправлять правильные инструкции на контакты программирования микроконтроллера и устанавливать некоторые инструкции во флэш-память для выполнения.
Может быть, что-то, включающее множество переключателей, несколько регистров сдвига, тактовый генератор и т. Д.
Я помню, что в колледже у нас была новая система программирования на базе Z80 - размером с чемодан с Z80, небольшим объемом оперативной памяти, кучей 7-сегментных светодиодных дисплеев и большим рядом переключателей. Запрограммируйте его, вручную загрузив инструкции в оперативную память с помощью переключателей.
источник
Вы сказали «маленький микроконтроллер и у него нет интерфейса, нет компьютера, нет отладчика, компилятора или ассемблера». Ну, вы можете обойтись без компьютера, отладчика, компилятора или ассемблера, но для загрузки программы у вас должен быть какой-то интерфейс для соединения с микроконтроллером.
Прежде всего, забудьте о любых языках высокого уровня, таких как C. Затем самый простой способ - написать программу на языке ассемблера, но не использовать ассемблер для ее перевода. в машинный код. Вместо этого посмотрите каждую инструкцию по сборке в руководстве по программированию, найдите их эквивалентное шестнадцатеричное кодирование и запишите его.
Вы должны будете выделить свои собственные переменные, чтобы вы могли заполнить соответствующие адреса в части операндов инструкций. Также забудьте об использовании стека и кучи, слишком много работы. Когда вы закончите, у вас будет машинная программа, которая может быть загружена непосредственно во флэш-память микроконтроллера - никакой компоновщик также не требуется.
Из-за отсутствия внешних адресов и шин данных почти на всех микроконтроллерах (поскольку они занимают слишком много выводов, необходимых для портов ввода-вывода и периферийных устройств), практически все микроконтроллеры программируются через специальный интерфейс, подобный следующему:
Обычно «программист» слева подключается к ПК, который загружает машинный файл, созданный компилятором / компоновщиком.
Однако, если у программиста есть клавиатура, как показано ниже:
затем можно ввести шестнадцатеричные коды для сгенерированной вручную программы прямо в программатор и запрограммировать устройство, не нуждаясь в компиляторе, компоновщике или ПК, о котором вы спрашивали. (Клавиатура также используется для редактирования шестнадцатеричных файлов и создания контрольных сумм.)
Конечно, очень немногие программисты имеют такие клавиатуры. Этот не подходит для любителей, так как он, вероятно, стоит пару тысяч долларов.
Этот конкретный программист программирует детали до того, как они помещаются на плату; интерфейсы и сокеты доступны для нескольких PIC, а также для Atmel AVR.
источник
С практической точки зрения, что-то вроде переключения контактов JTAG вручную было бы очень подвержено ошибкам. Для ввода программы любого приличного размера потребуются тысячи переключателей. Но теоретически это возможно.
Если вам разрешено заранее подготовить микроконтроллер (или написать для него загрузочное ПЗУ), вы можете легко реализовать что-то вроде внешних тумблеров, используемых на ранних мэйнфреймах. Если вы разрешите внешнюю логику, вы можете даже использовать шестигранную клавиатуру, чтобы ускорить процесс.
Наконец, хотя это не так распространено в наши дни, вы можете купить микроконтроллер на основе ПЗУ с пользовательским кодом в нем. Вы должны были бы предложить немного денег заранее и гарантировать определенный объем, но я видел, как клиенты делают это, чтобы сэкономить деньги на крупносерийном производстве. В этом случае не было бы никаких внешних сигналов, необходимых для программирования микроконтроллера вообще. Код будет встроен в физическую схему чипа.
Конечно, вы также можете использовать микроконтроллер, который выполняет код из интерфейса внешней памяти, но это обман. :-)
источник
Абсолютно. Фактически, в первом курсе по микропроцессору (около 87) использовалась плата Motorola 68000. Мы разработали код в сборке, посмотрели гекс для сборки и набрали его в терминал, чтобы запрограммировать плату. Если вы редактировали, вы должны были убедиться, что код, который вы вставили, были короче, чем код, который вы заменяли, а затем буферизовать все остальное с помощью NOP. Если бы код был длиннее, вам пришлось бы все перепечатывать! Мы научились добавлять много NOP.
источник
Абсолютно. Если у вас есть двоичный формат фактических инструкций (это легко сделать для четко определенных наборов инструкций), все, что вам нужно, - это реализовать протокол программирования.
Например, возьмите что-нибудь маленькое, например AVR Tiny 4 . Раздел 14 подробно описывает интерфейс программирования, включая протокол и физический уровень. Это относительно просто, и вам просто нужно несколько кнопок и подтягивающие / понижающие резисторы, чтобы отправить / получить 1 или 0. Если вы чувствуете себя амбициозно, добавьте несколько светодиодов, чтобы прочитать результат.
Последняя оставшаяся проблема - если вы можете сделать это достаточно быстро, что, к счастью * для AVR Tiny 4 (раздел 16), не имеет минимальной частоты при программировании.
* примечание: насколько указано в спецификации. Это может отличаться в реальности ... Я сомневаюсь, что кто-то пробовал программировать его на тактовых частотах МГц
Не стесняйтесь автоматизировать столько, сколько нужно процесса. Это то, что большинство программирующих устройств в любом случае делают: автоматизируют процесс.
источник
Каким бы способом вы ни вводили программу в ОК, вы «взаимодействуете» с ней, потому что именно это означает взаимодействие. Даже несколько переключателей, которые вы переключаете вручную, являются «интерфейсом».
Поэтому я буду относиться к этому вопросу как к «как я могу взаимодействовать с унифицированным коммуникационным оборудованием, в основном - с механическим (в отличие от электронного) интерфейсным оборудованием, и настолько круто, насколько это возможно?»
На что мой ответ, введите программу в виде рояля. Ролик трекера «рояль» от пианино в основном дает вам как минимум 65 (в зависимости от формата) битов, которые вы можете включать и выключать независимо от перфорации в бумаге. Остальное - взыскательная работа с ножом точко. Но, по крайней мере, однажды запущенная программа (в некоторой степени) постоянно хранится (в отличие от подхода «щелчок переключателями вручную»).
источник
Мало того, что можно запрограммировать микроконтроллер без компьютера, но вы можете купить компьютер сегодня, специально предназначенный для программирования с помощью аппаратных тумблеров. Комплект называется карточкой участника и представляет собой воссоздание компьютера COSMAC Elf 1970-х годов. Комплект был описан в недавней статье в журнале IEEE Spectrum . Также возможно запрограммировать более свежие версии Членской карты с ПК.
источник
Ладно. Как насчет этого: вы пишете программу на ассемблере и сами ищите коды операций, как было предложено ранее. Как получить его в компьютер: возьмите старый магнитофон, снимите головку воспроизведения, но оставьте фиксатор и прижимной ролик. Это будет ваш транспорт. Если у вас есть катушечный проигрыватель, вы можете оставить головку воспроизведения на месте.
Затем возьмите длинную и узкую полоску бумаги или, что еще лучше, прозрачную ленту. Здесь вы кодируете свою программу. Вы используете столько треков, сколько у вас есть булавок для программирования. На одну дорожку вы наносите черные точки через равные промежутки времени; это твои часы На других дорожках вы помещаете черные точки или полосы и оставляете пустые места в соответствии с данными и сигналами. Вы излучаете свет на все это и обнаруживаете его с помощью небольших фототранзисторов (или светите одним светодиодом на ленту и обнаруживаете свет другими, аналогичными) и управляете тактовыми и сигнальными линиями транзисторами. Это занимает немного места на магнитофоне, поэтому вам может потребоваться снять головку воспроизведения.
Конечно, вы также можете кодировать сигналы как аудио, но это немного сложнее декодировать. Или вы можете обнаружить отраженный вместо проходящего света. Или вы можете пробить отверстия в темной ленте или бумажной ленте, вместо того, чтобы делать черные метки на прозрачной ленте. Без разницы. Магнитофон ведет ленту с постоянной скоростью, поэтому вы можете ввести тактовый сигнал без компьютера.
источник
Да. Основной проблемой может быть взаимодействие с интерфейсом программирования. Если у вас есть простой адрес и шина данных, все немного проще. Вы когда-нибудь видели действительно ранние компьютеры? Программы вводятся по одной инструкции за раз в ОЗУ с переключателями на передней панели.
источник
Цифровое оборудование Минкомпьютеры PDP-8 от более 40 лет назад не имели возможности автоматической загрузки. Программы обычно загружались с перфорированных бумажных лент, но загрузчик для загрузки бумажных лент приходилось вводить вручную на переключателях на передней панели.
На сайтах клиентов Digital и PDP-8, таких как OEM-производители, которые использовали их в качестве встроенных контроллеров того времени, пользователи нередко запоминали загрузчики и конкурировали друг с другом за самое быстрое время, необходимое для входа в систему. погрузчик в машину. Машины использовали воспоминания с магнитным сердечником (руки нанизаны в отдаленные уголки мира, женщинами с крошечными пальцами, используя иголки и тонкую проволоку).
Поскольку содержимое магнитной памяти является энергонезависимым, загрузчики выжили после отключения питания, и ручной ввод был необходим только после начальной сборки, загрузчик был удален из-за ошибки программы или программы, необходимой для использования пространства загрузчика.
источник
Ответ да , вы можете запрограммировать микроконтроллер без компьютера, отладчика и т. Д. Вам потребуется предоставить различные напряжения, данные, тактовые импульсы и последовательности программирования, указанные производителем ОК (непростая задача).
источник