Как начать писать программный код Си в ОС Linux (Руководство для начинающих)
Добрый день. Этот материал рассчитан на людей, будущих программистов, которые только начинают разбираться в программировании под ОС Linux. Я попробую здесь показать прямое руководство к действию на примере тех простых инструментов, которые использовал некогда сам при изучении Си в процессе знакомства с Linux. На самом деле, с теми или иными поправками, это руководство можно использовать в большинстве дистрибутивов. Руководство однозначно подходит для всех deb-based дистрибутивов.
С установкой ОС, как я полагаю, проблем у Вас уже не возникло. Этому процессу посвящены просто тысячи статей на профильных сайтах.
Итак: у Вас сейчас установлен дистрибутив ОС, как говорится, «из коробки». Перед глазами пособие для разработчика/учебник/просто_хорошая_книга по «Языку программирования Си». И никакой вменяемой, полноценной подробной информации о том, как же собственно откомпилировать и выполнить, написанный в книге, исходный код. Быстрый осмотр тематических ресурсов уже показал Вам, что, необходимо установить компилятор Си, запустить его с нужными параметрами и потом запустить компилированный бинарный код. Примерно с этого момента мы и начнём.
Язык Си. #010. Установка VSCode.
Установка компилятора
Я имею ввиду, что Вы скорее всего (бывший) пользователь ОС Windows и действия в чёрном/синем окошке при помощи клавиатуры оканчивались где-то на команде ping, кажутся неким таинством. Однако отмечу, что всё банально просто и текстовой интерфейс предоставляет намного более гибкие возможности (скорее всего Вы неоднократно Вы слышали это ранее). Приступим:
Я подразумеваю, что с понятием компиляции и о том что такое компилятор Вас уже познакомила правильная книга.
На этом этапе всё будет очень быстро и просто. Открываем терминал и пишем:
(На всякий случай: вставка в gnome-terminal ctrl+shift+v)
Сразу поясню, что текст слева от курсора — это приглашение командного интерпретатора и оно выглядит следующим образом:
Далее я буду указывать только команды интерпретатору без приглашения.
Данная строка «говорит» интерпретатору: «от имени суперпользователя запустить менеджер пакетов для установки пакета gcc».
Система попросит Вас ввести пароль суперпользователя и приступит к установке компилятора.
Если же он уже установлен, то менеджер пакетов apt просто укажет на это примерно следующим образом:
Установка редактора
Обычно с дистрибутивом Ubuntu поставляется весьма интересный текстовой редактор gedit . Однако в других дистрибутивах возможно придётся установить этот редактор:
Создание файла с исходным кодом
Теперь пришло то самое время нашего классического «hello world»! Давайте сделаем это в стиле linux. Просто наберите в консоли:
Более подробно Вы обязательно прочитайте в профильных ресурсах и в документации, я только отмечу, что символ «тильда» возвращает полный путь к домашнему каталогу пользователя ОС. Соответственно будет создан файл в вашем домашнем каталоге с указанным именем.
КАК ЧИТАТЬ И ПОНИМАТЬ С/C++ КОД?
И далее наш программный код на языке Си в редакторе:
(Стоит отметить, что в редакторе gedit есть подсветка синтаксиса для различных языков программирования. Переключить режимы подсветки можно в нижней части окна редактора.)
https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8
Не забываем сохранить изменения нажатием ctrl+s. Обратите внимание, что вопросов об имени файла не последовало, так как имя было уже указано параметром при запуске редактора из командной строки терминала.
Компиляция и запуск
Закрываем окно редактора нажатием Alt+F4 и запустим же то сокровенное ради чего все тут и собрались:
И в ответ только новое приглашение. В отличие от стиля в ОС Windows, когда консоль, жутко подробно по-умолчанию, комментирует выполняемые действия — большинство программ в ОС семейства *nix сообщают только об исключительных ситуациях, ошибках и тому подобных вещах. То есть если «в ответ тишина» — то всё прошло хорошо.
Теперь в домашнем каталоге у нас появился файл a.out — он и есть файл с исполнимым кодом.
Для запуска этого файла на исполнение — назначим ему атрибут: «исполнимый»:
и теперь запустим получившееся приложение:
(Для запуска исполнимого файла интерпретатору требуется указать полный путь к файлу. Как в случае с «тильдой» символ «точка» возвращает полный путь к текущему каталогу. В данном конкретном случае правомерно так же запустить через
/a.out Это не имеет значения здесь, так как файл создан в домашнем каталоге пользователя.)
И мы получаем вывод в терминале:
Для выполнения всех повторных действий: изменение кода и снова компиляция, — Вы можете не вводить все эти команды каждый раз заново, а использовать стрелки вверх и вниз, для быстрого выбора команд из истории. И, кстати, вывод списка истории всех введённых команд можно выполнить командой (на самом деле программой) history .
Минутка автоматизации
Теперь приступим к очень интересному моменту связанному с творчеством в духе *nix. Каждый раз вводить много скучных команд неинтересно, возможно, даже вредно. Мы расширим функционал редактора gedit и доработаем его «напильником» до состояния примитивной среды разработки: запустим gedit и откроем меню параметров,

