Написание прошивки: сборка или высокий уровень? - PullRequest
19 голосов
/ 17 января 2009

Относится к:

Если вы пишете код для микроконтроллера , есть ли реальная разница, если вы пишете на ассемблере или C или другом языке высокого уровня? Если бы вы написали код на C, как бы вы его скомпилировали?

Спасибо

Ответы [ 17 ]

2 голосов
/ 22 июня 2012

В наши дни проблема заключается в том, что встроенным может быть что угодно: от ATTiny с 6 контактами и несколькими байтами оперативной памяти до многоядерного SBC со встроенной операционной системой, которая может посрамить настольные компьютеры некоторых людей.

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

Прежде всего - C работает везде и довольно хорошо масштабируется, чем выше вы идете, тем больше вам придется вызывать внешние библиотеки и т. Д., Чтобы справиться со сложностью.

Для очень маленьких микросхем (измерения флэш / оперативной памяти в байтах) лучше всего использовать ASM, когда вы переходите на диапазон килобайт, можно использовать C или любой другой традиционный язык, так как вам не нужно считать каждый байт. Если у вас есть мегабайты для игры, у вас появляется возможность и все чаще возникает необходимость использовать ОСРВ, чтобы позаботиться обо всем и сократить время разработки. К тому времени, когда у вас будет аппаратное обеспечение, вы сможете запустить полноценную операционную систему, и вы, вероятно, сможете абстрагироваться от аппаратного обеспечения и просто написать все в мягкой ячейке, такой как Java или что-то в этом роде, не беспокоясь о том, насколько это ужасно расточительно и как вы больше не настоящий программист ...;)

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

1 голос
/ 07 февраля 2009

Если вы пишете код, который сильно зависит от периферийных устройств, специфичных для устройства, и цепочка инструментов, которую вы используете, не предоставляет необходимых встроенных компонентов для их эффективного использования (например, дрянного компилятора Freescale DSP563CC), тогда используйте сборку .

Кроме того, я думаю, что неписаные правила использования ассемблера и языка высокого уровня более или менее аналогичны правилам для разработки программного обеспечения для настольных компьютеров: сохраняйте код чистым, поддерживаемым и оптимизируйте горячий код с помощью машинного языка.

1 голос
/ 30 января 2009

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

Например, программное обеспечение, которое подтверждает SIL -2 (уровень целостности безопасности) и выше, может требовать постоянных проверок ОЗУ для обнаружения любого возможного повреждения данных. Область ОЗУ, которую вы проверяете, не может быть изменена во время проверки, поэтому написание теста на ассемблере позволяет вам убедиться в этом, например, путем сохранения любых локальных переменных в определенных регистрах или в другой области ОЗУ. , Это было бы трудно, если не невозможно, в C.

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

1 голос
/ 07 июня 2019

Код на языке ассемблера действительно быстр с небольшой занимаемой площадью, но код, написанный на языке ассемблера, не является повторно используемым кодом. Эта возможность повторного использования для кода является наиболее важной функцией при разработке программного обеспечения. Например, если у вас есть код проекта на ассемблере для процессора x86, его можно использовать только для процессора x86, а не для процессора ARM. Но если у вас есть код проекта C / C ++ для процессора x86, вы можете использовать этот код для процессора ARM. Так что лучше избегать ассемблера для разработки программного обеспечения.

1 голос
/ 22 января 2009

В итоге, если вы используете C, вы можете вручную оптимизировать его позже, я не буду использовать ничего, кроме C или ассемблера (без C ++ и т. Д.).

Ключ - это набор инструкций микроконтроллера, если вы используете PIC или даже 8051, я бы использовал только ассемблер. Если это дружественный к компилятору isa, такой как arm или avr или msp430, тогда используйте C, чтобы сохранить некоторую типизацию, но вы, вероятно, будете иметь некоторые подпрограммы в ассемблере по разным причинам. Точно так же вы, вероятно, хотите избежать библиотеки C, даже newlib может быть слишком громоздким, заимствовать код или идеи из них, но не просто ссылаться на них. О, вернемся к вопросу, посмотрите, какие компиляторы C доступны для цели, снова Рука и AVR у вас не будет никаких проблем. Скорее всего, MSP тоже хорошо. Тот факт, что Keil или Iar продадут вам компилятор, не означает, что вы должны его купить или использовать, и результаты оплаты, и бесплатных компиляторов могут быть ужасными. В любом случае вам нужно хорошо разбираться в asm и изучать вывод (для этого вам, вероятно, придется написать дизассемблер).

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

0 голосов
/ 10 февраля 2009

Жаль, что никто еще не упомянул Форт или Схему. Оба могут быть подходящими для небольших сред и могут дать впечатляющий прирост производительности.

0 голосов
/ 02 мая 2009

Обычный C или Паскаль, Modula2. Но из-за доступности компилятора это означает C.

Дополнительные возможности C ++ и аналогичных программ интересны только из соображений стиля, поскольку динамическое размещение и размер программы обычно очень ограничены.

Также более сложная среда выполнения может быть проблемой, если ваши приложения становятся напряженными.

Ассемблер также может быть полезен, но только в том случае, если вы продаете действительно гигантские объемы, а прошивка меньшего размера означает меньшую, более дешевую микросхему (меньше флэш-памяти) и размер программы можно наблюдать (читай: есть некоторый шанс, что вы его получите) без ошибок во времени)

...