Опубликован: 24.11.2024 | Доступ: свободный | Студентов: 2 / 0 | Длительность: 05:47:00
Лекция 3:

Микроконтроллер

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >

Создание приложения Blinky

Теперь скомпилируйте код и запустите его на своей плате. Помните, что у вас есть два варианта для этого:

Вариант А: Отладьте свою программу

Подключите плату к USB-порту, нажмите кнопку отладки и нажмите кнопку возобновления, крайнюю здесь слева (рис.2.11):

Кнопки выполнения кода

Рис. 2.11. Кнопки выполнения кода

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

Если ваша конфигурация отладки недоступна, выберите ее, нажав на стрелку раскрывающегося списка кнопки Отладки, а затем выполните отладку конфигураций

Вариант Б: Загрузите программу на свою плату

Подключите плату к USB-порту и нажмите кнопку сборки (молоток). Как только приложение будет создано, извлеките hex-файл и скопируйте его на внешний диск вашей платы. Наконец, нажмите кнопку сброса на вашей плате. Если все пройдет хорошо, вы увидите, что светодиод мигает 1 раз в секунду (это частота 1 Гц).

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

Blinky Демо (Видео)

[Eduardo Corpe?o] Итак, давайте посмотрим, как это работает. Здесь у нас есть проект в Freedom Studio, и я нажму на кнопку отладки. Обратите внимание на всплывающую подсказку, которая гласит: Debug Blinky. А теперь я начну выполнение, нажав кнопку Возобновить. И обратите внимание, как мигает синий светодиод с частотой, по-видимому, в один герц. Вот оно, оно работает.

Доступ к объявлениям функций в Freedom Studio

Отлично! У нас есть работающая мигалка. Но откуда взялись эти функции? Ну, очевидно из включенных файлов stdio.h, time.h и metal/gpio.h, конечно. Но где находятся эти файлы?

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

Помните:

Объявления функций являются их прототипами, которые содержат информацию о типе их возвращаемого значения и параметрах.

Определения функций - это их реализации с точными строками кода на языке Си, которые описывают их работу.

Некоторые IDE проводят различие между объявлениями и определениями, в то время как другие этого не делают. В Freedom Studio можно увидеть только определения функций с помощью опции контекстного меню Open Declaration. Пожалуйста, примите во внимание тот факт, что термины "определение" и "объявление" используются взаимозаменяемо.

Вы можете развернуть любой раздел, дважды щелкнув по любой из его вкладок. Продолжайте и дважды щелкните на hello.c, чтобы развернуть исходный раздел. Чтобы восстановить его обратно, дважды щелкните на любой вкладке еще раз (рис.2.12).

Разверните исходный код на языке Си, дважды щелкнув по имени файла

Рис. 2.12. Разверните исходный код на языке Си, дважды щелкнув по имени файла

Теперь прокрутите вниз около строки 46 и наведите указатель мыши (не щелкайте) на любой символ в имени функции metal_gpio_get_device(). Вы увидите приятную функцию eclipse под названием hover, которая представляет собой большую всплывающую подсказку, показывающую предварительный просмотр определения функции. На самом деле, если вы наведете указатель мыши на всплывающую подсказку, вы получите полосы прокрутки для просмотра всего кода определения функции (рис.2.13).

Всплывающая подсказка по определению функции, также известная как hover

Рис. 2.13. Всплывающая подсказка по определению функции, также известная как hover

Некоторые программисты находят эти предварительные просмотры всплывающих подсказок раздражающими или навязчивыми. Если вы хотите отключить их, вы можете сделать это, перейдя в "Окно" -> "Настройки" и набрав "hovers" в строке поиска (таким образом вы можете найти любые настройки). Среди результатов слева выберите тот, который находится в разделе C/C++ -> Редактор, и снимите флажок Комбинированный режим наведения курсора.

Диалоговое окно настроек, показывающее, как отключить зависание

Рис. 2.14. Диалоговое окно настроек, показывающее, как отключить зависание

Некоторые объявления функций

Теперь мы вернемся к коду, щелкнем правой кнопкой мыши на любом символе в имени функции metal_gpio_get_device() рядом со строкой 46 и выберем Открыть объявление в контекстном меню (рис.2.15).