Главное меню gedit
где на вкладке «Расширения» добавляем «Внешние инструменты»

И затем, из того же главного меню gedit выбираем «Управление внешними инструментами».

«Управление внешними инструментами»
Как Вы уже поняли — здесь можно выполнить доработку функциональности текстового редактора. Создадим новый инструмент: «Компиляция и запуск», В качестве вывода используем нижнюю область редактора. Инструмент назначим для файлов C и C++. Назначим клавишу F5 (дело вкуса) на применение инструмента и собственно сам код инструмента в виде скрипта bash:
Разберёмся в том, что тут происходит:
#!/bin/bash — указание командного интерпретатора для выполнения скрипта.
gcc -o a.out $GEDIT_CURRENT_DOCUMENT_NAME — здесь мы запускаем компилятор, где в параметре -o указываем имя выходного файла. Пускай он будет таким же как и по-умолчанию.
$GEDIT_CURRENT_DOCUMENT_NAME — через эту переменную gedit передаёт имя файла.
Дальше Вы уже знаете — назначение атрибута «исполнения», запуск файла и потом:
rm ./a.out — удаление созданного исполнимого файла.
Попробуем инструмент в деле:

Теперь можно продолжать изучать пособие для разработчика/учебник/просто_хорошую_книгу по «Языку программирования Си» на практике.
На самом деле в ОС Linux полно возможностей по доработке и использованию различного ПО. Само ПО является максимально гибким. Необязательно использовать предложенные мною средства, скорее методы, разработки.
В дальнейшем Вам обязательно понадобятся более серьёзные средства. А на первое время Вы можете дополнительно посмотреть другие редакторы, вплоть до больших и серьёзных сред разработки. Однако обязательно обратите внимание на редактор vim.
Похожие публикации:
- Как очистить массив char c
- Как сделать роблокс красивым
- 2 какие типы командных оболочек вы знаете
- Expected primary expression before token что значит
Источник: amdy.su
Что такое IDE? Обзор 10 лучших IDE
Независимо от того, являетесь ли вы опытным разработчиком или только учитесь программировать, важно знать обо всех новых и уже существующих интегрированных средах разработки . Ниже приведен список 10 наиболее популярных IDE .
Что такое IDE (интегрированная среда разработки) и чем она отличается от текстового редактора?
IDE (интегрированная среда разработки) — это не просто текстовый редактор. В то время как текстовые редакторы для кода, такие как Sublime или Atom , предлагают множество удобных функций, таких как подсветка синтаксиса, настраиваемый интерфейс и расширенные средства навигации, они позволяют только писать код. Для создания функционирующих приложений как минимум нужен компилятор и отладчик.
IDE (integrated development environment) включает в себя эти компоненты, как и ряд других. Некоторые из них поставляются с дополнительными инструментами для автоматизации, тестирования и визуализации процесса разработки. Термин «интегрированная среда разработки» означает, что предоставляется все необходимое для превращения кода в функционирующие приложения.
Ознакомьтесь с приведенным ниже списком функций и недостатков каждой из 10 лучших IDE .
Microsoft Visual Studio

Microsoft Visual Studio — это интегрированная среда разработки , цена которой варьируется от $699 до $2900 . Множество версий этой IDE способны создавать все типы программ, начиная от веб-приложений и заканчивая мобильными приложениями, видеоиграми. Эта линейка программного обеспечения включает в себя множество инструментов для тестирования совместимости. Благодаря своей гибкости Visual Studio является отличным инструментом для студентов и профессионалов.
Поддерживаемые языки: Ajax, ASP.NET, DHTML, JavaScript, JScript, Visual Basic, Visual C#, Visual C++, Visual F#, XAML и другие .
- Огромная библиотека расширений, которая постоянно увеличивается;
- IntelliSense ;
- Настраиваемая панель и закрепляемые окна;
- Простой рабочий процесс и файловая иерархия;
- Статистика мониторинга производительности в режиме реального времени;
- Инструменты автоматизации;
- Легкий рефакторинг и вставка фрагментов кода;
- Поддержка разделенного экрана;
- Список ошибок, который упрощает отладку;
- Проверка утверждения при развертывании приложений с помощью ClickOnce , Windows Installer или Publish Wizard.
Недостатки : поскольку Visual Studio IDE является супертяжелой , для открытия и запуска приложений требуются значительные ресурсы. Поэтому на некоторых устройствах внесение простых изменений может занять много времени. Для простых задач целесообразно использовать компактный редактор или средство разработки PHP .
Интегрированная среда программирования NetBeans

Бесплатная IDE для C (и многих других языков программирования) с открытым исходным кодом. Подходит для редактирования существующих проектов или создания новых. NetBeans предлагает простой drag-and-drop интерфейс, который поставляется с большим количеством удобных шаблонов проектов. Среда в основном используется для разработки Java приложений, но можно устанавливать пакеты, поддерживающие другие языки.
Поддерживаемые языки программирования: C, C++, C++ 11, Fortran, HTML 5, Java, PHP и другие .
- Интуитивный drag-and-drop интерфейс;
- Динамические и статические библиотеки;
- Интеграция нескольких сессий GNU-отладчика с поддержкой кода;
- Возможность осуществлять удаленное развертывание;
- Совместимость с платформами Windows, Linux, OS X и Solaris;
- Поддержка Qt Toolkit;
- Поддержка Fortran и Assembler;
- Поддержка целого ряда компиляторов, включая CLang / LLVM, Cygwin, GNU, MinGW и Oracle Solaris Studio.
Недостатки: эта бесплатная среда разработки потребляет много памяти, поэтому может работать медленно на некоторых ПК.
PyCharm — лучшая среда разработки для Python

PyCharm разработан командой Jet Brains . Пользователям предоставляется бесплатная версия Community Edition , 30-дневная бесплатная ознакомительная версия Professional Edition и годовая подписка за $213 — $690 на версию Professional Edition . Комплексная поддержка кода и анализ делают PyCharm лучшей IDE для Python-программистов .
Поддерживаемые языки: AngularJS, Coffee Script, CSS, Cython, HTML, JavaScript, Node.js, Python, TypeScript.
- Совместимость с операционными системами Windows, Linux и Mac OS;
- Поставляется с Django IDE;
- Легко интегрируется с Git, Mercurial и SVN;
- Настраиваемый интерфейс с эмуляцией VIM;
- Отладчики JavaScript, Python и Django;
- Поддержка Google App Engine.
Недостатки: пользователи жалуются, что эта среда разработки Python содержит некоторые ошибки, такие как периодически не работающая функция автоматического заполнения, что может доставить определенные неудобства.
IntelliJ IDEA

Еще одна IDE , разработанная Jet Brains . Она предлагает пользователям бесплатную версию Community Edition , 30-дневную бесплатную ознакомительную версию Ultimate Edition и годовую подписку на версию Ultimate Edition за $533 — $693 . IntelliJ IDEA поддерживает Java 8 и Java EE 7 , обладает обширным инструментарием для разработки мобильных приложений и корпоративных технологий для различных платформ. Если говорить о цене, IntelliJ является прекрасным вариантом из-за огромного списка функций.
Поддерживаемые языки программирования: AngularJS, CoffeeScript, HTML, JavaScript, LESS, Node JS, PHP, Python, Ruby, Sass, TypeScript и другие.
- Расширенный редактор баз данных и дизайнер UML ;
- Поддержка нескольких систем сборки;
- Пользовательский интерфейс тестового запуска приложений;
- Интеграция с Git ;
- Поддержка Google App Engine , Grails , GWT , Hibernate , Java EE , OSGi , Play , Spring , Struts и других;
- Встроенные средства развертывания и отладки для большинства серверов приложений;
- Интеллектуальные текстовые редакторы для HTML , CSS и Java ;
- Интегрированный контроль версий;
- AIR Mobile с поддержкой Android и iOS .
Недостатки: эта среда разработки JavaScript требует времени и усилий на изучение, поэтому может оказаться не лучшим вариантом для начинающих. В ней есть много сочетаний горячих клавиш, которые нужно просто запомнить. Некоторые пользователи жалуются на неуклюжий интерфейс.
Eclipse

Среда программирования C (поддерживающая и многие другие языки программирования) с открытым исходным кодом. Этот инструмент может оказаться полезен, как для новичков, так и для профессионалов. Первоначально создаваемый как среда для Java-разработки сегодня Eclipse имеет широкий диапазон возможностей благодаря большому количеству плагинов и расширений. Помимо средств отладки и поддержки Git / CVS , стандартная версия Eclipse поставляется с инструментами Java и Plugin Development Tooling . Если вам этого недостаточно, доступно много других пакетов: инструменты для построения диаграмм, моделирования, составления отчетов, тестирования и создания графических интерфейсов. Клиент Marketplace Eclipse открывает пользователям доступ к хранилищу плагинов и информации.
Поддерживаемые языки: C, C++, Java, Perl, PHP, Python, Ruby и другие.
- Множество пакетных решений, обеспечивающих многоязычную поддержку;
- Улучшения Java IDE , такие как иерархические представления вложенных проектов;
- Интерфейс, ориентированный на задачи, включая уведомления в системном трее;
- Автоматическое создание отчетов об ошибках;
- Параметры инструментария для проектов JEE ;
- Интеграция с JUnit .
Недостатки: многие параметры этой среды разработки могут запугать новичков. Eclipse не обладает всеми теми функциями, что и IntelliJ IDEA , но является IDE с открытым исходным кодом.
Code::Blocks

Еще одна среда разработки C с открытым исходным кодом. Гибкая IDE , которая стабильно работает на всех платформах, поэтому она отлично подходит для разработчиков, которые часто переключаются между рабочими пространствами. Встроенный фреймворк позволяет настраивать эту IDE под свои потребности.
Поддерживаемые языки: C, C++, Fortran .
- Простой интерфейс с вкладками открытых файлов;
- Совместимость с Linux , Mac и Windows ;
- Написана на C++ ;
- Не требует интерпретируемых или проприетарных языков программирования;
- Множество встроенных и настраиваемых плагинов;
- Поддерживает несколько компиляторов, включая GCC, MSVC ++ , clang и другие;
- Отладчик с поддержкой контрольных точек;
- Текстовый редактор с подсветкой синтаксиса и функцией автоматического заполнения;
- Настраиваемые внешние инструменты;
- Простые средства управления задачами, идеально подходящие для совместной работы.
Недостатки: относительно компактная IDE для СИ, поэтому она не подходит для крупных проектов. Это отличный инструмент для новичков, но продвинутые программисты могут быть разочарованы ее ограничениями.
Aptana Studio 3

Самая мощная из IDE с открытым исходным кодом. Aptana Studio 3 значительно улучшена по сравнению с предыдущими версиями. Поддерживает большинство спецификаций браузеров. Поэтому пользователи этой IDE могут с ее помощью быстро разрабатывать, тестировать и развертывать веб-приложения.
Поддерживаемые языки: HTML5, CSS3, JavaScript, Ruby, Rails, PHP и Python .
- Подсказки для CSS , HTML , JavaScript , PHP и Ruby ;
- Мастер развертывания с простой настройкой и несколькими протоколами, включая Capistrano , FTP , FTPS и SFTP ;
- Возможность автоматической установки созданных приложений Ruby и Rails на серверы хостинга;
- Интегрированные отладчики для Ruby и Rails и JavaScript ;
- Интеграция с Git ;
- Простой доступ к терминалу командной строки с сотнями команд;
- Строковые пользовательские команды для расширения возможностей.
Недостатки: есть проблемы со стабильностью, и она работает медленно. Поэтому профессиональные разработчики могут предпочесть более мощную HTML среду разработки.
Komodo

