С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017

Реализация языка описания протоколов обмена

23.07.2017, 10:30. Показов 4693. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет парни.

Я все чаще сталкиваюсь с необходимостью читать/прошивать микросхемы (контроллеры), которые не поддерживаются имеющимися у меня программаторами, а то и вовсе неизвестно, чем поддерживаются. При этом на них есть даташит с полным описанием процесса чтения/записи внутренней памяти.
И вот не дает мне покоя мысль об универсальном программаторе. Основной его функцией должна быть простая перенастройка на любую новую микросхему.
Вот здесь описан программатор, с которым в комплекте идет язык HPL, позволяющий просто и быстро описать протокол программирования микросхем.
Конечно, исходников никаких нет.

Кто-нибудь занимался написанием интерпретатора языка? Я пока вообще не представляю, как это делать.

В качестве железа можно применить все, что угодно, например, FT2232H, модуль PinBoard, STM32, CY68013, да хоть параллельный порт.

То есть архитектура видится такой:
Для каждой микросхемы имеется описание на HPL.
Программа читает этот файл, разбирает его и на каждый шаг составляет карту бит, которая передается на аппаратный интерфейс или читается с интерфейса.

Пример реализации самого файла hpl можно посмотреть в демо-версии оболочки программатора.
http://www.cnc-lab.com/files/or5demo.rar
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.07.2017, 10:30
Ответы с готовыми решениями:

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

Универсальное описание протоколов обмена для периферийных устройств (Serial port)
Приходилось реализовать протокол обмена с физическими устройствами через интерфейс Serial Port на нескольких языках в разное время. И это...

Реализация сетевых протоколов
Народ, помогите пожалуйста. Уже неделю мучаюсь. :wall: В общем, суть в следующем. Существует некий бинарный протокол,...

23
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 737
23.07.2017, 11:05
Цитата Сообщение от omtomtubo
Для каждой микросхемы имеется описание на HPL.
Если оно действительно имеется, то задача просто парсить текстовый файл с этим описанием.
Не столько сложно, сколько громоздко и муторно, но вполне решаемо.

Но понадобится еще знание стандартов в которых предоставлены данные для прошивания, так как их придется читать тоже.
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
23.07.2017, 11:35
Цитата Сообщение от Кат495
если оно действительно имеется
Оно действительно имеется для полутора тысяч поддерживаемых микросхем.
Для новых микросхем придется написать самому.

Цитата Сообщение от Кат495
Но понадобится еще знание стандартов в которых предоставлены данные для прошивания, так как их придется читать тоже.
Процесс прошивки описан обычно в даташите или programming manual.
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
23.07.2017, 11:44
Цитата Сообщение от omtomtubo
Оно действительно имеется для полутора тысяч поддерживаемых микросхем.
Для новых микросхем придется написать самому.
Насколько я понимаю тебе не нужно реализовывать поддержку ни для тысяч, ни даже для десятков микросхем, а только для тех, которые не поддерживают другие твои программаторы. В таком случае проще все реализовывать в самой клиентской программе, на том языке, на котором она написана.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
23.07.2017, 12:00
Цитата Сообщение от omtomtubo
Пример реализации самого файла hpl можно посмотреть в демо-версии оболочки программатора
Сразу видно, что "язык" писал ембеддер :) Ну совершенно нечитабельный синтаксис, хотя по форме всего лишь обычный виндовый .ini файл (старый, еще от винды 3.1).

По поводу парсинга: если где-нибудь есть описание грамматики языка (сомневаюсь, но все-таки), то парсинг пишется с пол-пинка с помощью какого-нибудь lex + bison или (лучше) antlr. Если описания грамматики нет, то ее можно попробовать восстановить анализом исходных файлов. Полторы тысячи описаний должно быть более чем достаточно для этого. Ну и в любом случае нужен некоторый бекграунд по теории. Я бы посоветовал "Грис Д. Конструирование компиляторов для цифровых вычислительных машин" (можно взять вот тут) . Не смотря на возраст она, пожалуй, остается самым внятным учебником по этому вопросу. Впрочем, имея бэкграунд написать парсер рекурсивным спуском вполне посильная задача без каких-либо дополнительных инструментов.

P.S. вообще имеет смысл взять эти описания и перегнать в другой синтаксис (естественно, автоматически), но это отдельная и чуть более сложная задача.
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
23.07.2017, 15:55
Спасибо.
Для человека недалекого (то есть далекого от предмета):

