Глава 1: Введение ================= В этой главе мы сделаем первые шаги в программировании на языке **Си** на вашей **Raspberry Pi Zero 2 W**. Мы подготовим операционную систему, установим все необходимые инструменты и, конечно же, напишем и запустим нашу самую первую программу. Этот процесс поможет вам понять, как выглядит цикл разработки программы на Си, от написания кода до его выполнения. --- Подготовка Raspberry Pi ----------------------- Прежде чем начать писать код, нам нужно подготовить нашу миниатюрную, но мощную Raspberry Pi Zero 2 W. Эти шаги гарантируют, что у вас будет чистая, эффективная среда для разработки. 1. **Установите Raspberry Pi OS Lite (без графики)** на SD-карту через [Raspberry Pi Imager](https://www.raspberrypi.com/software/). * **Почему "Lite" и без графики?** Версия "Lite" потребляет меньше ресурсов (оперативной памяти и процессорного времени) и занимает меньше места на SD-карте, что идеально для Raspberry Pi Zero 2 W с ее ограниченными возможностями. Разработка на Си часто не требует графического интерфейса, а подключение по SSH позволяет работать удаленно с любого компьютера. * **Raspberry Pi Imager:** Это официальный инструмент, который упрощает процесс записи образа операционной системы на SD-карту. Вы можете найти его на официальном сайте Raspberry Pi. 2. **Подключитесь по SSH** или откройте терминал, если у вас есть экран. * **SSH (Secure Shell):** Это безопасный сетевой протокол, который позволяет вам управлять Raspberry Pi удаленно с вашего основного компьютера через командную строку. Это очень удобно, так как вам не нужен дополнительный монитор, клавиатура или мышь для Pi. Для подключения вам понадобится IP-адрес вашей Raspberry Pi и логин/пароль (по умолчанию `pi`/`raspberry`). * **Терминал:** Если вы подключили монитор и клавиатуру к вашей Pi, вы можете работать прямо в терминале операционной системы. 3. **Обновите систему:** .. code-block:: bash sudo apt update && sudo apt upgrade * **`sudo`:** Это команда, которая позволяет выполнять другие команды с правами суперпользователя (администратора). Обновление системы требует таких прав. * **`apt update`:** Эта команда обновляет список доступных пакетов в репозиториях (хранилищах программного обеспечения). Она не скачивает сами пакеты, а лишь их метаданные. * **`apt upgrade`:** Эта команда скачивает и устанавливает новые версии всех установленных пакетов, для которых доступны обновления. * **`&&`:** Этот оператор означает "и". Он гарантирует, что `apt upgrade` будет выполнен только в том случае, если `apt update` завершился успешно. Это хорошая практика для последовательных команд. * **Зачем обновлять?** Регулярное обновление системы гарантирует, что у вас установлены самые свежие версии программ и исправлены известные ошибки безопасности. --- Установка компилятора `gcc` --------------------------- Для того чтобы ваша Raspberry Pi "поняла" код, который вы напишете на языке Си, ей нужен специальный инструмент — **компилятор**. Компилятор — это программа, которая переводит ваш высокоуровневый код (который вы пишете) в низкоуровневый машинный код, понятный процессору. Чтобы компилировать программы на C, установим **GNU Compiler Collection (GCC)**. Это стандартный и самый распространённый набор компиляторов для различных языков, включая Си. .. code-block:: bash sudo apt install build-essential * **`build-essential`:** Это метапакет, который включает в себя не только `gcc` (компилятор Си), но и другие необходимые инструменты для компиляции программ, такие как `g++` (компилятор C++), `make` и `dpkg-dev`. Установка этого пакета гарантирует, что у вас есть всё необходимое для сборки большинства программ из исходников. Проверим установку: .. code-block:: bash gcc --version * Эта команда выведет версию установленного компилятора `gcc`. Если вы видите номер версии (например, `gcc (Raspbian 10.2.1-6+rpi1) 10.2.1`), значит, установка прошла успешно. --- Первая программа: hello.c ------------------------- Теперь, когда ваша Raspberry Pi готова, а компилятор установлен, давайте напишем нашу первую программу! Традиционно, первой программой является "Hello, World!", которая просто выводит сообщение на экран. Создайте файл `hello.c`: * Вы можете использовать любой текстовый редактор в терминале, например `nano` (наберите `nano hello.c` и нажмите Enter). После ввода кода сохраните файл, нажав `Ctrl+X`, затем `Y` и `Enter`. .. code-block:: c #include // Это "директива препроцессора". Она включает стандартную библиотеку ввода/вывода (Standard Input/Output). Без нее мы не сможем использовать функцию printf. int main() { // Это главная функция программы. Выполнение любой программы на Си начинается именно с функции main(). printf("Привет, Raspberry Pi!\\n"); // Функция printf() используется для вывода текста на экран (в консоль). // Символ '\n' — это "последовательность экранирования", которая означает переход на новую строку. // Без нее следующий вывод появился бы в той же строке. return 0; // Возвращаем 0, чтобы показать операционной системе, что программа завершилась успешно, без ошибок. } * **Комментарии в коде:** Обратите внимание на строки, начинающиеся с `//`. Это **комментарии**. Комментарии игнорируются компилятором и служат только для того, чтобы помочь людям понять код. Они очень важны для документирования вашей работы! * **Синтаксис Си:** Си — это язык с **чувствительностью к регистру** (например, `main` и `Main` — это разные вещи), и он использует **точку с запятой** (`;`) в конце большинства инструкций. **Фигурные скобки** (`{ }`) используются для обозначения блоков кода (например, тело функции `main`). Скомпилируйте и запустите: .. code-block:: bash gcc hello.c -o hello ./hello * **`gcc hello.c -o hello`:** * `gcc`: Запускаем компилятор. * `hello.c`: Указываем имя нашего исходного файла. * `-o hello`: Это **флаг** (опция) компилятора. Он говорит `gcc` назвать сгенерированный исполняемый файл `hello`. Если бы мы не использовали `-o`, исполняемый файл по умолчанию назывался бы `a.out`. * **`./hello`:** * `./`: Указывает операционной системе, что исполняемый файл `hello` находится в текущем каталоге. Это необходимо для запуска программ, находящихся не в стандартных системных путях. * `hello`: Запускает скомпилированную программу. .. note:: Флаг `-o hello` говорит компилятору назвать исполняемый файл `hello`. Вывод: .. code-block:: none Привет, Raspberry Pi! Поздравляем! Вы только что успешно скомпилировали и запустили свою первую программу на C на вашей Raspberry Pi Zero 2 W. Это фундаментальный шаг в мире встроенного программирования и работы с аппаратным обеспечением! --- Что дальше? ------------- Теперь, когда вы освоили основы настройки и запуска простейшей программы, пришло время углубиться в сам язык Си. Следующий шаг — разобраться с **переменными** и **арифметикой** в языке C. Вы узнаете, как хранить данные в памяти, как выполнять математические операции и как ваш код может стать интерактивным. Дополнительные ресурсы: - `man gcc` — справочник по компилятору `gcc`. Введите эту команду в терминале, чтобы получить подробную информацию. - `man printf` — документация по функции `printf`. Это очень мощная функция, и `man` страница покажет вам все ее возможности форматирования.