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

Atmel studio 6

16.04.2014, 21:37. Показов 29677. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
Регистрация: 07.02.2106
Сообщений: 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
Регистрация: 07.02.2106
Сообщений: 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
Регистрация: 07.02.2106
Сообщений: 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
Регистрация: 07.02.2106
Сообщений: 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
Регистрация: 07.02.2106
Сообщений: 3,044
19.05.2014, 14:15 20
Цитата Сообщение от oxytt
Цитата Сообщение от flomdger
нормальной ИДЕ.
это какое?
IAR. Начал с AVR-Studyo и AVR-Toolchain. Так как тогда только начал си изучать, заколебался воевать с компилером. Окончательно опечалился из-за костылей с Ftosh. Пересел на IAR. С тех пор не нарадуюсь. Нет костылей с Ftosh и EEPROM. Компактный код. Делал последний проект. Ради интереса поставил максимальную оптимизацию по коду. Заколебался 8 килобайт забивать (МК 32 мега, спокойно можно брать мегу 8535). Так и не забил. А в проекте и вывод на символьный дисплей, и сам цикл работы, работа с EEPROM. Вывод текста и преобразование чисел на самописных либах.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
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
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru