AMS библиотеки

Модератор: Alex

olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Вс сен 25, 2016 11:14 am

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

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

Сообщение alexsis_76 » Вс сен 25, 2016 11:22 am

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

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

Сообщение olehs » Вс сен 25, 2016 4:14 pm

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

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

Сообщение alexsis_76 » Вс сен 25, 2016 4:30 pm

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

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

Сообщение olehs » Вс сен 25, 2016 6:24 pm

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

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

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

По-моему, мы о разных вещах говорим. Я не очень понимаю между кем и кем ругань.
угу
допустим вы сделали
#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?
Последний раз редактировалось alexsis_76 Пн сен 26, 2016 1:49 am, всего редактировалось 1 раз.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Пн сен 26, 2016 1:29 am

Константа - это то, что не меняется в ходе выполнения программы. Но это не значит, что ее значение нельзя установить при компиляции в произвольное. Например, микроконтроллер, под который собирается ваш скетч - константа, но компилятор переопределит для вас эту константу, если вы будете собирать скетч под другой контроллер.

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

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-й пин занят.
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

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

Сообщение alexsis_76 » Пн сен 26, 2016 5:12 am

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

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

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

константу нельзя переопределить она на то и константа
переопределите 3,14?

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

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

Сообщение olehs » Пн сен 26, 2016 8:53 am

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

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