Вначале нужно написать описание языка в формате antlr.
Потом вместе с описанием языка подсовывать файлы с описаниями различных микросхем, чтобы сформировать полный набор функций, выполняющихся при соответствующих конструкциях в исходнике.
Этот пункт лишний. Описания языка достаточно.
А дальше заполнить тело этих функций соответствующим кодом взаимодействия с аппаратурой.

Так получается?
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
23.07.2017, 16:10
Цитата Сообщение от omtomtubo
Спасибо.
Для человека недалекого (то есть далекого от предмета):

Вначале нужно написать описание языка в формате antlr.
Потом вместе с описанием языка подсовывать файлы с описаниями различных микросхем, чтобы сформировать полный набор функций, выполняющихся при соответствующих конструкциях в исходнике.
Этот пункт лишний. Описания языка достаточно.
А дальше заполнить тело этих функций соответствующим кодом взаимодействия с аппаратурой.

Так получается?
Это один из возможных вариантов. Другой вариант - сформировать внутреннее представление и уже его обрабатывать. Второй вариант исключает из таймингов сам процесс разбора (это позволит избежать влияния парсинга на задержки). Кроме того, к моменту окончания парсинга точно известна корректность описанного алгоритма с точки зрения языка. Иначе ошибки в самой программе могут прервать процесс записи в самый неподходящий момент.

P.S. я бы посоветовал разобраться с парсингом (на самом деле это далеко не самый сложный раздел в программировании) и написать разбор руками рекурсивным спуском. грамматика у этого языка не выглядит сложной, рекурсивный спуск должен справиться. в итоге будет а) лучшее понимание как все работает (и, соответственно, будет проще править ошибки/доделки/переделки) и б) будет проще выполнять операции или генерировать промежуточное представление.
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
23.07.2017, 17:03
Хм. Это большая работа. К тому же на PC уже забыл, когда писал в прошлый раз.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
23.07.2017, 17:16
если задача прикрутить новую микросхему к какому-либо программатору, взаимодействовать с которым опять же собрались сами напрямую, то зачем это делать через жопу ещё одну прокладку, тем более что выглядит это .ini - образное описание мягко говоря не очень уж красиво.
имхо тогда проще взять любой понравившийся скриптовый язык lua, python,... и писать описание из даташита сразу на нём.

function Init()
on(RESIT)
...
off(RESIT)
on(CS)
write(0xaaaa)
off(CS)
end

function WriteData(data)
on(CS)
write(CMD1)
write(CMD2)
write(data)
off(CS)
end

хотя обычно даже этого не надо.
как-то когда надо было прошить какой-то простой еепром, вместо поиска подходяшего программатора проще и быстрее оказалось наговнячить на С небольшую утилитку которая альтеровским усб-бластером тупо шила только эту конкретную микросхему.
не каждый же день надо десяток новых типов микросхем шить?
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
23.07.2017, 17:39
Цитата Сообщение от omtomtubo
Хм. Это большая работа. К тому же на PC уже забыл, когда писал в прошлый раз.
Да, кусок не маленький. Тем более в слабо знакомой области. Как тут верно заметили, вполне возможно, что проще будет прикрутить готовый скриптовый язык и описывать процесс прошивки прямо на нем. Думаю, даже при весьма примитивной поддержке типа "дернуть ногой вверх/вниз" можно будет описывать протоколы любой сложности и это будет как минимум так же читабельно, как описание на "языке" из топика. Вполне возможно, что небольшого "прохождения напильником" (добавить функции для работы с портами) будет достаточно, что бы сделать себе специализированную версию того же node.js. Функциональности и скорости жабаскрипта должно быть с головой для этой задачи.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 737
23.07.2017, 18:41
Да дело ж не в этом.
А (как пишет автор) - к его услугам здоровенный массив готовых описаний на языке HPL. И он хочет ими воспользоваться.
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
23.07.2017, 18:48
А как у этого массива с лицензией? А то напишешь интерпретатор, а выложить никуда нельзя.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
23.07.2017, 18:53
Огласите весь спсочек пожалуйста.
описанных на этом HPL микросхем
если он реально большой, то можно подумать просто о том чтобы сконвертировать этот убогий HPL в скрипт на той же Lua, и исполнять его уже готовым интерпретатором.
а если нет, то тогда ну его, проще что-нибудь другое взять за основу для описания действий для программирования микросхем памяти.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
23.07.2017, 18:57
Цитата Сообщение от Кат495
Да дело ж не в этом.
А (как пишет автор) - к его услугам здоровенный массив готовых описаний на языке HPL. И он хочет ими воспользоваться.
Иной раз проще перепилить пару-тройку нужных описаний на нормальный инструмент, чем пытаться воспользоваться готовым. И да, после написания своего инструмента (со своей грамматикой) написать парсер, который перегонит из одного языка в другой - не очень сложная задача. В некоторых случаях подобная задача решается вообще каким-нибудь инструментом типа awk или, скажем, питон-руби-перл. Вобщем, решать автору.