Как открыть объявление из контекстного меню

Рис. 2.15. Как открыть объявление из контекстного меню

Вы увидите, что эта функция определена в gpio.c, в папке ./freedom-metal/src/. Наведите курсор на имя файла на вкладке, и вы увидите путь к нему во всплывающей подсказке (рис.2.16).

Всплывающая подсказка с путем к исходному файлу

Рис. 2.16. Всплывающая подсказка с путем к исходному файлу

Теперь вернитесь к hello.c и откройте определение другой функции. На этот раз давайте откроем объявление для metal_gpio_disable_input(), и вы заметите кое-что, что может показаться странным. Пожалуйста, сохраняйте спокойствие и посмотрите на файл, в котором определена эта функция (рис.2.17):

Исполняемый код для функции в gpio.h, заголовочном файле

Рис. 2.17. Исполняемый код для функции в gpio.h, заголовочном файле

Да, этот заголовочный файл содержит исполняемый код, но не пугайтесь: все в порядке. Обратите внимание, что все реализованные функции в этом файле являются встроенными функциями.

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

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

Все остальные функции, используемые в функции main() нашего кода Blinky, находятся в gpio.h:

metal_gpio_disable_input()
metal_gpio_enable_output()
metal_gpio_disable_pinmux()
metal_gpio_set_pin()

Обратите внимание, что этот файл находится в папке ./bsp/install/include/metal/.

Библиотека Freedom Metal Library на GitHub

Вы можете найти все эти файлы в Freedom E SDK. Первым элементом на странице программного обеспечения SiFive является ссылка на репозиторий sifive/freedom-e-sdk на GitHub. Библиотеки, которые мы используем, находятся в папке ./freedom-metal. Затем исходные файлы находятся в папке ./src, а заголовочные файлы - в папке ./metal (рис.2.18):

Репозиторий библиотеки Freedom Metal на GitHub

Рис. 2.18. Репозиторий библиотеки Freedom Metal на GitHub

Внизу этой страницы вы можете найти документацию по библиотеке Freedom Metal (рис.2.19):

Документация библиотеки Freedom Metal в формате HTML на GitHub

Рис. 2.19. Документация библиотеки Freedom Metal в формате HTML на GitHub

Библиотека Freedom Metal на вашем компьютере

Библиотека Freedom Metal в папке вашего проекта

Напомним, что мы не устанавливали эти два флажка при создании обоих проектов Freedom E SDK (рис.2.20):

Два неустановленных флажка в мастере создания проекта

Рис. 2.20. Два неустановленных флажка в мастере создания проекта

При наведении курсора на эти флажки отображаются всплывающие подсказки, объясняющие, что, если их не устанавливать, создается локальная копия библиотек в каталоге вашего проекта. Это означает, что у вас есть копия исходных файлов и документации в папках вашего проекта. Здесь у нас есть документация в папке проекта Blinky, которая начинается с файла index.html (рис.2.21):

Расположение HTML-документации в папке проекта

Рис. 2.21. Расположение HTML-документации в папке проекта

Библиотека Freedom Metal в Freedom Studio

Библиотека Freedom Metal интегрирована в Freedom Studio, поскольку она поддерживает все микропроцессоры и микроконтроллеры SiFive. Благодаря этому вы можете легко найти его документацию в меню "Справка" (рис.2.22).

К HTML-документации можно легко получить доступ из меню справки

Рис. 2.22. К HTML-документации можно легко получить доступ из меню справки

Как вы можете видеть, меню "Справка" содержит множество других полезных документов и ссылок. Найдите минутку, чтобы изучить те, которые кажутся вам интересными.

Итоги лекции

Отлично! Вы справились с этой лекцией.

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

  • Теперь вы знаете, где искать любую необходимую вам информацию в документации.
  • Вы знаете некоторые основные сведения о микроконтроллере FE310.
  • Вы также узнали, как найти определение любой функции, используя специальные возможности Freedom Studio.
  • Мы рассмотрели 3 способа доступа к документации библиотеки Freedom Metal.

Не стесняйтесь возвращаться к этому материалу, если вам понадобится освежить его в памяти в будущем.

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >