Микроконтроллер
Создание приложения Blinky
Теперь скомпилируйте код и запустите его на своей плате. Помните, что у вас есть два варианта для этого:
Вариант А: Отладьте свою программу
Подключите плату к USB-порту, нажмите кнопку отладки и нажмите кнопку возобновления, крайнюю здесь слева (рис.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).
Теперь прокрутите вниз около строки 46 и наведите указатель мыши (не щелкайте) на любой символ в имени функции metal_gpio_get_device(). Вы увидите приятную функцию eclipse под названием hover, которая представляет собой большую всплывающую подсказку, показывающую предварительный просмотр определения функции. На самом деле, если вы наведете указатель мыши на всплывающую подсказку, вы получите полосы прокрутки для просмотра всего кода определения функции (рис.2.13).
Некоторые программисты находят эти предварительные просмотры всплывающих подсказок раздражающими или навязчивыми. Если вы хотите отключить их, вы можете сделать это, перейдя в "Окно" -> "Настройки" и набрав "hovers" в строке поиска (таким образом вы можете найти любые настройки). Среди результатов слева выберите тот, который находится в разделе C/C++ -> Редактор, и снимите флажок Комбинированный режим наведения курсора.
Некоторые объявления функций
Теперь мы вернемся к коду, щелкнем правой кнопкой мыши на любом символе в имени функции metal_gpio_get_device() рядом со строкой 46 и выберем Открыть объявление в контекстном меню (рис.2.15).
Вы увидите, что эта функция определена в gpio.c, в папке ./freedom-metal/src/. Наведите курсор на имя файла на вкладке, и вы увидите путь к нему во всплывающей подсказке (рис.2.16).
Теперь вернитесь к hello.c и откройте определение другой функции. На этот раз давайте откроем объявление для metal_gpio_disable_input(), и вы заметите кое-что, что может показаться странным. Пожалуйста, сохраняйте спокойствие и посмотрите на файл, в котором определена эта функция (рис.2.17):
Да, этот заголовочный файл содержит исполняемый код, но не пугайтесь: все в порядке. Обратите внимание, что все реализованные функции в этом файле являются встроенными функциями.
Ключевое слово __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 (рис.2.19):
Библиотека Freedom Metal на вашем компьютере
Библиотека Freedom Metal в папке вашего проекта
Напомним, что мы не устанавливали эти два флажка при создании обоих проектов Freedom E SDK (рис.2.20):
При наведении курсора на эти флажки отображаются всплывающие подсказки, объясняющие, что, если их не устанавливать, создается локальная копия библиотек в каталоге вашего проекта. Это означает, что у вас есть копия исходных файлов и документации в папках вашего проекта. Здесь у нас есть документация в папке проекта Blinky, которая начинается с файла index.html (рис.2.21):
Библиотека Freedom Metal в Freedom Studio
Библиотека Freedom Metal интегрирована в Freedom Studio, поскольку она поддерживает все микропроцессоры и микроконтроллеры SiFive. Благодаря этому вы можете легко найти его документацию в меню "Справка" (рис.2.22).
Как вы можете видеть, меню "Справка" содержит множество других полезных документов и ссылок. Найдите минутку, чтобы изучить те, которые кажутся вам интересными.
Итоги лекции
Отлично! Вы справились с этой лекцией.
Приобретенные вами навыки сразу же пригодятся, когда вы начнете писать свои собственные приложения.
- Теперь вы знаете, где искать любую необходимую вам информацию в документации.
- Вы знаете некоторые основные сведения о микроконтроллере FE310.
- Вы также узнали, как найти определение любой функции, используя специальные возможности Freedom Studio.
- Мы рассмотрели 3 способа доступа к документации библиотеки Freedom Metal.
Не стесняйтесь возвращаться к этому материалу, если вам понадобится освежить его в памяти в будущем.