Новые инструментальные средства компании Mathworks упрощают разработчикам генерирование программного кода и сокращают цикл проектирования системы.
Вероятно, математика находятся ближе всего к понятию абсолютной истины. Математика не испытывает смены настроений, у нее нет предубеждений и политических симпатий, а также религиозных убеждений. Математика – это прекрасный набор абсолютно логичных правил, которые не признают ничьих заслуг и не ожидают ничего в качестве платы.
Математика, кроме того, является холодным и жестким арбитром – без души и жалости. Математика не имеет друзей, поклонников, союзников или врагов. Математика сдержанна и бесстрастна. Математика не имеет морали и не имеет долгов.
Математика, однако, может ошибаться, когда мы пытаемся подчинить ее нашим капризам. Мы можем создать нечто прекрасное с помощью абстрактной математики, но получаем катастрофические последствия, когда представляем это нечто с помощью несовершенной модели – например, используя программное обеспечение.
Для многих из нас инженерное решение начинается с чистой математики. Мы используем инструменты, подобные MATLAB для моделирования системы, абстрактного представления нашего решения и проверки ожидаемого результата. Мы изменяем, регулируем и исправляем нашу модель до тех пор, пока не получим совершенный результат. Наш алгоритм решает нашу задачу. Затем нам нужно просто реализовать полученное решение.
На этом этапе многие инженеры-математики просто перебрасывают полученные уравнения и графики программисту, который пытается уловить замысел математика, реализуя его в программе. Однако, программист имеет явно несовершенные инструменты для работы. Будет ли 16-битная аппроксимация достаточной для данного решения? Использовать ли вычисления с фиксированной запятой? Будет ли сто итераций достаточно для получаемого результата? А тысячи? Миллиона? Какую точность должны иметь константы? Как избежать округлений и сокращений? Когда наш процессор будет делить бесконечность на ноль, будет ли он знать, какая величина была больше? Приблизит ли нас интерполяция в достаточной степени к нужному результату?
Когда мы идем от алгоритма, созданного таким инструментом, как MATLAB, к программной реализации, многие проекты сталкиваются с трудностями. Суть и назначение уравнения не всегда ясна. Много ошибок допускается в процессе преобразования. Так как часто разные люди вовлечены в разные этапы проектирования, факт того, что достигнут желаемый результат, может быть не всегда очевидным.
Будет ли круто, если бы мы могли автоматически сгенерировать код из нашей модели в MATLAB, так чтобы у нас была возможность непосредственно проверить корректность данного решения? А потом, когда мы вернемся, чтобы внести изменения в MATLAB, будет ли здорово, если эти изменения автоматически перейдут в код?
Компания MathWorks, несомненно, также полагает, что это было бы весьма замечательно, поэтому она предложила новый инструмент, названный MATLAB Coder, который автоматически генерирует код C и C++ прямо из языка MATLAB.
До появления такой возможности в MATLAB генерацию кода нужно было выполнять в Simulink. Теперь же код генерируется непосредственно в MATLAB. Следует отметить, что после выхода нового инструмента MATLAB Coder средства генерации кода семейства Simulink также были усилены и объединены.
С помощью инструментального средства общего назначения, подобного MATLAB, можно заработать несколько долларов, а можно – миллион.
Проблема для компании MathWorks, в таком случае, состояла в том, как определить цену на программное средство, которая с одной стороны была бы доступной для широкого потребления, а с другой стороны позволили бы компании получить некоторый доход от той части прибыли, которую она обеспечила, например, крупной коммуникационной компании.
Компания MathWorks решила эту задачу путем выпуска дополнительного компонента для проектов с высокой прибавочной стоимостью – инструмента Coder, как впрочем она поступила и при создании средства Simulink. Когда ваши математические изыскания выполняются для целей промышленного внедрения, ваши идеи в конечном итоге реализуются в некотором физическом оборудовании. MathWorks предлагает вам инструмент, который сделает эту работу намного проще, но за это компания просит небольшую плату.
В системах цифровой обработки сигнала и изображений, коммуникационных и других приложениях, использующих сложные алгоритмы, системные инженеры давно использовали MATLAB в качестве инструмента разработки и моделирования. Автоматизация процесса преобразования алгоритмов, созданных в MATLAB, в C или C++ может потенциально сэкономить время проектирования системы. Выполнение множества итераций в процессе создания алгоритма и его реализацией требует существенных затрат времени и сопровождается появлением ошибок. Отказ от необходимости вручную вносить изменения в C++ существенно сокращает цикл итераций и исключает потенциальные источники возникновения ошибок.
Используя Coder, разработчик имеет дело с одной копией основного исходного кода проекта – в MATLAB. Версии кода на C или C++ получаются автоматически – в соответствии с набором конфигурационных правил, устанавливаемых командой разработчиков.
Как вы возможно полагаете, Coder создает не просто код, а также и все необходимые вспомогательные компоненты – библиотеки, исполнимые модули и т.д.
Coder поддерживает широкий набор языковых свойств MATLAB – хотя и не абсолютно полный набор. Язык MATLAB богат и абстрактен, и не все его элементы надлежащим образом переводятся в обычный код C.
Рискованно и опасно пытаться вручную редактировать или отлаживать автоматически сгенерированный код на C или C++. Целостность итерационного процесса гарантируется только если исходный код проекта остается копией кода MATLAB и с полученным C-кодом необходимо обращаться практически как с исполнимым кодом. Когда вы хотите внести изменения или справить ошибку, нужно вернуться в MATLAB и сделать это там.
Coder не создан специально для генерирования кода, который можно получить в процессе C-to-hardware-проектирования, при котором алгоритм требует аппаратное ускорение. В этом случае вы должны сами принять решение об использовании такого подхода. Могут возникнуть сложности со стилем программирования – считается, что исходный код для инструментов C-to-hardware, подобных высокоуровневым средствам синтеза, должен быть создан с помощью особого стиля программирования, и этот стиль может существенно влиять на результаты. При автоматической генерации кода вы теряете возможность управления нюансами стиля программирования на C и, в результате, сгенерированные аппаратные средства могут полностью не оправдать ваших ожиданий.
Но для встраиваемого программного обеспечения или программного обеспечения для DSP-процессоров Coder мог бы быть просто тем самым средством, которое нам необходимо.
Теперь мы не должны обязательно использовать Simulink, когда хотим автоматически сгенерировать код.
Однако для тех, кто использует Simulink компания объединила такие средства, как Real-Time Workshop и Stateflow Coder в новом продукте, названном Simulink Coder. Для разработчиков встраиваемых систем компания объединила Real-Time Workshop Embedded Coder, Embedded IDE Link и Target Support Package в одном продукте – Embedded Coder.
Не похоже, что во всех этих продуктах было использовано слишком много новых технологий – и это хорошо. Генерация кода с помощью Simulink от MathWorks широко распространена среди разработчиков в настоящее время. Это означает, что те из нас, кто внедряет новые инструменты в процессе работы над проектом, не будут летчиками-испытателями. Однако, возможность генерирования кода из MATLAB, равно как и более разумное объединение компонентов средств генерации кода в Simulink, будет приятным нововведением для многих разработчиков.