Наше настольное приложение состоит из серверной части Mono / .NET 3.5, которая взаимодействует через USB с различными устройствами, и интерфейсной части Silverlight, которая взаимодействует с серверной частью через разъемы. Встроенное ПО для устройств разработано собственными силами на C. Чтобы ускорить процесс разработки и уменьшить количество ошибок, мы хотели бы поделиться кодом между нашим встроенным ПО и настольным приложением. Какие инструменты и методы вы бы предложили, чтобы мы могли это сделать? А еще лучше: что вы успешно использовали в своем программном обеспечении для решения аналогичной проблемы?
Двумя основными вещами, которыми мы хотели бы поделиться, являются структуры сообщений, которые определяют наш протокол связи, и данные, которые в настоящее время определяются через константы структуры / массива Си. Для протокольных сообщений мы в настоящее время вручную переписываем наши реализующие сообщения классы, чтобы они соответствовали определениям C, используя код C в качестве руководства. Для данных, которыми мы делимся, мы создали управляемое приложение C ++, которое ссылается на скомпилированный код C, а затем извлекает содержимое массивов в файл XML.
Наши методики работают, но они не оптимальны. С одной стороны, у нас было множество ошибок, связанных с нашей реинтерпретацией структур C как C #, из-за параллельного изменения кода C и ошибок программиста; мы хотели бы избежать этого класса ошибок в будущем развитии. Что касается обмена данными, у меня нет больших проблем с нашим текущим решением, но сопровождающий программы извлечения говорит, что это болезненный процесс, заставляющий это работать должным образом.
Мы немного ограничены в вещах, которые мы сможем изменить в прошивке для устройств. Во-первых, у нас есть большое разнообразие процессорных архитектур и встроенных платформ, поэтому код на C должен оставаться переносимым. С другой стороны, микропрограмма работает в режиме реального времени и ограничена доступным MIPS и объемом памяти, поэтому мы не можем ничего добавить с непредсказуемым или медленным временем выполнения.