Предлагает бесплатную 21-дневную ознакомительную версию, полная версия стоит $99 – $1615 в зависимости от редакции и лицензии. Komodo поддерживает большинство основных языков программирования. Удобный интерфейс позволяет осуществлять расширенное редактирование, а небольшие полезные функции, такие как проверка синтаксиса и одноступенчатая отладка, делают Komodo одной из самых популярных IDE для веб и мобильной разработки.
Поддерживаемые языки: CSS, Go, JavaScript, HTML, NodeJS, Perl, PHP, Python, Ruby, Tcl и другие.
- Настраиваемый многооконный интерфейс;
- Интеграция контроля версий для Bazaar , CVS , Git , Mercurial , Perforce и Subversion ;
- Профилирование кода Python и PHP ;
- Возможность развертывания в облаке благодаря Stackato PaaS ;
- Графическая отладка для NodeJS , Perl , PHP , Python , Ruby и Tcl ;
- Автоматическое заполнение и рефакторинг;
- Стабильная производительность на платформах Mac , Linux и Windows
Недостатки: бесплатная версия среды разработки программного обеспечения не включает в себя все функции. В то же время премиум версия явно стоит своих денег.
RubyMine

Еще одна премиум IDE , разработанная компанией Jet Brains . Предлагается 30-дневная бесплатная ознакомительная версия, полная версия стоит $210 — $687 в год. Удобная навигация, логичная организация рабочего процесса и совместимость с большинством платформ делают RubyMine одним из популярных инструментов для разработчиков.
Поддерживаемые языки: CoffeeScript, CSS, HAML, HTML, JavaScript, LESS, Ruby и Rails, Ruby и SASS.
- Сниппеты кода, автоматическое заполнение и автоматический рефакторинг;
- Дерево проектов, которое позволяет быстро анализировать код;
- Схема модели Rails ;
- Просмотр проекта Rails ;
- RubyMotion поддерживает разработку под iOS ;
- Поддержка стека включает в себя Bundler , pik , rbenv , RVM и другие;
- Отладчики JavaScript , CoffeeScript и Ruby ;
- Интеграция с CVS , Git , Mercurial , Perforce и Subversion .
Недостатки среды разработки: чтобы RubyMine работала бесперебойно, компьютеру требуется не менее 4 ГБ оперативной памяти. Некоторые пользователи также жалуются на отсутствие опций настройки GUI .
Xcode

Набор инструментов для создания приложений под iPad , iPhone и Mac . Интеграция с Cocoa Touch делает работу в среде Apple простой, вы можете включать такие сервисы, как Game Center или Passbook , одним кликом мыши. Встроенная интеграция с сайтом разработчика помогает создавать полнофункциональные приложения « на лету ».
Поддерживаемые языки: AppleScript, C, C++, Java, Objective-C.
- Элементы пользовательского интерфейса можно легко связать с кодом реализации;
- Компилятор Apple LLVM сканирует код и предоставляет рекомендации по решению проблем производительности;
- Панель навигации обеспечивает быстрое перемещение между разделами;
- Interface Builder позволяет создавать прототипы без написания кода;
- Пользовательский интерфейс и исходный код можно подключить к сложным прототипам интерфейсов всего за несколько минут;
- Редактор версий включает в себя файлы журнала и хронологии;
- Распределение и объединение процессов удобно при командной работе;
- Test Navigator позволяет быстро тестировать приложения в любой момент разработки;
- Автоматически создает, анализирует, тестирует и архивирует проекты благодаря интеграции с сервером OX X ;
- Рабочий процесс настраивается с помощью вкладок, поведения и фрагментов;
- Библиотека инструментов и каталог ресурсов.
Недостатки инструментальной среды разработки: для запуска Xcode нужен компьютер от компании Apple . А для загрузки создаваемых приложений в Apple Store — лицензия разработчика.
Выбор подходящей IDE
Какая IDE окажется лучшей именно для вас зависит от используемой операционной системы, языка программирования и тех платформ, которые вы хотите развивать.
Пропустили ли мы какие-нибудь важные IDE ? Напишите об этом в комментариях.
Вадим Дворников автор-переводчик статьи « Best IDE Software – a List of the Top 10 »
Источник: www.internet-technologies.ru
Простая программа для AVR микроконтроллера на языке Си
В прошлой статье мы разобрали строение программы на AVR Ассемблере, собрали несложную схему и выполнили прошивку микроконтроллера. К микроконтроллеру были подключены два светодиода, которые мы заставили попеременно мигать.
Здесь мы разберем пример программы для AVR микроконтроллера на языке Си (C), которая будет использовать ту же принципиальную схему что и в примере с программой на Ассемблере, так что для работы нам пригодится тот-же макет что и в прошлой статье. Мигать светодиоды мы заставим не просто попеременно, а немножко по другому и с дополнительными задержками по времени.
Кратко о языке программирования Си
Язык Си является компилируемым статически типизированным языком программирования, который был разработан сотрудниками Bell Labs — Кеном Томпсоном (Ken Thompson) и Деннисом Ритчи (Dennis MacAlistair Ritchie) в начале 1970-х годов.
Си — универсальный язык программирования с современным набором операторов и типов, который также позволяет работать напрямую с памятью, адресами и минимальными единицами данных.
Изначально язык Си использовался в операционной системе Unix для написания приложений и самого ядра ОС. Позже он был портирован и на другие платформы, что принесло ему очень широкую популярность.
При разработке программ на языке Си для AVR микроконтроллеров используется набор библиотек avr-libc и компилятор avr-gcc, с установкой которых в Linux мы уже разобрались в одной из прошлых статей.
Исходный код программы на языке Си
Вполне может быть что вы никогда не писали программ на языке Си — в этом нет ничего страшного. Для того чтобы написать первую программу на AVR C и провести с ней эксперименты вполне достаточно базовых знаний по работе с консолью в Linux. Позже вы сами сможете найти недостающую информации и изучить все необходимое самостоятельно.
Приведенный ниже код программы на Си будет выполнять следующие действия (алгоритм):
- Зажечь светодиод 1 и погасить его с небольшой задержкой (два раза подряд);
- Выполнить более длительную задержку;
- Зажечь светодиод 2 и погасить его с небольшой задержкой (два раза подряд);
- Начать все сначала.
Вот исходный код программы который работает по приведенному выше алгоритму:
/* Светодиодная мигалка на микроконтроллере ATmega8 * https://ph0en1x.net */ #define F_CPU 1000000UL // укажем компилятору частоту ЦПУ #include // Подключим файл io.h #include // Подключим файл delay.h void main(void) < // начало программы // — установим параметры — int delay_ms_1 = 100; // задержка для светодиода int delay_ms_2 = 300; // задержка между светодиодами // — настроим пины порта — DDRD |= (1 >
Рассмотрим все в исходном коде более подробно.
Строки или части строк что начинаются с двух слешей «//», а также блоки текста что начинается с символов «/*» и заканчивается символами «*/» — это комментарии. В комментариях может размещаться полезная информация и примечания.
Строкой «#define F_CPU 1000000UL» мы объявляем константу, которая говорит компилятору что частота ЦПУ нашего микроконтроллера равна 1000000Гц (1МГц). Данное объявление необходимо для правильной работы некоторых функций, в нашей программе это функция «_delay_ms». В моем примере микроконтроллер ATmega8 без установки битов-фьюзов по умолчанию работает на внутреннем тактовом RC-генераторе с частотой 1МГц.
Строка «#include » производит подключение файла «io.h» к текущему файлу исходного кода, а строка «#include » — подключает файл «delay.h».
Узнать где размещаются данные файлы в Linux можно с помощью программы «locate». Установим ее и обновим индекс файлов для поиска:
sudo apt-get install locate sudo updatedb
В качестве примера, выполним поиск путей где размещаются файлы «io.h» и оставим только те результаты, в которых содержится сочетание символов «avr»:
locate io.h | grep avr
В результате получим список путей ко всем файлам где в имени встречается «io.h», а также путь содержит подстроку «avr»:
/usr/lib/avr/include/stdio.h /usr/lib/avr/include/avr/io.h /usr/share/doc/avr-libc/avr-libc-user-manual/group__avr__io.html /usr/share/doc/avr-libc/avr-libc-user-manual/group__avr__stdio.html /usr/share/man/man3/io.h.3avr.gz /usr/share/man/man3/stdio.h.3avr.gz
Здесь мы можем видеть что нужный нам файл находится по пути «/usr/lib/avr/include/avr/io.h». Посмотрев его содержимое можно увидить что он содержит в себе включение других файлов с определениями (AVR device-specific IO definitions), которые в свою очередь зависят от выбранного нами типа микроконтроллера.
Тип микроконтроллера (MCU Type) в даном случае указывается как параметр «-mmcu=atmega8» (для ATmega8) при вызове команды-компилятора «avr-gcc».
В моем случае для микроконтроллера ATmega8 через файл «io.h» подключается следующий файл — «iom8.h» (Input Output Mega8), в нем хранятся все определения таких переменных как PD0, PD1, PB8, DDRD, DDRB, RAMSTART, RAMEND и много всего другого.
Файлы с определениями IO (io*.h) для каждого типа МК хранятся в директории по адресу «/usr/lib/avr/include/avr/», рекомендую зайти туда и посмотреть что в ней творится для более глубокого понимания.
Полистать содержимое файла iom8.h можно в редакторе nano, для этого выполним команду:
nano /usr/lib/avr/include/avr/iom8.h
Для поиска в редакторе nano используйте комбинацию клавиш CTRL+W (для запоминания: where, где).
Также используя команду «cat» можно вывести только те строчки, которые содержат в файле указанное сочетание символов или слово:
cat /usr/lib/avr/include/avr/iom8.h | grep RAM
Данная команда выведет вот такой текст:
#define RAMSTART (0x60) #define RAMEND 0x45F #define XRAMEND RAMEND
Таким образом можно посмотреть какие есть константы и определения в библиотеке avr-gcc для работы с операциями ввода-вывода(Input-Output), их значения и многое другое для вашего типа микроконтроллера!
Файл «delay.h» содержит в себе определения функций задержки, в частности там содержится код функции «_delay_ms», которую мы будем использовать в примере. Для просчета временной задержки такие функции используют константу «F_CPU», которую мы объявили раньше в начале кода.
Строкой «void main(void) » с левосторонней фигурной скобки начинается тело нашей программы и заканчивается оно правосторонней фигурной скобкой «>» в самом низу листинга. Таким образом мы объявили основную функцию «main» с которой начнется выполнение программы, тело функции взято в фигурные скобки, а ключевые слова «void» означают что функция не принимает и не возвращает никаких данных, в данном случае.
Важно знать что в языке Си символ точка с запятой «;» является специальным символом — пустым оператором (который ничего не выполняет) и используется для указанию компилятору что это конец команды.
В строчке «int delay_ms_1 = 100;» мы объявили новую переменную «delay_ms_1» с типом «int» (Integer, Целый тип, значения от -32768 до 32767) и присвоили ей значение 100. Служит она в нашей программе для установки задержки в миллисекундах при мелькании каждого из светодиодов.
В следующей строке «int delay_ms_2 = 300;» мы также выполнили инициализацию переменной, которая будет служить для установки времени задержки между мельканиями отдельных светодиодов — 300 миллисекунд.
Следующая команда в коде идентична предыдущей за исключением того что она устанавливает на вывод канал PD1 порта DDRD.
К каналам PD0 и PD1 (ножки 2 и 3 чипа) у нас подключены светодиоды, свечением которых мы и будем управлять.
Также данную запись можно представить вот так:
PORTD = PORTD | (1
Здесь мы присваиваем переменной PORTD содержимое этой же переменной, применив к ней битовую операцию «|» (логическое ИЛИ), в качестве аргумента которой выступает результат выражения «1 число один, биты которого сдвинуты на 0 (PD0 = 0) разрядов влево.
Дальше мы выполняем небольшую задержку по времени «_delay_ms(delay_ms_1);» вызывая функцию «_delay_ms» и передав ей в качестве аргумента переменную «delay_ms_1», которая уже содержит число 100.
Более развернуто данную строку можно записать так:
PORTD = PORTD (логическое И), в качестве второго аргумента которой передаем результат комплексного выражения «~(1 оператора инверсии «~» (смена значений всех бит на противоположные).
В следующих строках в коде мы снова выполняем установку (запись 1) и сброс (запись 0) бита PD0 в байте регистра для порта PORTD с установленной задержкой «delay_ms_1», чем мы заставляем светодиод подключенный к пину канала PD0 зажечься и погаснуть (мелькнуть, blink).
Строкой «_delay_ms(delay_ms_2);» выполняется более длительная задержка по времени с использованием значения переменной «delay_ms_2» которая выше получила значение 300 (задержка в 300 миллисекунд).
Дальше мы дважды производим установку и сброс бита PD1 (бит под номером 1 в байте регистра) в регистре порта PORTD, чем заставляем мелькать светодиод который подключен к пину канала PD1 порта PORTD микроконтроллера.
По завершению приведенных команд все начинается снова в бесконечном цикле «while (1)».
Самое сложное к пониманию здесь это, пожалуй, работа с установкой нужных битов в портах. Более подробно данная тема освещена в статье: Работа с регистрами AVR микроконтроллера на Си, битовые операции.
Компиляция и прошивка программы в МК
Для компиляции программы сохраним исходный код в файле под названием «leds_blinking.c». Если у вас уже настроена среда Geany то для компиляции достаточно нажать на панели инструментов кнопку «Compile».
Для компиляции файла с программой на Си в консоли нужно выполнить команду:
avr-gcc -mmcu=atmega8 -Os leds_blinking.c -o leds_blinking.o
В результате работы, если нет ошибок, получим объектный файл leds_blinking.o с которого нам нужно извлечь необходимые данные для прошивки нашего микроконтроллера (в моем случае ATmega8, параметр «-mmcu=atmega8»).
Для извлечения данных и построения файла прошивки в формате Intel Hex нужно нажать в Geany кнопку «Build». Из консоли получить нужный файл можно при помощи команды:
avr-objcopy -j .text -j .data -O ihex leds_blinking.o leds_blinking.hex
Теперь, когда у нас есть файл с прошивкой в формате Intel HEX останется записать его содержимое (прошить) во флешь-памяти микроконтроллера, выполнить эту операцию можно нажав в подготовленной нами среде Geany кнопку «Run or view current file» (Execute).
В консоли выполнить прошивку можно при помощи avrdude командой (для ATmega8 параметр «-p m8», программатор USBAsp «-c usbasp»):
avrdude -c usbasp -p m8 -P usb -U flash:w:leds_blinking.hex
Сразу после прошивки на МК будет послана команда сброса(RESET) и программа начнет выполняться в кристалле, о чем будут свидетельствовать помигивающие светодиоды. Также RESET можно выполнить и вручную, переподключив для этого питание к микроконтроллеру.
Желательно выполнять все шаги (компиляция+построение hex-файла + прошивка) поочередно и вести наблюдение за информацией что появляется в консоли или на информационной панели Geany. Это поможет обнаружить ошибки и замечания если что-то не будет работать так как нужно.
Документация по языку Си и AVR Си
Герберт Шилдт — Полный справочник по C: gerbert-shildt-c-complete-guide.zip (912Кб, HTML).
Это оцифрованные электронные версии книг с очень удобной навигацией, которые были найдены в сети. Все права на содержимое этих книг принадлежат их авторам.
По возможности купите себе хороший и свежий справочник по Си в бумажном виде для удобного обучения и работы.
Библиотека Си для AVR микроконтроллеров (AVR C Runtime Library) — https://savannah.nongnu.org/projects/avr-libc/
По приведенной выше ссылке можно почитать документацию (на английском языке) прямо на сайте или же скачать ее одним файлом в форматах HTML и PDF, там есть вся необходимая информация по использованию библиотеки avr-libc для программирования AVR микроконтроллеров.
Заключение
Добившись уверенной работы приведенного выше кода, попробуйте поэкспериментировать с ним. Например сделайте так чтобы каждый светодиод мелькал не по два раза, как в примере, а по три или четыре. Также поэкспериментируйте с задержками по времени.
В отличие от предыдущей программы на Ассемблере, здесь светодиоды мелькают немного по другому. Вот небольшая видео-демонстрация работы собранной схемы с прошитой программой на Си:
В этом видео программатор USBAsp уже отключен, а питание схемы на микроконтроллере осуществляется от батареи КРОНА с напряжением 9В через схему стабилизатора напряжения которая обеспечивает на выходе стабильные 5В.
Источник: ph0en1x.net
