Страница 1 из 5

AMS библиотеки

Добавлено: Вс сен 04, 2016 8:13 pm
Alex
Вопрос к знатокам: попытка перенести массив

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

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 нет.

Как правильно объявить массив в библиотеке, чтобы его можно было использовать и в скетче и в библиотеке?

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

Добавлено: Вс сен 04, 2016 8:39 pm
olehs
Где можно увидеть код библиотеки с изменениями?

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

Добавлено: Вс сен 04, 2016 9:00 pm
Alex
Библиотеки пока нет, чтобы она появилась, нужно разобраться с парой вопросов, первый из которых я озвучил выше — как объявить массив в библиотеке, чтобы его можно было использовать и в скетче и в библиотеке.

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

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

есть пример использования макроса и функции, но нет примера объявления переменных и массивов.

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

Добавлено: Вс сен 04, 2016 9:05 pm
olehs
Там не очень хороший пример создания библиотеки.
Начните с этих рекомендаций https://www.arduino.cc/en/Hacking/LibraryTutorial
Обратите внимание на директивы, исключающие повторное включение в код.

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

Добавлено: Вс сен 04, 2016 9:12 pm
Alex
Естественно, эти рекомендации (и множество других) я изучил и про директивы, исключающие повторное включение в код я в курсе.

Сейчас вопрос простой — как объявить массив и сделать это без использования классов и объектов.

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

Добавлено: Вс сен 04, 2016 9:16 pm
olehs
Что это за массив? Статический? Или каждый модуль, подключающий Вашу библиотеку должен получать новый экземпляр этого массива?

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

Добавлено: Вс сен 04, 2016 9:19 pm
Alex
Нет, один массив на весь АМС :) , но работать с ним должны функции и из библиотеки и из скетча.

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

Добавлено: Вс сен 04, 2016 9:35 pm
olehs
Довольно трудно угадать, что именно Вы сделали, не имея текста библиотеки перед глазами.
Объявление массива должно быть в .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];

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

Добавлено: Вс сен 04, 2016 9:41 pm
Alex
Отлично, в ближайшее время проверю это решение и доложу о результатах.

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

Добавлено: Пн сен 05, 2016 1:32 am
alexsis_76
Естественно, никакого двойного объявления buffId нет
объявления то нет,библиотека подключается к нескольким скетчам
сделайте extern в том скетче где хотите иметь массив