Atmel studio добавить файл в проект
Использую atmel studio 6.2, нужно подключить файлы (asmroutine.h, asmroutine.s). Файлы добавил через (add->existing item). При сборки f7, выдает ошибку (undefined reference to). При этом, вместо asmroutine.s поставить asmroutine.cpp, ошибки нет. В чем дело?
volatile char m=5,d;
avr-gcc различает заглавные и прописные буквы в расширении файлов, причем для ассемблера .s и .S компилируются по-разному. к сожалению, сейчас не могу вспомнить, но какой-то вариант компилируется без поддержки макросов в стиле Си. рекомендую попробовать переименовать исходник - поменять регистр расширения ассемблерного файла._________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется.
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!
рекомендую попробовать переименовать исходник - поменять регистр расширения ассемблерного файла.Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет
Добавилextern "C"
char afun(char);
>
Проект собрался без ошибок, только пока не проверил. Не уверен пока, что все норм, т. к. понятия не имею зачем нужен extern "C".
Приглашаем 30 ноября всех желающих посетить вебинар о литиевых источниках тока Fanso (EVE). Вы узнаете об особенностях использования литиевых источников питания и о том, как на них влияют режим работы и условия эксплуатации. Мы расскажем, какие параметры важно учитывать при выборе литиевого ХИТ, рассмотрим «подводные камни», с которыми можно столкнуться при неправильном выборе, разберем, как правильно проводить тесты, чтобы убедиться в надежности конечного решения. Вы сможете задать вопросы представителям производителя, которые будут участвовать в вебинаре.
блин, вы бы сразу написали точное описание ошибки.
здесь ошибка! R24 должна быть ранее определенной константой, а не регистром! т.е. вот так было бы правильно:
и ошибка у вас именно на эту строку и эту "неопределенную ссылку" R24
_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется.
Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.
Да там тоже была ошибка, но компилятор на него указал только что, когда проект уже собрался. До этого он указывал на функцию afun. Я пробовал и пустую функцию использовать, таже ошибка была
А вот после добавления extern "C" исчезла именно ошибка undefined reference to afun
я собрал ваш проект в первоначальном виде после замены R24 на 24, прочее - 1 в 1 так, как вы его разместили в первом посте. т.е. в первоначальном виде других ошибок не было.
_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется.
Это краткое пошаговое руководство по созданию проекта в Atmel Studio. Мы разберем как создать проект, как добавить в него ASF библиотеки, как его скомпилировать и как записывать прошивку в микроконтроллер, используя аппаратный отладчик или программатор.
Речь пойдет о создании проекта для ARM микроконтроллера SAM3S, но аналогичным образом создаются проекты и для других микроконтроллеров фирмы Atmel - xmega, atmega, attiny
Подразумевается, что у вас уже установлена среда разработки. Но если это не так, то самое время сделать это. Переходите на сайт Atmel, регистрируйтесь и скачивайте Atmel Studio.
Выбираем в верхнем меню пункт File > New > Project. или нажимаем комбинацию кнопок Ctrl + Shift + N.
Откроется окно, в котором нужно задать шаблон проекта, имя и место его хранения. Выбираем C/C++ > User Board > User Board SAM3S. Имя и место сохранения указываем по своему желания. Я назвал свой проект Test.
Последнее поле в этом окне - Solution name. Solution или решение - это некий "контейнер", который включает в себя один или несколько проектов Atmel Studio (аналог workspace или рабочего пространства в IAR). Такое объединение удобно использовать, когда идет работа над несколькими смежными проектами.
Если поставить галочку Create directory for solution, то будет создана директория с именем решения и файлами решения, в которой будет поддиректория, содержащая наш проект. Нам это сейчас не нужно, поэтому галочку можно снять.
Жмем ОК и в следующем диалоговом окне задаем тип микроконтроллера. Это нужно для того, чтобы Atmel Studio подключила к проекту требуемые заголовочные файлы.
Выбираем SAM3S4B, жмем ОК и Atmel Studio создает проект с заданными параметрами.
Если мы заглянем в директорию проекта, то увидим следующий набор файлов.
В папке Debug сохраняются результаты компиляции проекта - объектные файлы и прошивки в различных форматах. В папке src хранятся исходники проекта - C и C++ файлы.
Посмотрим на Atmel Studio. Перед нами созданный только что проект. С правой стороны у нас проводник, отображающий иерархию проекта. Чуть ниже окно - свойства. Там отображается информация о выбранном файле. С левой стороны - редактор кода, сейчас там открыт файл main.c. Снизу - консоль, на которую выводится различная информация о результатах компиляции проекта. Сверху - меню и меню бар.
Чтобы убедиться в работоспособности платы Karma-SAM3S, добавим в проект простой код. Для начала подключим к проекту несколько ASF библиотек.
ASF (Atmel Software Framework) - это бесплатный набор библиотек для Atmel микроконтроллеров, интегрированный в среду разработки. ASF включает в себя драйверы внутренней периферии, сервисы и библиотеки для внешних устройств. Каждая библиотека имеет документацию с описанием и примерами. Чтобы использовать ASF библиотеки нужно создавать проект на основе шаблона (board template) или ASF примера.
Чтобы добавить ASF библиотеки к проекту, запускаем ASF Wizard. Это можно сделать с помощью меню Project > ASF Wizard, комбинации Alt + W или одноименной кнопки в меню баре.
Для первого проекта понадобятся следующие драйвера:
PIO - Parallel Input/Output Controller
PMC - Power Management Controller
WDT - Watchdog Timer
Ищем их в списке, выделяем и добавляем в окно Selected Modules с помощью кнопки Add.
Когда нужные драйверы добавлены, нажимаем кнопку Apply. В следующих окнах жмем ОК и со всем соглашаемся.
Выбранные библиотеки появятся в проводнике и в заголовочном файле asf.h. Теперь их можно использовать в своем проекте.
Закрываем ASF Wizard и копируем в main.c следующий код.
Детально разбирать его не будем, но несколько комментариев сказать стоит.
В начале программы запрещается работа сторожевого таймера, разрешается тактирование контроллера ввода-вывода и вывод PA17 настраивается на выход. К этому выводу на плате Karma-SAM3S подключен светодиод.
Далее идет бесконечный цикл, в котором состояние вывода PA17 меняется на противоположное. Чтобы смена состояний не была слишком быстрой, используется программная задержка - Delay(). Значение задержки подобрано так, чтобы светодиод моргал с частотой единицы Гц.
Микроконтроллер SAM3S4B имеет гибкую систему тактирования, которая обычно настраивается в начале программы. В этом примере мы ее не трогаем, поэтому микроконтроллер тактируется от внутреннего низкочастотного генератора с частотой 4 МГц.
Обратите внимание, библиотечные функции имеют префикс, по которому легко понять к какой периферии они относятся. Чтобы получить информацию о любой функции или константе в программе, нужно кликнуть по ее имени правой кнопкой мыши и выбрать пункт Goto Implementation.
Теперь нужно скомпилировать проект. Это можно сделать с помощью меню Build > Build Solution, кнопки F7 или одноименной иконки в меню баре.
В противном случае там будут отображены найденные ошибки.
Полученная прошивка лежит в папке проекта. Можно загрузить ее в микроконтроллер с помощью загрузчика, а можно с помощью аппаратного отладчика. В последнем случае, загрузка выполняется прямо из Atmel Studio.
Подаем на плату Karma-SAM3S питание, подключаем SAM-ICE (или J-link) и выбираем в меню Debug > Start Without Debugging.
При первом включении Atmel Studio предложит выбрать инструмент - аппаратный отладчик или симулятор. Но поскольку Atmel Studio пока что не поддерживает программную симуляцию ARM микроконтроллеров, выбора как такового нет.
Если выбрать в меню пункт Debug > Start Debugging and Break , то Atmel Studio перейдет в режим отладки кода. Откроются окна отображающие содержимое регистров и памяти микроконтроллера, а в редакторе кода появится указатель. При нажатии кнопки F11 код будет выполняться построчно.
Также есть другой вариант загрузки прошивки. Выбираем в меню Tools > Device Programming.
В открывшемся окне Device Programming выбираем отладчик, интерфейс и нажимаем кнопку Apply. Atmel Studio автоматически определит тип микроконтроллера. Выбираем пункт Memories и нажимаем кнопку Program, чтобы записать прошивку в микроконтроллер.
Другие пункты в окне Device Programming позволяют настраивать интерфейс программирования, получать информацию об отладчике и микроконтроллере, устанавливать конфигурационные биты.
Я попытался добавить свою библиотеку USART в свой проект, но мне все еще не удается правильно добавить ее, чтобы она была распознана.
Я создал файл USART.c и USART.h, который я хочу добавить. Вот что я попробовал:
1) Щелкните правой кнопкой мыши на Solution / Properties / Toolchain / Directories 2) Добавление пути, где я получил эти два файла
Как мне добавить свои собственные библиотеки в проекты?
2 ответа
Скриншот вашего вопроса показывает, что вы организовали компилятору поиск файлов заголовков для вашей библиотеки. Но вам также нужно использовать компилятор для компиляции библиотечных функций (например, initUSART) и создания статического библиотечного файла (с префиксом lib и расширением .a ). Для этого вам понадобится отдельный проект Atmel Studio или вы узнаете, как использовать набор инструментов AVR GCC вне среды IDE для компиляции библиотек. Затем вам нужно поместить этот файл в каталог, который находится в пути поиска библиотек для компоновщика, а затем вам нужно передать соответствующий аргумент -l компоновщику. Например, если ваша библиотека называется libuart.a , вам нужно передать -luart компоновщику. Свойства проекта для проекта Atmel Studio имеют соответствующие параметры, которые необходимо настроить.
В GCC есть стандартный способ компиляции, создания и ссылки на статические библиотеки, о которых я говорил выше. Вы можете узнать об этом из любого учебника по статическим библиотекам GCC. Затем вам нужно будет применить эти знания в наборе инструментов AVR GCC и найти нужные параметры в Atmel Studio, которые вам нужно установить.
В стороне: Atmel Studio вовсе не упрощает использование библиотек. Arduino IDE работает намного лучше, потому что вы просто размещаете исходные файлы библиотеки в нужном месте, и она компилирует их для вас. Существует огромное количество библиотек Arduino; вам не нужно было бы писать свой собственный драйвер UART, если бы вы могли использовать платформу Arduino.
Простая альтернатива: если вы мало знаете о компиляции и компоновке библиотек C и настройке IDE, вам будет гораздо проще просто скопировать библиотечные файлы в ваш проект, добавив их в качестве исходного кода файлы, и позволить Atmel Studio скомпилировать их, как любой другой исходный файл в вашем проекте.
Еще один простой способ добавления папок в проект - скопировать / вставить папку в проект, а затем открыть Atmel Studio.
На правой стороне (где по умолчанию Solution Explorer) вы увидите все ваши файлы, кроме тех, которые вы только что добавили. Теперь нажмите Показать все файлы и найдите свою папку, которая должна отображаться серым цветом. Щелкните правой кнопкой мыши и выберите Включить в проект . Это должно быть все!
При старте Atmel Studio предлагается на выбор создать новый проект, создать проект-пример или открыть имеющийся проект.
Проектов-примеров много, и начать изучение Atmel Studio, ASF и микроконтроллеров Atmel удобнее всего именно с них. Для выбора нужного проекта введите в соответствующем поле семейство микроконтроллеров, отладочную плату, либо ключевое слово.
После выбора проекта укажите папку для размещения и название (если хотите, чтобы оно отличалось от названия по умолчанию).
При создании нового проекта выбирается его тип. Количество доступных типов проектов зависит от установленных модулей расширения. На рисунке ниже видно, что доступны в том числе проекты Qtouch , которые возможно создавать только после установки Qtouch Library и Qtouch Composer.
ASF Wizard
Если вы открыли готовый пример или создали собственный проект и вам необходимо добавить новый периферийный модуль (например, UART) или библиотеку (например, FATFS), поможет ASF Wizard (меню Project -> ASF wizard или иконка ). В нем можно найти модули по ключевому слову и по типу (драйвер, компонент, сервис). Если это необходимо, можно настроить, как они будут работать: по прерыванию (callback в терминологии Atmel) или по опросу (polled), чем тактироваться или какую роль выполнять (master, host, mass storage и так далее в зависимости от типа периферии или библиотеки).
Настройка модулей
- Считать параметры по умолчанию с помощью соответствующей функции.
- Изменить, если требуется, некоторые параметры.
- Записать новые параметры.
- Разрешить работу периферии.
Написание кода
После добавления необходимых модулей, их настройки и включения, приступаем к написанию кода.
Пример
Допустим, мы хотим научиться мигать светодиодами на отладочной плате SAM D21 Xplained Pro Evaluation Kit.
Рассмотрим подробно, как это сделать в Atmel Studio.
Запускаем Atmel Studio и нажимаем кнопку New Example Project:
Скачиваем и устанавливаем ASF последней версии, если этого не было сделано раньше (см. выше как это сделать).
Создаем новый пример-проект (см. рисунок).
Выбираем семейство контроллеров samd, вводим в поиске ключевое слово led. Видим список доступных проектов.
Выбираем из них нужный.
Вводим новое название проекта и выбираем расположение.
Готово! Нажимаем «ОК». Теперь у нас есть проект-пример, который можно скомпилировать и залить в отладочную плату.
Теперь изменим код. Пусть у нас светодиоды зажигаются по таймеру. Для запускаем ASF Wizard, вводим в поиске ключевое слово timer, выбираем режим callback, затем нажимаем кнопки Add и Apply.
Настраиваем таймер. Для этого объявляем глобально структуру, которая будет хранить параметры таймера:
Теперь нужно настроить таймер. Добавляем функцию:
- struct tc_config config_tc вспомогательная структура, которая хранит настройки таймера
- tc_get_config_defaults(&config_tc) считываем настройки по умолчанию (заполняем структуру). Чтобы посмотреть какие собственно настройки устанавливаются по умолчанию, щелкаем правой кнопкой мыши по функции и в выпадающем меню выбираем «goto implementation». Чтобы узнать, как называется функция, записывающая настройки по умолчанию, набираете название периферии и слово «get» через нижнее подчеркивание, а автозаполнение подскажет полное имя.
- Изменяем нужные нам настройки. В данном случае это предделитель, режим работы и содержимое регистра сравнения.
- tc_init(&tc_instance_tc0, TC3, &config_tc) Записываем измененные данные в структуру и связываем программную структуру с аппаратным таймером (TC3).
- tc_enable(&tc_instance_tc0) Разрешаем работу таймера.
Первая функция устанавливает обработчик какого прерывания вызывается (tc_register_callback(&tc_instance_tc0,tc0_callback,TC_CALLBACK_CC_CHANNEL0);) и разрешает этот вызов (tc_enable_callback(&tc_instance_tc0, TC_CALLBACK_CC_CHANNEL0);). Вторая функция и это то, что выполняется в обработчике прерывания (callback).
Компилируем, запускаем, готово!
Atmel Studio совместно с Atmel Software Framework являются хорошими средствами для первичного знакомства с периферией микроконтроллеров Atmel, значительно сокращают время освоения нового семейства микроконтроллеров за счет большого количества примеров и удобной среды разработки.
Читайте также: