Существует несколько возможных решений:
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.
Конечно, есть и много других способов записи и создания файлов.
Конкретные концепции, такие как,
Используйте ссылки, которые я даю в качестве концепций,
пожалуйста, свяжитесь с нами, чтобы узнать больше.
Я бы изучил электронику настоящих микросхем. Узнайте, как они работают внутри (например, архитектура), взаимодействуют с периферийными устройствами, электрическими и временными характеристиками и т. Д.
По сути, прочтите лист данных от начала до конца несколько раз и изучите все, что вы раньше не видели / не использовали.
Кстати, с какими чипами вы работаете?
Подобно тому, что Брайан сказал , узнайте, как создавать модульные тесты и автоматические сборки .
Эти навыки полезны для инженеров-программистов всех уровней. Они помогут улучшить качество вашего кода, а также упростят рефакторинг и улучшение базы кода.
Правка: Я забыл упомянуть разработку на основе моделей. Сегодня алгоритмы управления часто реализуются как своего рода автомат, из которого впоследствии генерируется код C. Коммерчески доступные инструменты - это, например, MATLAB / Simulink , ASCET или SCADE .
.Хороший вопрос. Некоторые из них не были упомянуты ...
Изучите различные варианты достижения низкоуровневой многозадачности. От базовых циклических (без вытесняющих) планировщиков с тактами времени от аппаратного таймера до вытесняющей RTOS. Узнайте, зачем вам может понадобиться ОСРВ, а почему нет. Если вы используете RTOS, узнайте, что новички с опытом работы на ПК, вероятно, склонны создавать слишком много задач.
Получение видимости внутренних компонентов для отладки может быть проблемой. Обычно экрана нет, поэтому не нужно бросать вызовы "printf" куда угодно. Эмулятор или интерфейс JTAG идеально подходят - вы можете устанавливать точки останова и пошагово выполнять свою программу (при условии, что остановка микропрограммы не сводит оборудование с ума, как размахивание рукой робота на полной скорости!). Если эмулятор / JTAG недоступен, узнайте, как использовать резервный последовательный порт (или, может быть, даже использовать битовый штифт для создания последовательного порта) для канала отладки, с помощью некоторых простых команд просмотра / поиска памяти.
так что не нужно бросать вызовы "printf" куда угодно. Эмулятор или интерфейс JTAG идеально подходят - вы можете устанавливать точки останова и пошагово выполнять свою программу (при условии, что остановка микропрограммы не сводит оборудование с ума, как размахивание рукой робота на полной скорости!). Если эмулятор / JTAG недоступен, узнайте, как использовать резервный последовательный порт (или, может быть, даже использовать битовый штифт для создания последовательного порта) для канала отладки, с помощью некоторых простых команд просмотра / поиска памяти. так что не нужно бросать вызовы "printf" куда угодно. Эмулятор или интерфейс JTAG идеально подходят - вы можете устанавливать точки останова и пошагово выполнять свою программу (при условии, что остановка микропрограммы не сводит оборудование с ума, как размахивание рукой робота на полной скорости!). Если эмулятор / JTAG недоступен, узнайте, как использовать резервный последовательный порт (или, может быть, даже использовать битовый штифт для создания последовательного порта) для канала отладки, с помощью некоторых простых команд просмотра / поиска памяти.Имея хорошее знакомство с указателями, проверки на этих языках мало что делают (например, переполнение буфера и тому подобное), цифровую электронику. Внутреннее устройство операционных систем также может помочь.
Узнайте, как материал представлен внутри, специально готовые структуры данных (предположим, вы не создадите свою собственную).
Прежде всего, много тренируйтесь. Это приносит вам гораздо больше, чем просто чтение;)
Если вы еще этого не сделали, я думаю, что каждый инженер-программист должен прочитать «Прагматичный программист» и код завершен. Я знаю, что они не относятся к низкоуровневому программированию, но у меня большой объем знаний, применимых ко всем субдисциплинам.
Получите себе копию книги MISRA-C . Первоначально он был написан представителями автомобильной промышленности и пытается сделать программное обеспечение, написанное на языке C, более надежным, применяя ряд (довольно большое количество!) Правил и рекомендаций.
Затем купите PC-Lint (или другой инструмент статического анализа), чтобы проверить ваш код на MISRA и другие правила.
Они особенно актуальны для низкоуровневого и встроенного C, так как они устраняют причины множества ошибок в таком программном обеспечении. , такие как проблемы, связанные с указателями, утечками памяти, целочисленным повышением (в книге MISRA есть целая глава), порядком байтов и неопределенным поведением.
Я вижу здесь много ответов на высокоуровневые операционные системы, но вы конкретно сказали о низком уровне.
Некоторые разрозненные мысли: