AMS библиотеки

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

AMS библиотеки

Сообщение Alex » Вс сен 04, 2016 8:13 pm

Вопрос к знатокам: попытка перенести массив

Код: Выделить всё

byte buffId[MAX_ID_DIGS];
из скетча в библиотеку приводит к ошибке

Код: Выделить всё

AMS-random\AMS-random.cpp.o:(.bss.buffId+0x0): multiple definition of `buffId'
ams_nrf24_controller.cpp.o:(.bss.buffId+0x0): first defined here
Естественно, никакого двойного объявления buffId нет.

Как правильно объявить массив в библиотеке, чтобы его можно было использовать и в скетче и в библиотеке?
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: AMS библиотеки

Сообщение olehs » Вс сен 04, 2016 8:39 pm

Где можно увидеть код библиотеки с изменениями?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: AMS библиотеки

Сообщение Alex » Вс сен 04, 2016 9:00 pm

Библиотеки пока нет, чтобы она появилась, нужно разобраться с парой вопросов, первый из которых я озвучил выше — как объявить массив в библиотеке, чтобы его можно было использовать и в скетче и в библиотеке.

Вот здесь (внизу страницы)

http://wiki.amperka.ru/%D0%BF%D1%80%D0% ... 0%BA%D0%B8

есть пример использования макроса и функции, но нет примера объявления переменных и массивов.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: AMS библиотеки

Сообщение olehs » Вс сен 04, 2016 9:05 pm

Там не очень хороший пример создания библиотеки.
Начните с этих рекомендаций https://www.arduino.cc/en/Hacking/LibraryTutorial
Обратите внимание на директивы, исключающие повторное включение в код.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: AMS библиотеки

Сообщение Alex » Вс сен 04, 2016 9:12 pm

Естественно, эти рекомендации (и множество других) я изучил и про директивы, исключающие повторное включение в код я в курсе.

Сейчас вопрос простой — как объявить массив и сделать это без использования классов и объектов.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: AMS библиотеки

Сообщение olehs » Вс сен 04, 2016 9:16 pm

Что это за массив? Статический? Или каждый модуль, подключающий Вашу библиотеку должен получать новый экземпляр этого массива?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: AMS библиотеки

Сообщение Alex » Вс сен 04, 2016 9:19 pm

Нет, один массив на весь АМС :) , но работать с ним должны функции и из библиотеки и из скетча.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: AMS библиотеки

Сообщение olehs » Вс сен 04, 2016 9:35 pm

Довольно трудно угадать, что именно Вы сделали, не имея текста библиотеки перед глазами.
Объявление массива должно быть в .cpp файле библиотеки, а в .h файле должна быть ссылка на него как на внешний. Приблизительно так

library.h:

Код: Выделить всё

#ifndef library_h
#define library_h

#define MAX_ID_DIGS 4
extern byte buffId[MAX_ID_DIGS];

#endif    
library.cpp:

Код: Выделить всё

#include "library.h"

byte buffId[MAX_ID_DIGS];
За это сообщение автора olehs поблагодарил:
Alex (Пн сен 05, 2016 11:25 am)
Рейтинг: 1.16%
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: AMS библиотеки

Сообщение Alex » Вс сен 04, 2016 9:41 pm

Отлично, в ближайшее время проверю это решение и доложу о результатах.
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: AMS библиотеки

Сообщение alexsis_76 » Пн сен 05, 2016 1:32 am

Естественно, никакого двойного объявления buffId нет
объявления то нет,библиотека подключается к нескольким скетчам
сделайте extern в том скетче где хотите иметь массив
Ответить