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

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

Добавлено: Вс сен 25, 2016 11:14 am
olehs
alexsis_76 писал(а):alexsis_76 имел ввиду совсем не это
обычно макроподстановки помещают в файлы.h,там где мы хотим иметь их в исходном файле мы включаем файл .h
В таком случае .h файл нужно инклудить из библиотеки, т.е. он должен стать частью исходного кода библиотеки. А значит конфигурирование из скетча будет происходить изменением исходного кода библиотеки. Что плохо, т.к. требует быть внимательным при обновлении библиотеки.
alexsis_76 писал(а):ну почему обязательно глобальные,можно и локальные,допустим у вас есть локальный массив,вы передаете в вызываемую функцию указатель на него и работаете,если хотите изменить переменную,передаете ее адрес
Это по сути то же самое, что и передача через параметры функции.

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

Добавлено: Вс сен 25, 2016 11:22 am
alexsis_76
А значит конфигурирование из скетча будет происходить изменением исходного кода библиотеки
это как?
вообще я как то не очень понимаю, смысл define это по сути константа , а не переменная она определяется на этапе работы препроцессора т.е он заменяет символьное имя на цифровое и все делается только в процессе компиляции динамически по ходу исполнения программы не назначается

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

Добавлено: Вс сен 25, 2016 4:14 pm
olehs
Может появится необходимость переопределить константу, объявленную в библиотеке, еще на этапе компиляции. Например, номер пина, куда у вас подключен светодидоик для сигнализации какой-либо активности библиотеки. Делать его переменной - трата пары байт оперативки. Менять в самой библиотеке - тоже плохо.

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

Добавлено: Вс сен 25, 2016 4:30 pm
alexsis_76
Может появится необходимость переопределить константу
а смысл,по идее должна начаться ругань
в крайнем случае можно ее назвать по другому

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

Добавлено: Вс сен 25, 2016 6:24 pm
olehs
alexsis_76 писал(а):
Может появится необходимость переопределить константу
а смысл,по идее должна начаться ругань
в крайнем случае можно ее назвать по другому
По-моему, мы о разных вещах говорим. Я не очень понимаю между кем и кем ругань.
Это вполне нормальная практика, когда авторы библиотеки определяют какие-то константы, но позволяют переопределить их значение извне.

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

Добавлено: Пн сен 26, 2016 1:17 am
alexsis_76
По-моему, мы о разных вещах говорим. Я не очень понимаю между кем и кем ругань.
угу
допустим вы сделали
#define MY_PORT PORTB.2
#define MY_PIN PINC.2
#define LOW 0
и т.д
теперь вы можете вместо (не обращайте внимания на синтаксис) написать
if(!MY_PORT)
MY_PIN=LOW
вместо
if (!PORTB.2)
PINC.2=0
и вас поймут ,
когда я писал что дефайн это по сути константа,я имел виду что выражение нельзя переопределить в процессе работы программы,дефайн может указывать хоть на что можно вообще без него, дефайн удобно,но не обязательно.
если вы попытаетесь второй раз сделать #define MY_PORT PORTB.2 в области видимости первого вам скажут что то типа дублирования меток,нужно сначала отменить первый дефайн #undef
Это вполне нормальная практика, когда авторы библиотеки определяют какие-то константы, но позволяют переопределить их значение извне
константу нельзя переопределить она на то и константа
переопределите 3,14?

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

Добавлено: Пн сен 26, 2016 1:29 am
olehs
Константа - это то, что не меняется в ходе выполнения программы. Но это не значит, что ее значение нельзя установить при компиляции в произвольное. Например, микроконтроллер, под который собирается ваш скетч - константа, но компилятор переопределит для вас эту константу, если вы будете собирать скетч под другой контроллер.

Теперь на примере о библиотеках.

mylib.h:

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

#ifndef MY_LED_PIN
#define MY_LED_PIN 13
#endif    
sketch.ino:

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

#define MY_LED_PIN 5
#include "mylib.h"    
это не совсем константа, а макрос со значением по умолчанию.
Так вам не нужно править mylib.h, если у вас 13-й пин занят.

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

Добавлено: Пн сен 26, 2016 5:12 am
alexsis_76
а смысл в этом какой?
сначала определяем там, потом переопределяем там, для какой цели?

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

Добавлено: Пн сен 26, 2016 7:33 am
Alex
константу нельзя переопределить она на то и константа
переопределите 3,14?

а смысл в этом какой?
сначала определяем там, потом переопределяем там, для какой цели?
alexsis_76, без обид, вы просто не врубаетесь о чём был мой вопрос и о чём вообще идёт речь. Сначала я пытался вам объяснить, затем olehs — бесполезно.

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

Добавлено: Пн сен 26, 2016 8:53 am
olehs
alexsis_76 писал(а):а смысл в этом какой?
сначала определяем там, потом переопределяем там, для какой цели?
Это может быть настройка со значением по умолчанию. При чем умолчание мог придумать автор библиотеки, а использовать вы.
Если вас устраивает это умолчание, какой смысл его каждый раз указывать в своей программе? А если не устраивает - почему для этого нужно править код чужой библиотеки?

Ну на самом деле гляньте тот же MySensors, там все конфигурирование построено на директивах.