2009-07-07 2 views
10

Я встроенный инженер SW, с опытом менее 3 лет. Я стараюсь «точить пилу» непрерывно. Мне было интересно, есть ли что-то конкретное для программирования на низком уровне, которым должны обладать кодеки C/C++.Какой набор навыков должен иметь программист на низком уровне?

Что мне приходит в голову, это знакомство с архитектурой и набором аппаратных средств. Знать, как играть с битами, также важно, управление ресурсами и производительность были частью моей работы, есть ли что-нибудь еще?

EDIT: Я работаю с собственными настройками RTOS, а не с встроенным Linux.

+1

Терпение! [15chars] –

ответ

11

Конкретные понятия, как,

  1. Endianness (эта ссылка на старый, но хороший linuxjournal статьи)
  2. Effective use of multithreading architectures (встроенного сайт хорош в целом)
  3. Debugging embedded и multithreaded системы
  4. Understand, Learn and Follow good programming techniques (ссылка очень старая и точка очень общая и субъективная, но подумайте об этом)
  5. Other things (эта страница IBM на встроенном Linux суммирует большинство других моментов, которые я хочу сделать)
  6. Еще одна вещь - never underestimate testing! или, планирование тестовых случаев!

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

+0

Да TATFT. Если вы не знаете, что это значит, посмотрите его и живите им! – Brian

+0

@Brian, Вы ставите! Я пнул себя за то, что тот потерял его. – nik

+0

Я только что узнал, что ТАТФТ стоял и громко рассмеялся в моей кабинке, я полностью согласен, на самом деле мы всегда TATFT в моей команде и нахмурились над теми группами, которые этого не делают. – 2009-07-07 15:05:01

9

Я изучил бы электронику фактических чипов. Узнайте, как они работают внутри страны (например, архитектура), интерфейс с периферийными устройствами, электрические и временные характеристики и т. Д.

В принципе, прочитайте технический паспорт, чтобы начать несколько раз и копать все, что вы не видели/не использовали до ,

Кстати, с каким чипом вы работаете?

+0

Согласовано. Узнайте о электрических и электронных технических аспектах компьютеров! – Noldorin

+0

Я работаю с ARM9 для контроллера и C55 для DSP, также помогал писать драйверы для различных типов RF, AD/DA и Power Amp ICs. – 2009-07-07 12:17:23

3

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

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

Прежде всего, практикуйте много. Делать это приносит вам гораздо больше, чем просто читать об этом;)

4

Если вы еще не подумали, что каждый инженер-программист должен прочитать «Программист прагматического программирования и код завершен». Я знаю, что они не специфичны для программирования на низком уровне, но обладают большими знаниями в них, которые применяются ко всем субдисциплинам.

+0

У меня есть эти книги и читайте их. Я думаю, что они оба замечательные. – 2009-07-07 12:18:35

+0

* Практика Agile Developer * - это своего рода продолжение к * The Pragmatic Programmer *, а также очень хорошая книга. – Imagist

7

Подобно тому, что Brian said, научиться создавать модульные тесты и автоматизированных сборку.

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

+0

Хорошо, но не уникально для встроенных систем. –

2
  • битовые операции
  • архитектуры процессоров (кэши и т.д.)
  • WCET анализ
  • планирования

Edit: То, что я забыл упомянуть, является разработка на основе модели. Сегодня алгоритмы управления часто реализуются как некоторый автомат, из которого впоследствии генерируется код C. Коммерческими доступными инструментами являются, например, MATLAB/Simulink, ASCET или SCADE.

+0

Я не знал о том, что стоял wcet, я нашел его в google и нашел this page. Я только что узнал что-то новое, спасибо !. – 2009-07-07 15:27:58

1

Получить копию копии книги MISRA-C. Он был первоначально написан членами автомобильной промышленности и пытается сделать программное обеспечение, написанное на C более надежным, применив ряд (довольно большое число!) Правил и рекомендаций.

Затем, купите PC-Lint (или другой инструмент статического анализа), чтобы проверить свой код для MISRA и других правил.

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

13

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

Некоторые рассеянные мысли:

  • Дизайн для испытания. По мере того, как вы работаете с проблемой, меняйте только одну вещь за раз за тест.
  • Вам необходимо понять шины и интерфейсы, spi, i2c, usb, ethernet и т. Д. Интерфейс номер один, сегодня, вчера и завтра, uart, serial.
  • Шаги, связанные с программированием вспышки.
  • Трюки, чтобы не сделать продукт легко кирпичным.
  • Начальные загрузчики в целом.
  • Бит-стук над указанными интерфейсами на разных семействах деталей (разные чипы поставщики имеют разные идеи относительно контактов io, подтягивания, направления элементов управления и т. Д.).
  • Плата и чип поднимаются, вы, конечно же, не хотите загрузите много десятков тысяч строк программы кода на первом включите питание (подумайте, что привело, привело).
  • Как отлаживать продукт, не используя слишком много тестового оборудования (логические анализаторы и области применения), в то же время вам необходимо научиться использовать область для отладки, вы далеки от , если у вас нет необходимости техник или инженер в лаборатории с вами.
  • Как бы вы перепрограммировали устройство в поле? Что бы вы сделали , чтобы свести к минимуму человеческую ошибку, разрешив пользователю поле обновить устройство? Помните также о понижении рейтинга.
  • Что бы вы сделали, чтобы препятствовать взлому (двоичные файлы и т. Д.).
  • Эффективное использование вспышки/рока (не износите ни один банк или секцию, не распространяйте износ или не смотрите, делает ли вспышка для вас).
  • Как и когда использовать сторожевой таймер.
  • Государственные машины, очень полезные с потоковыми потоками (последовательный и ethernet), проектируют структуры пакетов, которые хорошо переносятся и адаптируются к машине состояний, и имеют заголовок и контрольную сумму или другую структуру, которая гарантирует, что вы не интерпретируете частичные пакеты или случайные данные как хороший пакет.
+1

+1, мне нужно больше upvotes! –

+0

Хорошая почта. Я бы добавил, что при создании встроенных приложений возможностей для отладки меньше, а дизайн forethought становится абсолютно необходимым гораздо больше, чем в дружественных средах, когда вы изолированы, и вы не собираетесь разрушать код в другом месте. Кроме того, переключение на неправильный бит или разыменование висячего указателя имеет реальные последствия здесь, в отличие от настольного программирования, где худшее, что вы получаете, - это сбой программы. Защищайте программу, даже если вы не видите сильной потребности. –

+0

Да, программа в обороне, мне нравится этот термин. также знают, когда идти против нормы, как более глобальные переменные и меньше местных жителей. Не всегда предполагайте, что .bss и.данные были установлены (потому что вы этого не сделали) и выбрали альтернативу. Управление питанием, все больше и больше вещей разряжаются от батарей. Требуется меньше энергии для хранения 1 в ром, чем 0. Сохраняйте nv-ram при отключении питания. Wakeup, обработать событие, вернуться в режим низкого энергопотребления. –

1

Хороший вопрос. Некоторые, которые не были упомянуты ...

Узнайте различные варианты достижения низкоуровневой многозадачности. От базовых планетарных (не превентивных) планировщиков с таймингами времени от аппаратного таймера до упреждающей RTOS. Узнайте, почему вам может понадобиться RTOS, и почему вы не можете. Если вы используете RTOS, узнайте, что новички с фоном для ПК, вероятно, склонны создавать слишком много задач.

Получение видимости внутренних компонентов для отладки может быть проблемой. Обычно нет экрана, поэтому вы не отправляете «printf» туда, где хотите. Интерфейс эмулятора или JTAG идеален - вы можете установить точки останова и выполнить свою программу (пока остановка микрофона не заставит аппаратное устройство сходить с ума, например, размахивать рукой робота на полной скорости!). Если эмулятор/JTAG недоступен, узнайте, как использовать запасной последовательный порт (или, возможно, даже бит-bash для вывода последовательного порта) для канала отладки, с некоторыми простыми командами peek/poke памяти.