P.S. как тут верно заметили, зачастую под конкретную задачу (конкретный чип и протокол) проще выпилить свой инструмент на коленке.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 737
23.07.2017, 19:05
А может эта фирма cnc будет пополнять))))) - и вот чтоб не перегонять каждый раз, ...

Цитата Сообщение от div
А как у этого массива с лицензией? А то напишешь интерпретатор, а выложить никуда нельзя.
А при чем тут лицензия массива? Интерпретатор пишет omtomtubo. И он - его собственность. Как хочет - так и выложит.

Касательно же массива - раз выкладывают в свободный доступ, значит позволяют брать.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 737
23.07.2017, 19:21
Цитата Сообщение от _pv
можно подумать просто о том чтобы сконвертировать этот убогий HPL в скрипт на той же Lua, и исполнять его уже готовым интерпретатором.
А точно это проще?
Ведь сей список - не данные))))))
Динные - это файл прошивки, например .hex или .bin
А этот HPL должен сформировать некую управляющую структуру, которая, будучи запущена, обработает данные и произведет дрыганье ногами
Сможет Lua такое?
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
23.07.2017, 19:44
проще.
сможет.
0
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
24.07.2017, 11:04
Цитата Сообщение от omtomtubo
Кто-нибудь занимался написанием интерпретатора языка? Я пока вообще не представляю, как это делать.

В качестве железа можно применить все, что угодно, например, FT2232H, модуль PinBoard, STM32, CY68013, да хоть параллельный порт.

То есть архитектура видится такой:
Для каждой микросхемы имеется описание на HPL.
Программа читает этот файл, разбирает его и на каждый шаг составляет карту бит, которая передается на аппаратный интерфейс или читается с интерфейса.
Интерпретатор сделать просто, если выбрать подходящий язык - http://wiki.c2.com/?HomoiconicExampleIn ... gLanguages

Самое простое решение: OpenOCD --> jtag адаптер --> STM32 --> target
В OpenOCD встроен Tcl, как раз подходящий язык, чтоб делать свои интерпретаторы, да и сам OpenOCD так и сделан.
Вот пример -

HPL файлы под жёстким копирайтом, их нельзя использовать, разве что для информации.
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
24.07.2017, 12:32
Есть еще вот такое
http://wavedrom.com/tutorial.html
Исходники доступны. Это как-то может помочь?
Ведь парсер языка есть, осталось только вместо рисования выдать наружу (это если сильно упрощая).
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
24.07.2017, 12:42
Цитата Сообщение от Кат495
А точно это проще?
Зависит от опыта. Кому-то может быть проще, кому-то сложнее.
Цитата Сообщение от Кат495
Ведь сей список - не данные))))))
Все есть данные, в том числе исходный код.
Цитата Сообщение от Кат495
Динные - это файл прошивки, например .hex или .bin
А этот HPL должен сформировать некую управляющую структуру, которая, будучи запущена, обработает данные и произведет дрыганье ногами
Сможет Lua такое?
Думаю, это сможет любой язык программирования общего назначения. Вопрос скорее в затратности и целесообразности использования конкретного языка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.07.2017, 12:42
Помогаю со студенческими работами здесь

Примеры по реализации голосового обмена на Java 2 с использованием протоколов TCP/IP или UDP
Подскажите, где можно найти примеры по реализации голосового обмена на Java 2 с использованием протоколов TCP/IP или UDP.

Учебник по C#: без описания работы компилятора, создания языка и биографии его авторов
В учебнике опускается описание работы компилятора, создание языка c# и биографии его авторов. 85 страниц. Пример учебника вы можете...

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

Имеются следующие описания: Язык= (Паскаль, Ява, Бейсик, Фортран, Лисп). По русскому названию языка вывести английский
Имеются следующие описания: Язык= (Паскаль, Ява, Бейсик, Фортран, Лисп). По русскому названию языка вывести английский эквивалент ...

Выбор языка программирования для обмена информацией с другим копмьютером по интернету
Здравствуйте. Подскажите пожалуйста на каком языке программирования легче реализовать следующую вещь (меня интересует C++, java, c# -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru