0 / 0 / 0
Регистрация: 18.02.2011
Сообщений: 173
|
|
1 | |
Atmel studio 616.04.2014, 21:37. Показов 29911. Ответов 33
Метки нет (Все метки)
Вопрос таков, есть некая библиотека, в 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
|
16.04.2014, 21:37 | |
Ответы с готовыми решениями:
33
Почему AVR Studio 4, а не Atmel Studio 6? Atmel Studio Atmel studio 6.1 Atmel Studio |
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
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 |
Однако с этим методом есть небольшая проблема: все статик функции\переменные становятся глобальными, и если они имеют одинаковые имена то будет конфликт.
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
IAR. Начал с AVR-Studyo и AVR-Toolchain. Так как тогда только начал си изучать, заколебался воевать с компилером. Окончательно опечалился из-за костылей с Ftosh. Пересел на IAR. С тех пор не нарадуюсь. Нет костылей с Ftosh и EEPROM. Компактный код. Делал последний проект. Ради интереса поставил максимальную оптимизацию по коду. Заколебался 8 килобайт забивать (МК 32 мега, спокойно можно брать мегу 8535). Так и не забил. А в проекте и вывод на символьный дисплей, и сам цикл работы, работа с EEPROM. Вывод текста и преобразование чисел на самописных либах.
0
|
19.05.2014, 14:15 | |
19.05.2014, 14:15 | |
Помогаю со студенческими работами здесь
20
Atmel Studio 6.0 Помощь с Atmel Studio 7 Дизассемблирование в Atmel Studio 6.2 Atmel Studio 6.1 прерывания Atmel Studio 7 и Arduino Помогите с Atmel studio 6.1 Симуляция в Atmel Studio 6 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи | |||||
Интеграция 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
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
|