AMS библиотеки

Модератор: Alex

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

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

Сообщение Alex » Пн сен 05, 2016 7:39 am

объявления то нет,библиотека подключается к нескольким скетчам
Не совсем понятно, что имеется в виду.
сделайте extern в том скетче где хотите иметь массив
Можно поподробнее, с примером? Чем ваше решение отличается от решения olehs ? И какое из них «правельнее» или оба имеют право на жизнь?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Пн сен 05, 2016 11:25 am

olehs, ваш пример отлично работает и библиотеку я практически написал :), осталось только несколько вопросов, например:

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

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

Сообщение olehs » Пн сен 05, 2016 11:27 am

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

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

Сообщение Alex » Пн сен 05, 2016 12:02 pm

Библиотека генерит на микроконтроллерах реально рандомные (на некотором диапазоне) вектора инициализации, «магические» числа и уникальные идентификаторы.

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

(Мне не очень нравится, что выставлять количество портов нужно вручную в сетапе, нужно, чтобы это происходило автоматически, в зависимости от типа контроллера — Mega, Due, Pro Mini и т. д.).
Вложения
AMS-random.zip
AMS-random Library
(4.57 КБ) 192 скачивания
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Пн сен 05, 2016 12:18 pm

Замечания:
1. Нельзя каждый раз получать seed с пинов, т.к. для получения их нужно перевести в INPUT, а потом вернуть в то состояние, в котором они были до чтения. А это может порушить логику работы программы.
2. Я думаю, только пользователь библиотеки должен решать, с каких пинов получать случайное значение, т.к. только он знает, какие пины у него болтаются в воздухе и не используются (это решит и проблему №1)
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Пн сен 05, 2016 12:34 pm

Интересное замечание, нужно подумать на эту тему. С другой стороны, этот код работает уже не первую версию АМС для всех платформ и практика показала, что ошибок не возникает.

Мне бы хотелось услышать замечания по самой библиотеке — есть ли какие-нибудь ляпы в структуре библиотеки? И как бы пограмотнее и поудобнее выставлять количество портов для разных контроллеров?
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Пн сен 05, 2016 12:47 pm

Ошибок не замечалось, потому что Вы не меняете pinMode. Возникнет вопрос случайности данных чисел при определенных конфигурациях пинов (все значения пинов четко детерминированы на момент опроса).

Количество портов можно выставлять в отдельном .h файле, где проверяется по директивам тип платы, под которую идет сборка.
Для примера посмотрите файл boards.h в библиотеке Firmata или Sd2PinMap.h из библиотеки SD
За это сообщение автора olehs поблагодарил:
Alex (Пн сен 05, 2016 1:35 pm)
Рейтинг: 1.16%
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Пн сен 05, 2016 1:35 pm

Да, ещё раз спасибо, с вашей подачи «залудил» :) автовыбор платы и количества пинов.
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

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

Сообщение alexsis_76 » Пн сен 05, 2016 3:59 pm

Не совсем понятно, что имеется в виду.
так сказать неявное включение
массив объявлен в h файле ,посредством include он попадает в другие файлы ,получается что массив (один)объявлен в нескольких местах
в h файлах обычно хранятся прототипы функций,типы данных,структуры,inlain функции.
я extern обычно объявляю в тех файлах где нужна переменная объявленная в другом файле,ну или можно передать посредством указателя.
вообще обмен данными через глобальные переменные не очень хорошая затея.
Можно поподробнее, с примером
файл 1.c
....
uint8_t flag=1;
....
файл 2.c
extern uint8_t flag;
говорит что flag объявлен где то в другом файле.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Сб сен 24, 2016 8:25 am

Ещё один вопрос к знатокам:

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

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

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

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

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

Вопрос:

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