Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 10:58

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 22 ] 
Автор Сообщение
 Заголовок сообщения: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 02 фев 2017, 17:28 
Здравствуйте!

Зарегистрирован: 02 фев 2017, 17:15
Сообщения: 4
Может я плохо ищу, а может действительно очень много информации как, но нет как правильно.
Я пользуюсь Atmel Studio 7.
Вопрос. Как правильно подключать файлы в проекте.

Есть основной файл с главным циклом. Есть библиотека, скажем с UART, она состоит из хедера и *.с файла.
Как правильно подключить их?
Можно, инклудом в шапке. (при этом я понимаю, что и куда вставляется)
Можно через солюшен эксплорер. (я так и не смог понять как им правильно пользоваться, программа работавшая отлично на инклудах, после подключения через эксплорер начинает работать не верно, в чем не разбирался)
Можно через встроенную способность студии (подключить библиотеку) как ей пользоваться я правда не разобрался.

В чем отличие этих способов? Какой и когда вернее использовать?

Извиняюсь если все давно разжеванно, я не нашел где и как.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 02 фев 2017, 17:53 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2016, 00:04
Сообщения: 263
Откуда: Россия, Москва
Ну это у вас типичная проблема управления зависимостями в мире C/C++. Просто скопировать все нужное к себе в проект - вполне обычная практика. Как альтернативный вариант, можно использовать git submodules.

В мире *nix систем зависимости часто ставят через пакетный менеджер, а сами зависимости описывают в README.md, потом их и CMake легко находит и просто bash-скриптом можно прилинковать. Но в мире AVR я так понимаю это не часто встречается.

_________________
https://eax.me/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 02 фев 2017, 18:34 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
afiskon, __facepalm_


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 03 фев 2017, 00:40 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 2102
Откуда: Докучаевск-Волноваха
Хедеры инклюдом в начале файла, *.С файл - подключаем через Solution Explorer - пкм на названии проекта, Add -> Existing Item
Вложение:
2017-02-02_21-36-30.png
2017-02-02_21-36-30.png [ 60.73 Кб | Просмотров: 5088 ]

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 03 фев 2017, 01:30 
Здравствуйте!

Зарегистрирован: 02 фев 2017, 17:15
Сообщения: 4
Финский писал(а):
Хедеры инклюдом в начале файла, *.С файл - подключаем через Solution Explorer - пкм на названии проекта, Add -> Existing Item
Вложение:
2017-02-02_21-36-30.png


А можно поподробнее?
Почему инклюды нельзя через SE?
С какого момента будут видимы *.c файлы в проекте при включении SE?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 03 фев 2017, 02:05 
Старожил

Зарегистрирован: 19 июн 2012, 14:17
Сообщения: 3440
Segar писал(а):
Почему инклюды нельзя через SE?

Потому что #include это дериктива препроцессору - вставить по месту вызова содержимое файла. SE не может знать, куда именно надо вставлять содержимое заголовочного файла.
Иногда порядок инклюдов важен, иногда перед инклюдом надо определить какой нибудь дефайн, классический пример util/delay.h требует F_CPU.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 03 фев 2017, 10:54 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2016, 00:04
Сообщения: 263
Откуда: Россия, Москва
dosikus_2 если вы со мной в чем-то не согласны, приводите конструктивные доводы/критику, или не приводите никакую. Ваши эмоции никому кроме вас не интересны.

_________________
https://eax.me/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 03 фев 2017, 13:26 
Здравствуйте!

Зарегистрирован: 02 фев 2017, 17:15
Сообщения: 4
яверт писал(а):
SE не может знать, куда именно надо вставлять содержимое заголовочного файла.


Какая тогда польза от SE? Наглядности уже нет, ибо не все файлы в нем будут видны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 03 фев 2017, 14:21 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2900
Откуда: Санкт-Петербург
Segar, вам бы изучить традиционно сложившуюся схему сборки проектов (компилятор из исходника делает obj; линкер из нескольких obj делает исполняемый файл) + причуды C (включение хедеров в текстовом виде) - забыв о том, что существуют какие-то IDE, solutions и т.п.
Легче было бы понимать ответы в этой теме, да и вопросы, наверное, снялись бы сами собой.

Вкратце: IDE существует лишь для вашего удобства, для сборки проекта он не обязателен.
Чтобы собрать проект - надо скомпилировать _все_ C-файлы (из каждого получится по одному OBJ) и слинковать получившиеся OBJ воедино. Чтобы не делать это руками - все C-файлы прописаны в проекте (видны в SE)
Чтобы скомпилировать C-файл - надо включить в него все хедеры. Это делает сам компилятор, так что хедеры вроде бы включать в проект не обязательно - но порой удобно. Некоторые IDE сами отслеживают включённые через #include файлы и отображают их в SE (например, в виде папочки Dependencies).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 03 фев 2017, 18:16 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
afiskon, вы свой бред сравните с вменяемыми ответами, что уже выложили.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 07 фев 2017, 18:59 
Заглядывает иногда

Зарегистрирован: 05 дек 2016, 16:47
Сообщения: 60
Откуда: Москва
так же смотри

http://chipenable.ru/index.php/embedded ... e-hss.html


Я в 7 студии делаю так, пока проблем не было, а если будут она тебе напишет

1. файл main.c
Код:
/*
* main.c
*
* Created: 27.12.2016 18:38:58
* Author : PN
*/

#include "HAL.h"

....
// дальше твой код


2. файл HAL.h
Код:
#ifndef HAL_H
#define HAL_H


//Clock Config
#define F_CPU 8000000L
#define XTAL 8000000L

// здесь библиотеки студии
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/wdt.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <util/delay.h>

// здесь твои личные библиотеки
#include "avrlibtypes.h"
#include "lcdtwi.h"
#include "usart.h"
#include "twim.h"
#include "fifo_buffer.h"
#include "Ultrasonic.h"


// здесь можно вставить переменные

#endif   // #ifndef HAL_H


3. файл USART.H
Код:
#ifndef USART_H_
#define USART_H_

#include "HAL.h"


//==============================================================================
//  Пользовательские переменные (можно менять)
//==============================================================================


#define BUFFER_UART_SIZE_RX 16 // размер буфера для приема сообщения
//#define BUFFER_UART_SIZE_TX 16 // размер буфера для передачи сообщения

...

//-------------------------------------- Инициализациямодуля USART ------------------------

void USART_Init( void );

...

#endif /* USART_H_ */


4. файл USART.c
Код:
/* Модуль связи с компьютером и отладку через плату расширения usb FTDI232
* usart.c
*
* Created: 11.07.2016 10:42:05
*  Author: Павел С.С.
*
* Информация:
*
*  ----------------------------------
* Для работы в файле main.h вставить эту строку: FIFO( 64 ) uart_tx_fifo;   // Буффер для отправки данных по USART
*
*/

#include "usart.h"



//---------------------------------------- Настройки USART --------------------------------

// Clock Speed частота процессора или кварца (XTAL)
//#define FOSC 16000000L

// скорость 110.000 = 115.200 Kb (Обратите внимание, что частота fosc зависит от стабильности системного источника синхронизации. В связи с этим рекомендуется учесть некоторый     запас для предотвращения возможности потери данных из-за колебаний частоты.)
#define BAUD 115200L

...

//==============================================================================
// Инициализациямодуля USART
//==============================================================================
void USART_Init( void ) 
{

   #if defined (__AVR_ATmega16__)   
      UBRRH = HI(MYUBRR); //(unsigned char)(ubrr>>8); // Зададим скорость работы USART
      UBRRL = LO(MYUBRR); //(unsigned char) ubrr;
      UCSRA = 0;
      UCSRB = (1<<RXEN)|(1<<TXEN);                // Включаем прием и передачу по USART
      UCSRB |= (1<<RXCIE); //|(1<<TXCIE0);          // Разрешаем прерывание при передаче и приеме
      UCSRC = 1<<URSEL|1<<UCSZ0|1<<UCSZ1;             // Set frame format: 8data, 2stop bit из даташита
   
   #elif defined (__AVR_ATmega328P__)
      UBRR0H = HI(MYUBRR); //(unsigned char)(ubrr>>8); // Зададим скорость работы USART
      UBRR0L = LO(MYUBRR); //(unsigned char) ubrr;
      UCSR0B = (1<<RXEN0)|(1<<TXEN0);                // Включаем прием и передачу по USART
      UCSR0B |= (1<<RXCIE0); //|(1<<TXCIE0);          // Разрешаем прерывание при передаче и приеме
      UCSR0C = (1<<USBS0)|(3<<UCSZ00);             // Set frame format: 8data, 2stop bit из даташита
   #endif

   
   //UCSR0A |= (1<<U2X0);                      // Для 8 мгц
   
   //UCSR0C = (1<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00);
   // Обращаемся именно к регистру UCSRC (URSEL=1),
   // ассинхронный режим (UMSEL=0),
   // без контроля четности (UPM1=0 и UPM0=0),
   // 1 стоп-бит (USBS=0), 2 стоп-бита (USBS=1)
   // 8-бит посылка (UCSZ1=1 и UCSZ0=1)
}

....


Вложения:
2017-02-07_16-50-26.png
2017-02-07_16-50-26.png [ 27.25 Кб | Просмотров: 4839 ]

_________________
Я, - робот, - Я


Последний раз редактировалось elisey 07 фев 2017, 19:11, всего редактировалось 1 раз.
Выкладывать код нужно с использованием тегов [code]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 08 фев 2017, 10:53 
Старожил

Зарегистрирован: 21 янв 2015, 16:19
Сообщения: 621
Если коротко, то си файлы - это испольняемый код, из них потом и получается hex/bin. Они должны быть добавлены к проекту через SE. h-файлы - это "пояснения" для си файлов - они добавляются с помощью инклудов туда, где будут использоваться соответсвующие си файлы. В си нельзя использовать функции, переменные без объявления, для этого создается шпаргалка - h файл (его может и не быть, но с ним удобнее), в котором ты один раз прописываешь все эти объявления, характерный именно для этого си файла, и простым инклудом вставляешь его везде, где требуется использовать этот си файл. То есть h-файл - это как просто написать все эти объявления в каждом файле по отдельности, но так удобнее делать изменения в проекте, повышается независимость. Ну как-то так. Пардон за сумбурность.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 16 май 2019, 12:00 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2445
Откуда: Киев
Что бы не создавать новую тему, спрошу тут.
А можно как-то сделать свои "глобальные" библиотеки? Но что бы как в примере выше с UART (код в котором зачастую не меняется)не таскать их з проекта в проект. А где-то сделать папку my lib с .с и .h файлами. А в самом проекте писать что-то вроде:
Код:
#include "my lib/uart.h"
#define TX PIN1
#define RX PIN2

Кстати, из примера выше выходит второй вопрос. Так писать нельзя, ибо IDE заглянет в этот h файл, не увидет дафайнов TX, RX и выдаст ошибку. Как в таком случае правильно оформлять, сначала дефайны, а затем инклюд?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 16 май 2019, 18:20 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3047
Цитата:
А можно как-то сделать свои "глобальные" библиотеки?

Это называется include path и library path. Вам для начала нужно собрать модуль в ar .a: https://www.nongnu.org/avr-libc/user-ma ... brary.html И как написано через -lname подключать при линковке. А .h подключать через -I компилятору.

Цитата:
Как в таком случае правильно оформлять, сначала дефайны, а затем инклюд?

Можно и так. Но правильнее будет в .h написать что-то вроде:
Код:
#define RX_DEFAULT PIN2
#ifndef RX
  #define RX RX_DEFAULT
#endif

А в коде можно писать:
Код:
#ifdef RX
  #undef RX
#endif
#define RX PIN2

Тогда можно и после #include писать - переопределяя макрос т.о.
Но! Учтите, что библиотекой как вы выше хотите сделать так делать нельзя. Т.к. дефайн будет только на момент компиляции определяться, а т.к. либа уже собрана то уже не изменятся эти значения. Или передавать через переменные, или тогда не библиотекой, а включать файл .c в проект.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 16 май 2019, 19:56 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2445
Откуда: Киев
Спасибо. То есть похоже стандартного способа отвязать либу от портов, что бы не таскать .с файлы из проекта в проект нету.
Ну разве что, курить с++ с шаблонами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 16 май 2019, 20:21 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3047
Ну можно не таскать, а при добавлении в студии делать "Add as a link", оно тогда копию в проект не тащит, а оставляет файлы где они есть.
Ну и само собой в Makefile тоже можно полный путь к файлику прописывать и INCLUDE_DIR добавить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 16 май 2019, 21:07 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2445
Откуда: Киев
Понял спасибо, попробую поэкспериментировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 27 мар 2020, 01:14 
Здравствуйте!

Зарегистрирован: 22 янв 2012, 02:02
Сообщения: 2
А может кто-нибудь подсказать как в AS7 редактируя конкретный С файл при необходимости открый его H файл и наоборот, редактируя некий H файл открыть при необходимости его "родной" (т. е. с тем же именем) С файл?
Только делать это хотелось бы кнопкой или хоткеем без необходимости ставить курсор на include. Такая функция очень удобна и есть практически во всех IDE...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 27 мар 2020, 01:41 
Старожил

Зарегистрирован: 10 фев 2016, 19:55
Сообщения: 351
Во-первЫх своего письма хотелось бы сказать -- не надо спрашивать в чужих темах.
А во-вторых касательно вопроса: одному C-файлу может соответствовать несколько H-файлов и, с другой стороны, одному H-файлу может соответствовать несколько C-файлов.
Иными словами. H-файлы -- 'H'eader -- заголовочный файл, который содержит декларации функций и типов переменных. C-файлы -- файлы с исходниками, которые содержат реализации функций или декларации переменных с выделением памяти. Но это разделение условное. C-файл может содержать реализации функций, которые декларированы в разных H-файлах и, наоборот, в нескольких C-файлах могут быть реализации функций и переменных, декларированных в одном H-файле.
И как в этом случае определять "родной" С- или H- файл?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 27 мар 2020, 02:02 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3047
Цитата:
Такая функция очень удобна и есть практически во всех IDE...

Например где?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 27 мар 2020, 08:21 
Старожил

Зарегистрирован: 20 окт 2015, 18:14
Сообщения: 380
Qt Creator (F4), Embitz (не помню исходную комбинацию, настроил тоже на F4)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно подключать файлы и библиотеки.
СообщениеДобавлено: 27 мар 2020, 23:36 
Здравствуйте!

Зарегистрирован: 22 янв 2012, 02:02
Сообщения: 2
Netzschlange писал(а):
Во-первЫх своего письма хотелось бы сказать -- не надо спрашивать в чужих темах.
И как в этом случае определять "родной" С- или H- файл?

Очевидно же: открывать H файл с таким же именем как и С файл, если такой H файл существует. Но с вашими мыслями согласен.
Цитата:
Например где?

NetBeans, MPLAB X. Казалось, что и в Эклипсе есть, но там еще круче - в окне Outline показываются все определения да еще в кликабельном виде. Это сверх удобно. В AS7 я так и не смог понять как открывать быстро H файлы - включать их в проект как С файлы явно неправильно, просто указываю компилятору папку где лежат H файлы и все. Но тогда их неудобно открывать - нет ссылок в самой IDE и приходится мотать курсор на include и потом нажимать сверху-справа кнопку GO. И не нахожу других средств, т. к. создание Dependecities происходит только после компиляции проекта...

P.S. Все это есть в AS7! Находится в меню VAassist/Tools. Я с VA раньше не работал, потому и затруднения. Буду признателен, если кто подскажет ссылку или в кратце каковы основные приемы работы...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB