Создание графической среды программирования для встроенных микроконтроллеров
Меня попросили создать IDE графического программирования для встроенных 8-битных и 32-битных микроконтроллеров. Это должно быть так же просто, как использовать LabVIEW, но мне не нужны такие функции, как отладка или симуляция (по крайней мере, пока). По сути, приложение должно позволять пользователю настраивать логические элементы, в то время как / для циклов, операторов case, сравнений, управления потоком и т. Д. После завершения программы она должна сгенерировать код C, скомпилировать и записать программу на подключенном микроконтроллере. Прямо сейчас они нацелены на процессоры Atmel и Freescale и будут использовать DIO, аналоговый ввод-вывод для измерения тока, шину CAN, ШИМ и, возможно, некоторые другие, которые мне не хватает.
Я понимаю, что это ОГРОМНОЕ мероприятие, разработка которого займет очень много времени, но это программное обеспечение, которое моя компания хочет предоставить клиентам, когда они покупают наше оборудование. Чтобы немного подкрепиться и дать вам небольшую справочную информацию, наша компания создает модули ввода-вывода, которые работают на шине CAN или автономно. Сегодня единственный способ запрограммировать микроконтроллер на нашей печатной плате - это использовать IDE от Atmel (AVR Studio) или Freescale (CodeWarrior). Проблема в том, что у клиента не всегда есть ноу-хау для программирования на C. Итак... введите графическую среду IDE. LabVIEW слишком дорог для клиента, поэтому мы застряли в создании собственного.
Итак, мой вопрос: что является хорошим способом для создания этой IDE? Я планирую разработать это на C#/WPF, но мне интересно, насколько сложно будет преобразовать созданную пользователем логику в код C, который может быть скомпилирован компилятором Atmel/Freescale. Или, может быть, есть лучший метод там? Кто-нибудь сделал что-нибудь подобное?
3 ответа
У нас была довольно похожая проблема. Наша цель состояла в том, чтобы создать инструмент графического моделирования, который генерировал бы код C или C++ из конечных автоматов UML. Можно подумать, что такие инструменты должны быть очень распространены, но оказывается, что они не очень хорошо поддерживают вложенность состояний и не генерируют достаточно качественный код для встроенных микроконтроллеров.
После сравнения нескольких вариантов, таких как интеграция с существующими графическими инструментами, мы остановились на разработке всего этого в Qt (qt.nokia.com). Оглядываясь назад, мы очень довольны этим выбором, потому что мы можем контролировать каждый аспект инструмента.
Инфраструктура Qt предоставляет множество инфраструктур, таких как двухмерная графическая сцена и графические элементы, которыми пользователи могут манипулировать с помощью мыши. У вас есть поддержка XML для хранения вашей модели на диске. И у вас есть скрипт-движок, если вам нужно предоставить какой-нибудь скриптовый интерфейс. Одна вещь, которая очень помогла нам начать работу с Qt, была книга "Программирование на C++ с использованием Qt 4 (2nd Edition)".
В любом случае созданный нами инструмент можно загрузить бесплатно и использовать бесплатно (http://www.state-machine.com/qm), так что вы можете поиграть с ним и посмотреть, как он работает.
Рассматривали ли вы создание соединителя LabView, чтобы ваши клиенты могли использовать LabView?
Это даст им зрелый, стабильный набор инструментов, и "все", что вам нужно сделать, это склеить его.
Я не буду использовать работу "просто" в этом контексте.
Требование больше похоже на язык 4GL/RAD для генерации кода на C, чем на IDE.
Лично я бы предложил альтернативный подход, который заключается в том, чтобы взять небольшой язык сценариев, такой как Lua или TCL, и встроить некоторые пользовательские расширения в C-код. Ваши клиенты могут затем кодировать в Lua или TCL, используя вашу библиотеку расширений.
Для самой IDE я бы рассмотрел создание плагина eclipse. Базовое затмение содержит 90% того, что вам нужно, а архитектура плагина является солидной и зрелой, и для нее есть множество примеров для подражания.