ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
265770
Evgeny_CD, Архитектор (05.08.2011 21:19, просмотров: 16281)
Простейший виртуальный процессор для ускорения аппаратной отладки. При освоении нового контроллера или при борьбе со всякими «аппаратными тонкостями» меня всегда бесила типовая процедура: * Наговонокодили * Компильнули (это хоть ускорить можно – RAM Drive, SSD) * Прошили (а вот это хрен ускоришь) * Пялимся в терминалку и осц * «…ь! Опять …я получилась!» * Repeat until передохнут… Процесс крайне увлекательный и полезный. Если есть задача просрать некоторое количество времени. А что если сделать так? У контроллера есть 3 области памяти: * Просто память кода. С обычной для ядра адресацией * Просто память данных. * Область памяти в памяти данных, которая есть область виртуальных программ. Последняя разделена на пронумерованный ячейки по 16 байт: * Адрес исполняемой функции * Адрес операнда 1 * Адрес операнда 2 * Адрес результата И есть простейшая программа виртуального процессора с PC, который считает в терминах номера ячейки. Еще у нас есть постоянно идущий таймер, который все могут считать. Обработчики прерывании имеют 2 параметра * Номер вызова прерывания – инкрементируется при входе в прерывание. Чтобы засекать, сколько раз прерывание вызвалось. * Показания таймера – чтобы знать, когда последнее прерывание случилось. Обмен с хостом делается специальной функцией, которой передают указатель на начало блока данных и его длину, и оно отправляет. Принимает аналогично. По прерываниям или нет – это зависит от специфики платформы. В общем случае без всяких прерываний. Функции: * Простейшие действия над операндами * Приведение типов * организация циклов и условных переходов * Задержка на указанное время * Обмен с хостом * Еще, что надо. Ассемблируем руками, благо большинство подобных «программ» будет иметь длину несколько десятков шагов. Пишем некую простейшую тулзу, которая при помощи контекстных меню позволяет удобно заполнить ячейки виртуальной программы. Отдельно пишется обработчик данных для обмена с устройством. Никаких убогих терминалок!!! Пишется шаблон сообщения: * Id сообщения (если их несколько типов в системе) * Длина * Поле 1 и его смысл * Поле 2 и его смысл * … Т улза для «ассемблирования» автоматически дает нам адреса ячеек в памяти. Тулза на писюке автоматически распаковывает все и раскладывает на экране с подписями. Есть специальный тип сообщения для загрузки «программы». Преимущества: * Очень экономично по ресурсам! 1 Кбайт ОЗУ = 64 шага программы. * Внутрення задержка исполнения сопоставима с обычной программой. Виртуальные машины нервно курят :) * Летентность канала связи не волнует в процессе исполнения. * Удобство работы на писюке. Можно все полностью автоматизировать и, скажем, тупо перебором подбирать настройки аппаратуры для достижения максимальной производительности для какой-то задачи. * Верифицировать доку на чип одно удовольствие :) В свете всех моих идей виртуализации разработки можно на основе этого «ассемблера» сделать драйвер некого железного устройства, и встроить его в среду разработки. Будет очень удобно. Критика?