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

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

Добавлено: Пн сен 05, 2016 7:39 am
Alex
объявления то нет,библиотека подключается к нескольким скетчам
Не совсем понятно, что имеется в виду.
сделайте extern в том скетче где хотите иметь массив
Можно поподробнее, с примером? Чем ваше решение отличается от решения olehs ? И какое из них «правельнее» или оба имеют право на жизнь?

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

Добавлено: Пн сен 05, 2016 11:25 am
Alex
olehs, ваш пример отлично работает и библиотеку я практически написал :), осталось только несколько вопросов, например:

библиотека должна работать с разными контроллерами и нужно как-то определять их тип. Можно это сделать как-нибудь внутри библиотеки? Или как-нибудь передать в библиотеку тип контроллера из скетча (выставленного вручную)?

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

Добавлено: Пн сен 05, 2016 11:27 am
olehs
Alex, можно поподробнее, что делает библиотека и как она взаимодействует с контроллерами. И что такое контроллер с точки зрения кода?

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

Добавлено: Пн сен 05, 2016 12:02 pm
Alex
Библиотека генерит на микроконтроллерах реально рандомные (на некотором диапазоне) вектора инициализации, «магические» числа и уникальные идентификаторы.

Всё работает, вот заготовка библиотеки, приветствуются замечания и дополнения.

(Мне не очень нравится, что выставлять количество портов нужно вручную в сетапе, нужно, чтобы это происходило автоматически, в зависимости от типа контроллера — Mega, Due, Pro Mini и т. д.).

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

Добавлено: Пн сен 05, 2016 12:18 pm
olehs
Замечания:
1. Нельзя каждый раз получать seed с пинов, т.к. для получения их нужно перевести в INPUT, а потом вернуть в то состояние, в котором они были до чтения. А это может порушить логику работы программы.
2. Я думаю, только пользователь библиотеки должен решать, с каких пинов получать случайное значение, т.к. только он знает, какие пины у него болтаются в воздухе и не используются (это решит и проблему №1)

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

Добавлено: Пн сен 05, 2016 12:34 pm
Alex
Интересное замечание, нужно подумать на эту тему. С другой стороны, этот код работает уже не первую версию АМС для всех платформ и практика показала, что ошибок не возникает.

Мне бы хотелось услышать замечания по самой библиотеке — есть ли какие-нибудь ляпы в структуре библиотеки? И как бы пограмотнее и поудобнее выставлять количество портов для разных контроллеров?

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

Добавлено: Пн сен 05, 2016 12:47 pm
olehs
Ошибок не замечалось, потому что Вы не меняете pinMode. Возникнет вопрос случайности данных чисел при определенных конфигурациях пинов (все значения пинов четко детерминированы на момент опроса).

Количество портов можно выставлять в отдельном .h файле, где проверяется по директивам тип платы, под которую идет сборка.
Для примера посмотрите файл boards.h в библиотеке Firmata или Sd2PinMap.h из библиотеки SD

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

Добавлено: Пн сен 05, 2016 1:35 pm
Alex
Да, ещё раз спасибо, с вашей подачи «залудил» :) автовыбор платы и количества пинов.

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

Добавлено: Пн сен 05, 2016 3:59 pm
alexsis_76
Не совсем понятно, что имеется в виду.
так сказать неявное включение
массив объявлен в h файле ,посредством include он попадает в другие файлы ,получается что массив (один)объявлен в нескольких местах
в h файлах обычно хранятся прототипы функций,типы данных,структуры,inlain функции.
я extern обычно объявляю в тех файлах где нужна переменная объявленная в другом файле,ну или можно передать посредством указателя.
вообще обмен данными через глобальные переменные не очень хорошая затея.
Можно поподробнее, с примером
файл 1.c
....
uint8_t flag=1;
....
файл 2.c
extern uint8_t flag;
говорит что flag объявлен где то в другом файле.

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

Добавлено: Сб сен 24, 2016 8:25 am
Alex
Ещё один вопрос к знатокам:

В библиотеке есть определение

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

#define MY_PIN  10   
это определение используется функцией внутри библиотеки

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

void setMyPin() {
  dgitalWrite(MY_PIN, HIGH);
} 
Но требуется устанавливать (переопределять) это значение (MY_PIN) в скетче. Значение легко переопределяется, но новое значение действует только в скетче, а библиотечная функция так и продолжает работать с изначальным значением.

Вопрос:

Как можно переопределить значение макроса MY_PIN в скетче, чтобы новое значение работало внутри библиотечной функции (без передачи параметров этой функции)?