0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 173
1

Atmel studio 6

16.04.2014, 21:37. Показов 29911. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос таков, есть некая библиотека, в lcd_lib.h прототипы, в lcd_lib.c сами функции, оба файла находятся в папке с проектом.
В исходнике пишу #include "lcd_lib.h" - фиг не компилится, пишет что undefined reference, т.е. сишник автоматом не прицепился,
если я вписать #include "lcd_lib.c", тогда все работает, но думается мне что это не есть правильное решение, ибо среда сама должна его найти и прицепить. Или все же студия не умеет так делать?
Код
#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdyo.h>
#include "lcd_lib.h"
//#include "lcd_lib.c"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2014, 21:37
Ответы с готовыми решениями:

Почему AVR Studio 4, а не Atmel Studio 6?
По какой причине большинство специалистов по AVR микроконтроллерам в основном используют AVR Studyo...

Atmel Studio
помогите написать программу работы светофора на языке Assembler

Atmel studio 6.1
Здравствуйте. столкнулся с проблемой запуска программы. вылетает сообщение:debugging tool is not...

Atmel Studio
Подскажите где смотреть библиотеку Atmel Studio.

33
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
16.04.2014, 21:54 2
Среда не должна его подцеплять - его надо включить в проект, чтобы он скомпилировался и прилинковался.
Т.е. ваша задача - включить в проект оба файла и написать include только для хедера.

Ну и на будущее неплохо бы почитать, как вообще устроена цепочка препроцессор-компилятор-линкер (не обязательно для avr, она такая для всех C-компиляторов). С ходу даже не соображу, что бы такое базовое подсказать по основам Си...
0
0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 173
16.04.2014, 22:09 3
Цитата Сообщение от oomomstir
Среда не должна его подцеплять - его надо включить в проект, чтобы он скомпилировался и прилинковался.
Т.е. ваша задача - включить в проект оба файла и написать include только для хедера.
именно это я и спрашиваю, как это правильно сделать, верным ли будет решением если в solution explorer - add existing item???
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
17.04.2014, 00:39 4
Правильно конечно в проект добавить
Но есть еще один вариант который фактически так же работает - сделать инклуд сишного файла
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
17.04.2014, 01:59 5
Совершенно верно, add existing item.

Включать сишник - никогда. Завтра вам понадобится использовать эту либу в двух модулях, и у вас не соберётся проект с воплями duplicate symbol.
И вообще, игры с препроцессором - развлекуха для тех, кто понимает, что делает. Но они рефлекторно дадут включаемому файлу другое расширение.

Но вообще, конечно, в си эта система с использованием полнотекстового включения хедеров - на редкость ублюдочный метод подключения модулей. И компилится медленно, и граблей создаёт мама не горюй.
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
17.04.2014, 03:37 6
Я бы не был столь категоричен насчет никогда - т.е. правильнее включать в проект и компилировать по отдельности. Но известны случае, когда компиляция одним куском создает файл меньшего размера :) Я бы сказал так - вначале компилируем как положено, а когда бинарник во флеш уже не лезет, в качестве последней надежды компилируем все вместе.
0
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
17.04.2014, 11:33 7
Я бы не был столь категоричен насчет никогда - т.е. правильнее включать в проект и компилировать по отдельности. Но известны случае, когда компиляция одним куском создает файл меньшего размера :) Я бы сказал так - вначале компилируем как положено, а когда бинарник во флеш уже не лезет, в качестве последней надежды компилируем все вместе.
Эта штука называется Unity Build и делается не совсем так. Создаётся новый проект с одним .c\.cpp файлом, в который инклюдятся абсолютно все файлы. После этого компилируем. Незачем загаживать рабочий проект.
Однако с этим методом есть небольшая проблема: все статик функции\переменные становятся глобальными, и если они имеют одинаковые имена то будет конфликт.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
17.04.2014, 11:56 8
Сейчас, кстати, уже не так много шансов выиграть от этого трюка: gcc умеет IPO и LTO - http://en.m.wikipedia.org/wiki... timizotion
Правда, конкретно для avr-gcc не проверял.

А вообще по хорошему не включают *.c, как есть (как я уже сказал, это верный путь наступить на грабли), а нормально переделывают его в хедер.
0
Kytoro
20.04.2014, 19:44 9
А можно я сюда свои 5 копеек?
Как я понял, только #include <[путь]/header.H> не проходит.
А если сделать Add > Existing Item для header.H, то оно его просто поместит в папку с проектом, а нафиг мне такое счастье. Как прилинковать комплект хедер/С из произвольной папки, чтоб он там и остался, и оттуда и брался ?
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
20.04.2014, 20:18 10
"А если сделать Add > Existing Item для header.H, то оно его просто поместит в папку с проектом,"
Никто никого никуда не перемещает это раз.

Добавлять в проект достаточно только .с файл, это два. Хэдеры же в компиляции не участвуют.
0
Kytoro
20.04.2014, 23:25 11
Цитата Сообщение от flomdger
Никто никого никуда не перемещает это раз.
Ок, проведем эксперимент.
Имеем новый проект.
<Изображение удалено>
Вот его папка.
<Изображение удалено>
Добавляем новые файлы.
<Изображение удалено>
Вот они добавились в проект.
<Изображение удалено>
А вот они и в папке.
<Изображение удалено>
Итак, что я делаю не так?
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
21.04.2014, 00:02 12
Цитата Сообщение от Kytoro
Итак, что я делаю не так?
Например, вы как-то не так картинки вставили... То ли у меня зрение плохое стало, картинок что-то не видать...
0
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
21.04.2014, 09:53 13
Тогда это какой то локальный замут самой 6ой студии. Могу посоветовать выкинуть её подальше и кодить в нормальной ИДЕ.
Возможно есть какая-то галочка. Завтра на работе посмотрю(там она была когда то установлена не знаю зачем). Это весьма нетипичное поведение для визуал студии.
0
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
21.04.2014, 15:05 14
Цитата Сообщение от flomdger
нормальной ИДЕ.
это какое?
0
0 / 0 / 0
Регистрация: 12.04.2012
Сообщений: 97
21.04.2014, 15:37 15
Авр студия 4 или любая среда к которой можно прикрутить компилятор. Я в Visual studyo пишу. Я пробовал как то перестеть на 6ую студию, в итоге отказался, какая-то она ...сырая чтоли.
0
Kytoro
21.04.2014, 16:00 16
Ну да, в 4-ке все работало нормально, но я люблю делать длинные имена переменным, а в 6-ке есть автодополнение, если кто знает, как такое прикрутить к 4-ке, вернусь в зад :)
Ну или какую галочку где, чтобы линковало нормально. Потому как странно, те же стандартные либы не нужно включать в проект, и все ок, а вот свои... Если их инклюдом включить - то они появляются в зависимостях, даже автодополнение по ним работает (т.е. студия их нормально видит), но вот линковщик их не видит (матюкается на все процедуры, объявленные во всех сторонних файлах), может кто знает что в линковщике поправить?

UP: Мдя... в общем, когда добавляеш существующий файл, в окне выбора файла, на кнопке "Добавить" есть стрелочка вниз, и появляется выбор: Добавить/Добавить как ссылку.
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
21.04.2014, 19:04 17
четверкой не пользовался, у меня шестерка отлично работает
проблемы были только с отладкой
0
Rout'
19.05.2014, 12:36 18
Добрый всем день, напишу сюда свой вопрос. Сделал функционал диспетчера задач и чтоб его удобнее было цеплять к проектам хочу оформить его в библиотеку, как сделать файл lib*.a из объектного файла я знаю, но хотелось бы что б эту либу можно было как то конфигурировать, т.е. указывать в конкретном проекте какая длина очереди задач мне нужна. Вот как это сделать я не понимаю, пробовал компилить проект с либой меняя в заголовочном файле TaskQueueSize, размер занимаемого ОЗУ не меняется. Вот содержимое Dyspotsh.h

#include <stdint.h>

#define Idle 0 //Отсутствие действия
#define TaskQueueSize 10 //Длина очереди задач

typedef void (*TPTR)();
typedef struct Node
{
TPTR TaskPtr;
uint16_t Time;
} TimerStruct;

void TimerService();
void ScheduleTask(TPTR,uint16_t);
void GoToTask();
void InitQueue();

Может кто нибудь подскажет как это можно сделать.
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
19.05.2014, 14:07 19
варианта два
если делать либу *.a то конфигурить можно уже только runtime, т.е. писать код с динамической инициализацией и делать функцию конфигурирования
если хочется конфигурировать sompytation time то не делайте либу, просто включайте нужные *.h и *.c в проект, а конфигурирование можно делать передавая нужные параметры через символы определенные в Project properties. Это полный аналог #define в коде программы, только он глобальный, будет определен сразу для всех исходников
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
19.05.2014, 14:15 20
Цитата Сообщение от oxytt
Цитата Сообщение от flomdger
нормальной ИДЕ.
это какое?
IAR. Начал с AVR-Studyo и AVR-Toolchain. Так как тогда только начал си изучать, заколебался воевать с компилером. Окончательно опечалился из-за костылей с Ftosh. Пересел на IAR. С тех пор не нарадуюсь. Нет костылей с Ftosh и EEPROM. Компактный код. Делал последний проект. Ради интереса поставил максимальную оптимизацию по коду. Заколебался 8 килобайт забивать (МК 32 мега, спокойно можно брать мегу 8535). Так и не забил. А в проекте и вывод на символьный дисплей, и сам цикл работы, работа с EEPROM. Вывод текста и преобразование чисел на самописных либах.
0
19.05.2014, 14:15
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2014, 14:15
Помогаю со студенческими работами здесь

Atmel Studio 6.0
Здравствуйте! Подскажите пожалуйста , не пойму почему при запуске программы компилятор выдает : ...

Помощь с Atmel Studio 7
Доброе время суток. У меня такая ситуация с Atmel Studyo 7: перестала видеть хиадеры. полез в...

Дизассемблирование в Atmel Studio 6.2
Подскажите, как настроить Atmel Studio 6.2, чтобы при загрузки hex файла, он отображался в...

Atmel Studio 6.1 прерывания
Здравствуйте! Недавно приступил к изучению Atmel Studyo 6.1! Пока пишу на Assemdlere.Возникла такая...

Atmel Studio 7 и Arduino
Добрый день! Раньше у меня была установлена Atmel Studyo 6.2 и плагин Visual Micro и можно было...

Помогите с Atmel studio 6.1
Помогите пожалуйста, в Atmel studyo 6.1. В 4 студии функция определялась void function(void){}...

Симуляция в Atmel Studio 6
Здравствуйте. Не могу понять, в чем проблема. Запускаю в отладке программу для USORTa....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Интеграция Arduino и ChatGPT: Практическое руководство
InfoMaster 16.01.2025
В современную эпоху технологических инноваций интеграция искусственного интеллекта с микроконтроллерами открывает принципиально новые возможности для создания умных устройств и автоматизированных. . .
Как создать робота, управляемого ChatGPT
InfoMaster 16.01.2025
Концепция проекта В современную эпоху искусственный интеллект и робототехника становятся все более доступными для энтузиастов и разработчиков. Создание роботизированной руки, управляемой ChatGPT,. . .
Как создать ChatGPT бота в Telegram на Python
InfoMaster 16.01.2025
В современном мире технологии искусственного интеллекта становятся все более доступными для разработчиков, открывая новые возможности для создания умных и интерактивных приложений. Одним из самых. . .
Машинное обучение с помощью Python
InfoMaster 16.01.2025
Машинное обучение стало неотъемлемой частью современных технологий, позволяя компьютерам учиться на основе данных и принимать решения без явного программирования. В сочетании с языком. . .
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru