Каким Набором навыков низкоуровневый программист должен обладать?

Существует несколько возможных решений:

Создать пустой файл

touch file

>file

echo -n > file

printf '' > file

Версия echo будет работать только в том случае, если ваша версия echo поддерживает переключение -n на подавить переводы строк. Это нестандартное дополнение. Все остальные примеры будут работать в оболочке POSIX.

Создайте файл, содержащий новую строку и ничего больше

echo '' > file

printf '\n' > file

Это допустимый «текстовый файл», поскольку он заканчивается новой строкой.

Записать текст в файл

"$EDITOR" file

echo 'text' > file

cat > file <<END \
text
END

printf 'text\n' > file

Это эквивалентно. Команда $EDITOR предполагает, что у вас есть интерактивный текстовый редактор, определенный в переменной среды EDITOR, и что вы в интерактивном режиме вводите эквивалентный текст. Версия cat предполагает буквальный перевод строки после \ и после каждой другой строки. Кроме того, все они будут работать в оболочке POSIX.

Конечно, есть и много других способов записи и создания файлов.

10
задан nik 20 July 2009 в 14:00
поделиться

9 ответов

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

  1. Endianness (эта ссылка ведет на старую, но хорошую статью linuxjournal)
  2. Эффективное использование многопоточных архитектур (сайт Embedded хорош в общем)
  3. Отладка встроенных и многопоточных систем
  4. Поймите, изучите и соблюдайте хорошие методы программирования (ссылка очень старая, а суть очень общая и субъективная, но подумайте об этом)
  5. Другое (эта страница IBM о встроенном Linux суммирует большинство других моментов, которые я хочу сказать)
  6. Еще одна вещь - никогда не недооценивайте тестирование ! или, планирование тестовых случаев !!

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

11
ответ дан 3 December 2019 в 13:23
поделиться

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

По сути, прочтите лист данных от начала до конца несколько раз и изучите все, что вы раньше не видели / не использовали.

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

9
ответ дан 3 December 2019 в 13:23
поделиться

Подобно тому, что Брайан сказал , узнайте, как создавать модульные тесты и автоматические сборки .

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

7
ответ дан 3 December 2019 в 13:23
поделиться
  • битовые операции
  • архитектуры процессора (кеши и т.д.)
  • анализ wcet
  • планирование

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

.
2
ответ дан 3 December 2019 в 13:23
поделиться

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

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

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

так что не нужно бросать вызовы "printf" куда угодно. Эмулятор или интерфейс JTAG идеально подходят - вы можете устанавливать точки останова и пошагово выполнять свою программу (при условии, что остановка микропрограммы не сводит оборудование с ума, как размахивание рукой робота на полной скорости!). Если эмулятор / JTAG недоступен, узнайте, как использовать резервный последовательный порт (или, может быть, даже использовать битовый штифт для создания последовательного порта) для канала отладки, с помощью некоторых простых команд просмотра / поиска памяти.

так что не нужно бросать вызовы "printf" куда угодно. Эмулятор или интерфейс JTAG идеально подходят - вы можете устанавливать точки останова и пошагово выполнять свою программу (при условии, что остановка микропрограммы не сводит оборудование с ума, как размахивание рукой робота на полной скорости!). Если эмулятор / JTAG недоступен, узнайте, как использовать резервный последовательный порт (или, может быть, даже использовать битовый штифт для создания последовательного порта) для канала отладки, с помощью некоторых простых команд просмотра / поиска памяти.

1
ответ дан 3 December 2019 в 13:23
поделиться

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

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

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

3
ответ дан 3 December 2019 в 13:23
поделиться

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

4
ответ дан 3 December 2019 в 13:23
поделиться

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

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

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

1
ответ дан 3 December 2019 в 13:23
поделиться

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

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

  • Дизайн для тестирования. Когда вы работаете над проблемой, меняйте только одну вещь за один тест.
  • Вам необходимо понимать шины и интерфейсы, spi, i2c, usb, ethernet и т. Д. Интерфейс номер один, сегодня, вчера и завтра, uart, последовательный порт.
  • Этапы программирования вспышки.
  • Уловки, позволяющие не превращать продукт в кирпичи.
  • Загрузчики в целом.
  • Использование битов вышеупомянутых интерфейсов для различных семейств компонентов (разные микросхемы у продавцов разные представления о выводах io, подтягиваниях, направлении элементы управления и т. д.).
  • Поднимите плату и чип, вы, конечно, никогда не захотите загружать многие десятки тысяч строк кода программы с первого включите питание (подумайте, включен, выключен).
  • Как отлаживать продукт, не используя слишком много тестового оборудования (логических анализаторов и осциллографов), в то же время вам нужно научиться использовать область для отладки, вы далеко более ценно, если вам НЕ НУЖНО иметь в лаборатории техника или инженера с тобой.
  • Как бы вы перепрограммировали агрегат в полевых условиях? Что бы вы делаете, чтобы свести к минимуму человеческую ошибку при разрешении пользователю поля обновить агрегат? Не забывайте и о понижении уровня полей.
  • Что бы вы сделали, чтобы воспрепятствовать взлому (двоичные файлы и т. Д.).
  • Эффективное использование флэш-памяти / ROM (не изнашивайте один банк или секцию, не разбрасывайте износ или смотрите если вспышка делает это за вас).
  • Как и когда использовать сторожевой таймер.
  • Конечные автоматы, очень полезные с байтовыми потоками (последовательными и Ethernet), проектируют структуры пакетов, которые хорошо передаются и адаптированы к конечному автомату, и которые имеют заголовок и контрольную сумму или другая структура, которая гарантирует, что вы не интерпретируете частичные пакеты или случайные данные как хороший пакет.
13
ответ дан 3 December 2019 в 13:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: