Очередной "Умный дом", на этот раз модульная система...

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

1. Код для обработки датчиков кидаю в файл Update_Parameters

int bme_temp() {}

int bme_hum() {}

int bme_pres() {}

2. 

parameter [PARAMETER][param_addr (air_t)] = bme_temp();

parameter [PARAMETER][param_addr (air_h)] = bme_hum();

parameter [PARAMETER][param_addr (air_p )] = bme_pres();

С этим вроде понятно

а вот дальше типы параметров в byte parameter [5][parameters_quantity]  нигде не описаны.

И как соотносится 

#define  air_t        1 //датчик температуры

BYTE_1_SIGNED, //1 //датчик температуры

1,        //1 //датчик температуры

и как сделать чтоб ы температура отсылалась не только node_4_Net_center_Due1,         //1 //датчик температуры

но и например 

   node_1_Net_center_PC,                 //1

   node_2_Net_center_oraPi1,             //2

   node_3_Net_center_oraPi2,             //3 

 

И как понять отправка будет периодическая или по изменению параметра (где это указать)

1. Функции лучше делать чтобы тип данных был однобайтовый, например byte (для беззнаковых) или int8_t для знаковых. Примерно так 

1int8_t bme_temp() {}
2 
3byte bme_hum() {}
4 
5byte bme_pres() {}

2. Надо так 

1parameter [PARAMETER][param_addr (air_t)] = (byte) bme_temp();
2 
3parameter [PARAMETER][param_addr (air_h)] = (byte) bme_hum();
4 
5parameter [PARAMETER][param_addr (air_p )] = (byte) bme_pres();

тип данных параметров в массиве содержится в нулевом элементе первого измерения массива

т.е. #define TYPE_VAR          0

правильно ты показал для air_t это BYTE_1_SIGNED. При отправке по CAN эта инфа (тип данных) будет содержаться в фрейме и приёмник соответствующим образом интерпретирует этот параметр. 

Параметр отсылается на один выбранный узел по изменению или периодически, в зависимости от того, что наступит раньше. На ещё один узел я не сделал возможности так отправлять параметры. НО, если какому то узлу нужен параметр - он может запросить у нашего узла и наш узел ему ответит этим параметром. (Сообщение - запрос параметра). 

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

MaksVV пишет:
Параметр отсылается на один выбранный узел по изменению или периодически, в зависимости от того, что наступит раньше. На ещё один узел я не сделал возможности так отправлять параметры. НО, если какому то узлу нужен параметр - он может запросить у нашего узла и наш узел ему ответит этим параметром. (Сообщение - запрос параметра). 

Можно ( и это в принципе не сложно) добавить в код, чтобы был выбор - чтобы на ещё один узел отправлять параметры. Т.е. в целом будут выбирается два адреса, на которые будут передаваться параметры периодически или по изменению (смотря что наступит раньше). 

А если нужно больше узлов, то проще уж широковещательное сообщение делать, из которого все кому надо возмут инфу. Так и шина меньше нагружаться будет.

MaksVV
Offline
Зарегистрирован: 06.08.2015

версия 14.

- Добавил в отладку версию скетча, скорость шины, инфу что именно было рестарт mcp2515 и/или ардуино. 

- исправил небольшой косяк с запросом параметра от другого узла. 

 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

версия 14.

- Добавил в отладку версию скетча, скорость шины, инфу что именно было рестарт mcp2515 и/или ардуино. 

- исправил небольшой косяк с запросом параметра от другого узла. 

Есть вопрос, я канхакером увидел что узлы произвольно обмениваются параметрами, хотя код одинаковый и везде стоит отправлять к 4.  Как это поправить.

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

судя о канхакингу , ты сначала видимо отправлял команды id 11xxxxxx,соответственно  потом приходили отчеты о командах - id 12xxxxxx. а все что ниже (id начинается c 14xxxxxx) это периодически узлы отправляют свои параметры на мастер и узел 21 (15h). Смотри там в can_struct.h я специально отправку одного параметра поставил  не на мастер, а на узел 21. 

Так что всё гуд. 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

судя о канхакингу , ты сначала видимо отправлял команды id 11xxxxxx,соответственно  потом приходили отчеты о командах - id 12xxxxxx. а все что ниже (id начинается c 14xxxxxx) это периодически узлы отправляют свои параметры на мастер и узел 21 (15h). Смотри там в can_struct.h я специально отправку одного параметра поставил  не на мастер, а на узел 21. 

Так что всё гуд. 

Я про это говорю, команды не отправлял. Все само. (Либо как вариант сыпется мусор из web потра 8266) К этому и спрашивал. Надо думаю test везде кроме мастера отключить.

001 ID       DLC Data                    Period Count  Comment
002 11090A01 5   77 00 00 0C 2D          410    65     9->10
003 11090A02 5   76 00 00 0B 14          171    45     9->10
004 110A0A01 5   35 00 00 00 00          50     140    10->10
005 110A0A02 5   33 00 00 0B 14          178    115    10>10
006 110B0A01 5   C5 00 00 0C 2D          140    364    11>10
007 110B0A02 5   C4 00 00 0B 14          424    426    11->10
008 11130A01 5   30 00 00 00 00          81     209    19->10
009 11130A02 5   31 00 00 0B 14          400    202    19->10
010 12085509 0                           0      1     
011 120A0901 5   77 00 01 0C 2D          177    51     10->9
012 120A0902 5   76 00 01 0B 14          174    39     10->9
013 120A0B01 5   C5 00 01 0C 2D          161    300    10->11
014 120A0B02 5   C4 00 01 0B 14          415    359    10->11
015 120A1301 5   30 00 06 00 00          80     169    10->19
016 120A1302 5   31 00 01 0B 14          363    164    10->19
017 120B0101 5   C0 00 01 01 01          0      1      11->1
018 120B0121 5   04 00 08 00 01          0      1     
019 120B0303 5   C0 00 01 01 01          0      1      11->3

 

riv
Offline
Зарегистрирован: 20.07.2017

Скажи плиз какая комбинация ключей дебага отключает это (за 2 секунды налетело)

1Разобрался. Просто ты каждый раз меняешь имена переменных.

 

riv
Offline
Зарегистрирован: 20.07.2017

И еще глобальная просба, на тему структуризации кодо и его наследования. Просьба переделать немного основной файл и System_Functions следующим образом:

Выделить отдельно 

main_init в него настройка сериала, версий  и пр. общего

can_init (у тебя CAN_Start и MCP2515_Init )

Это нужно чтобы разделить и мне потом не встраивать через ж свой код

Хотелось бы в основном файле получить

в setup

main_init can_init ethernet_init web_init wi-fi_init mqtt_init device_init

в loop (это например)

main_loop can_loop ethernet_loop web_loop wi-fi_loop mqtt_loop device_loop

И на выходе я сделаю 

файлы - Ethernet.ino, Web.ini, Wi-Fi.ino, Mqtt.ino

Device.ino (у тебя это Update_Parametrs.ino) если хочешь можно оставить и так но вроде логичнее 

Чтобы у нас получилось что я в основной файл вложу только выховы фиксированных функций и их #define

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:
Надо думаю test везде кроме мастера отключить.

да, скороее всего это происходит из-за функции test. отключай её.

riv
Offline
Зарегистрирован: 20.07.2017

Так и еще начали в канхакере в последней версии лететь вот такие фреймы

14060001  14070001  .... 14150001 Зачем узел шлет что то на 00?

 

MaksVV
Offline
Зарегистрирован: 06.08.2015
смотри  в can_struct.h  - так настроена периодическая передача первого параметра (air_t) - широковещательно. Этим я проверял в это : 
 
MaksVV пишет:
Можно ( и это в принципе не сложно) добавить в код, чтобы был выбор - чтобы на ещё один узел отправлять параметры. Т.е. в целом будут выбирается два адреса, на которые будут передаваться параметры периодически или по изменению (смотря что наступит раньше). А если нужно больше узлов, то проще уж широковещательное сообщение делать, из которого все кому надо возмут инфу. Так и шина меньше нагружаться будет.
riv
Offline
Зарегистрирован: 20.07.2017

Увы опять сбой, ресет не сработал

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

Нашёл довольно серьезный косяк. При периодической отправке параметров , весь список перебирается в цикле for. В теле цикла нет delay. Поэтому сообщения из списка от ардуины долбят в MCP2515 с большой скоростью. Опытным путём установил, что не все сообщения из списка передаются. Поставил delay (5). Стало всё гуд. Возможно из - за этого шина глючила. Что слишком маленькое было время между отправками соседних сообщений.

15 версия, это исправлено. Также добавил выбор автоматической отправки параметров ещё на один узел. (т.е. в целом 2 )

riv
Offline
Зарегистрирован: 20.07.2017

Вот интересно node_8_Hallway_light.ino.hex всегда немного отличается от всех остальных бинарников, все одинаковые а вот 8 немного меньше.

MaksVV
Offline
Зарегистрирован: 06.08.2015

короче заливай этот короткий скетч. Если на нём тоже будет глючить - проблема все таки железячная , а не софтовая. 

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

мне по твоим последним логам не нравятся некорые узлы. В отладке пишется что статус от мастера принят, а отсылка своего статуса сразу за ним не пишется, т.е. может подрят несколько принять потом только свой отсылает. Такого быть никак не должно. 

Или обратная проблема. Получения статусов от мастера в отладке нет, а свой статус отсылает . Причём в эти моменты узел мастером расценивается как ОК!. Вот с этим непонятки. Как будто тут сама дуня глючит и чё то с памятью. 

А есть узлы (14 вроде) где вообще в отладке фразы на половину обрываются - явный признак нарушения памяти. 

Вот эти косяки как раз указавают, что проблема софтовая. 

Поэтому и надо залить простой скетч  и проверить. 

riv
Offline
Зарегистрирован: 20.07.2017

Я только 15 залил. И проблема то не в сбое сети, которая блуждающая! То сутки стоит без проблем то опять повылазило сразу.

Проблема в рестарте по SPI как я почитал на буржуинских форумах, народ с этой проблемой сталкивался. Нужно ничего не передавать на MSP по SPI после ресета 128 тактов или 50-100мс (кто что пишет)

MaksVV
Offline
Зарегистрирован: 06.08.2015

рестарт вообще не должен происходить, ну может совсем редко. А судя по логам, у тебя едва едва fail не выскакивало. Некоторые узлы с ума сходили. И кстати у нас delay (100) есть. Ну сделай 200. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

подключи канхакер  на ночь, будет интересно словит ли он глюкавые сообщения или это они уже чисто на узлах возникают. 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

рестарт вообще не должен происходить, ну может совсем редко. А судя по логам, у тебя едва едва fail не выскакивало. Некоторые узлы с ума сходили. И кстати у нас delay (100) есть. Ну сделай 200. 

Ну выходные то после перепайки исправили ситуацию, и вчера стояли норм (правда на 125)

Сегодня 250 и уже с глюками

riv
Offline
Зарегистрирован: 20.07.2017

Да кстати у меня #define TIMEOUTVALUE    100

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

мне по твоим последним логам не нравятся некорые узлы. В отладке пишется что статус от мастера принят, а отсылка своего статуса сразу за ним не пишется, т.е. может подрят несколько принять потом только свой отсылает. Такого быть никак не должно. 

Или обратная проблема. Получения статусов от мастера в отладке нет, а свой статус отсылает . Причём в эти моменты узел мастером расценивается как ОК!. Вот с этим непонятки. Как будто тут сама дуня глючит и чё то с памятью. 

А есть узлы (14 вроде) где вообще в отладке фразы на половину обрываются - явный признак нарушения памяти. 

Вот эти косяки как раз указавают, что проблема софтовая. 

Поэтому и надо залить простой скетч  и проверить. 

Это проблема Wi-Fi  вывода лога, я заметил что через Wi-Fi/IP/Serial лог идет с потерями. Через Web все нормально но там буфер маленький. Я лог снимаю через esp-link это проброс serial через wi-fi esp8266

MaksVV
Offline
Зарегистрирован: 06.08.2015

да уж, вифи с одной стороны облегчил жись,  а с другой... Как бы ещё не было проблем с корявой заливкой hex файла по воздуху. Хотя там верификация какаянибудь должна быть . 

таймаут я тоже у себя 100 поставил. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

сделай скорость 125 и таймаут 125 ))

riv
Offline
Зарегистрирован: 20.07.2017

Кстати, обнаружил что нет блокировки отправки самому себе и приема своего же броадкаста

По простому в RX отсечь, а по хорошему фильтр придумать для своего бордкаста, а на передачу самому себе внутри TX если rem_adr==dev_adr то return ;)

Постоянно шлют

21->21

19->19

Честно, я вообще перестал понимать логику программы. По какому алгоритму идет рассылка я смотрю в канхаекр и просто диву даюсь что происходит в сети. 

Почему например остальные сами себе не шлют, почему типы сообщений не совпадают.

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

да уж, вифи с одной стороны облегчил жись,  а с другой... Как бы ещё не было проблем с корявой заливкой hex файла по воздуху. Хотя там верификация какаянибудь должна быть . 

таймаут я тоже у себя 100 поставил. 

Я проблемы не вижу, он нужен для прошивки и MQTT а вот такие ОЖИДАЕМЫЕ потери и задержки как раз и покажывают место радио в системе автоматизации ;-) (А потери пулеметной ленты лога да еще через эмулятор Win telnet serial это не проблема, это норма. Кстати я прошиваю все только c linux машины, из под Win вообще не пошло)

Провода наше все.

MaksVV
Offline
Зарегистрирован: 06.08.2015

кстати у меня тут возникла очень здравая идея. адрес узла сохранить каждому в еепром . И при старте скетча адрес будет читаться. Таким образом на этапе тестирования (пока у всех узлов скетч одинаковый) - тебе не нужно будет создавать кучу папок скетчей с разными узлами. Один скетч льешь во все узлы и всё. Естественно предварительно нужно один раз забить в еепром адрес на каждый узел. 

Так у тебя уменьшится время на заливку ПО всех узлов. 

Вот это сделано в версии 16. Почитаешь, всё поймешь в первой вкладке, там минимум изменений. 

Вот скетч для забивки в еепром адреса узла

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

Кстати, обнаружил что нет блокировки отправки самому себе и приема своего же броадкаста

По простому в RX отсечь, а по хорошему фильтр придумать для своего бордкаста, а на передачу самому себе внутри TX если rem_adr==dev_adr то return ;)

Постоянно шлют

21->21

19->19

Честно, я вообще перестал понимать логику программы. По какому алгоритму идет рассылка я смотрю в канхаекр и просто диву даюсь что происходит в сети. 

Почему например остальные сами себе не шлют, почему типы сообщений не совпадают.

если отправка самому себе реально произошла с нашего MCP2515 то на приёмник она не попадёт. (по стандарту CAN шины сообщения из передатчика не попадают на приёмник). 

Отправки самому себе и свои же бродкасты быть не должны, ну допустим что будут (какой то  другой узел глюкнул и от нашего имени нам отправил), но не часто, поэтому проще программно В RX() сделать блокировку. 

Ты спрашивал про алгоритм. Он очень простой : 

У мастера: каждую секунду шлём бродкаст.

У узла:  получил от мастера бродкаст - отправил свой статус мастеру. 

Также периодически (в секунду равную адресу) отправляем на настроенный узел параметры. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

Почему например остальные сами себе не шлют, почему типы сообщений не совпадают.

не понял про что именно ты говоришь. С чего вдруг они должны самы себе слать, и кто такие оставльные?

И какие типы сообщений и где не совпадают? 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

кстати у меня тут возникла очень здравая идея. адрес узла сохранить каждому в еепром . И при старте скетча адрес будет читаться. Таким образом на этапе тестирования (пока у всех узлов скетч одинаковый) - тебе не нужно будет создавать кучу папок скетчей с разными узлами. Один скетч льешь во все узлы и всё. Естественно предварительно нужно один раз забить в еепром адрес на каждый узел. 

Так у тебя уменьшится время на заливку ПО всех узлов. 

Вот это сделано в версии 16. Почитаешь, всё поймешь в первой вкладке, там минимум изменений. 

Вот скетч для забивки в еепром адреса узла

 

Если это заработает, то будет совсем круто, а то перепрошивка 2-3 часа. Может все параметры в Eprom шить? Сколько туда лезет?

MaksVV
Offline
Зарегистрирован: 06.08.2015

куда оно денется, заработает, я проверил. Лезет 512 кб помоему. Так еепром сдуется быстро если параметры туда лить постоянно . 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

куда оно денется, заработает, я проверил. Лезет 512 кб помоему. Так еепром сдуется быстро если параметры туда лить постоянно . 

Нет всего 4096 байт

EEPROM:

1024 байта в ATmega328,

512 байт в ATmega168 и ATmega8,

4096 байт в ATmega1280 и ATmega2560

http://radioprog.ru/post/117

MaksVV
Offline
Зарегистрирован: 06.08.2015

Конечно байт а не килобайт, перепутал слегка

riv
Offline
Зарегистрирован: 20.07.2017

В общем EEPROM - "это просто праздник какой то" ©

Предлагаю Все настройки узла туда загрузить

адрес, скорость шины, IP адреса, мастер/слейв/узел, debug и его ключи и пр. даже пока не придумывается.

Ограничение циклов 100 000 операций записи  это даже если делать 10 записей в день хватит на 10 000 дней т.е примерно на 27 лет.

А нам нужно раз записать и потом при отладке перезаписывать иногда.

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

riv пишет:

Честно, я вообще перестал понимать логику программы. По какому алгоритму идет рассылка я смотрю в канхаекр и просто диву даюсь что происходит в сети. 

Почему например остальные сами себе не шлют, почему типы сообщений не совпадают.

Ты спрашивал про алгоритм. Он очень простой : 

У мастера: каждую секунду шлём бродкаст.

У узла:  получил от мастера бродкаст - отправил свой статус мастеру. 

Также периодически (в секунду равную адресу) отправляем на настроенный узел параметры. 

Про запрос и ответ статуса узла на бродкаст от мастера понятно мастрер шлет на 0, узлы отвечают на 4

Вопрос в другом кому и где это прописано узел шлет параметры. Я не понимаю как залитый один и тот же код с отличием в имени узла начинает слать почему то разным узлам.

Я бы понял что все бы слали мастеру, на 00, и например 10, но ведь не так 0,4,19,21 Где это прописано?

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

Ограничение циклов 100 000 операций записи  это даже если делать 10 записей в день хватит на 10 000 дней т.е примерно на 27 лет.

А нам нужно раз записать и потом при отладке перезаписывать иногда.

ты  про параметры говорил. Я думал ты про массив parameter[][] - он то часто обновляется. А ты про другие настройки типа скорости шины и т.д. Их то да конечно в еепром тоже можно записывать. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

Я бы понял что все бы слали мастеру, на 00, и например 10, но ведь не так 0,4,19,21 Где это прописано?

в файле can_struct.h

для каждого параметра в отдельности выбирается узел, на который будет посылаться этот параметр периодически или по изменению.  Начиная с 15 версии, можно для каждого параметра выбирать два узла, на которые он будет отсылаться

riv
Offline
Зарегистрирован: 20.07.2017

А 0xFF соответственно никому?

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

В общем EEPROM - "это просто праздник какой то" ©

Предлагаю Все настройки узла туда загрузить

адрес, скорость шины, IP адреса, мастер/слейв/узел, debug и его ключи и пр. даже пока не придумывается.

с адресом , скоростью шины, IP адреса это да, но вот мастер/слейв/узел, debug и его ключи у нас же делаются с помощью директив условной компиляции и этот выбор происходит ещё когда скетч не в узле, а при компиляции, т.е. твой НЕХ файл когда создаётся. Сделать то можно будет, но всё через флаги только, а это память расходует. 

и какой смысл эти данные держать в еепром, когда их как раз и нужно изменять при необходимости. А так они всё время из еепром одни и теже будут грузиться, без возможности выбора. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:

А 0xFF соответственно никому?

да всё верно

MaksVV
Offline
Зарегистрирован: 06.08.2015

Кликабельно 

                                    #define NOT_INCLUDED 0x06 // если параметр отсутствует на узле

типы данных : 

1#define BYTE_1           01
2#define BYTE_2           02
3#define BYTE_4           04
4#define SERVICE_BYTE     05
5#define BYTE_4_SIGNED    06
6#define BYTE_2_SIGNED    07
7#define BYTE_1_SIGNED    08
8#define BYTE_4_FLOAT     09

 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

debug и его ключи у нас же делаются с помощью директив условной компиляции и этот выбор происходит ещё когда скетч не в узле, а при компиляции, т.е. твой НЕХ файл когда создаётся. Сделать то можно будет, но всё через флаги только, а это память расходует. 

и какой смысл эти данные держать в еепром, когда их как раз и нужно изменять при необходимости. А так они всё время из еепром одни и теже будут грузиться, без возможности выбора. 

Согласен. Тогда и мастер/слейв/узел тоже нет смысла (или в прошивке держать оба кода и узла и мастера ).

Ну в общем я про смысл прошивки.

Тем более что с таким набором и возможностью хранить произвольные типы. И вот в серьез подумать именно про твои настройки на епром byte parameter [6][parameters_quantity]

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:
Тогда и мастер/слейв/узел тоже нет смысла (или в прошивке держать оба кода и узла и мастера ).

смысл в том чтобы, всё не подгружать в ОЗУ. В последствии на мастере можно сделать хранилище параметров от всех узлов. И тогда для остального места уже не остаётся. Поэтому для мастера нужен отдельный код. Тем более узлы можно не меги делать, а наны например, а у них памяти мало, поэтому нужны компактные скетчи для узлов. 

Не вижу смысла грузить настройки parameter[][] в еепром

MaksVV
Offline
Зарегистрирован: 06.08.2015

ну как ты тестировал стабильность v15 или v16 или может простой скетч #965 заливал? 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

Не вижу смысла грузить настройки parameter[][] в еепром

Жаль, я в любом случае уникальные параметры каждого контроллера не зависящие от кода, в смысле перечень устройств, их адреса, куда направлять сообщения, у кого запрашивать и брать параметы положу в епром.

Просто это было бы красиво код одинаковый и отлаженый. Прошил епром подключил на универсальный разъем расширитель к которому подключил нужные датчики и ИУ. И вперед.

 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

ну как ты тестировал стабильность v15 или v16 или может простой скетч #965 заливал? 

Не я прежде чем "превращать в кирпич" ;-)  т.е. писать в энергонезависимую память изучал вопрос, завтра соберу, прошью везде епром и залью 16 версию на 125к, я просто хочу сделать возможность через консоль дать команду на изменение скорости шины путем записи в епром и ресета. На подобе твоей test

MaksVV
Offline
Зарегистрирован: 06.08.2015

путаться будешь, тут вот оно в скетче, правишь когда надо. А там в еепроме как посмотреть, что залито? И где он одинаковый код. На одном узле, например, используется 3 параметра, а на другом - 23. В основном скетче проще всё менять, чем  еепром прошивать отдельным скетчем. Еепром считаю нужен как энергонезависимая память. 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

смысл в том чтобы, всё не подгружать в ОЗУ. В последствии на мастере можно сделать хранилище параметров от всех узлов. И тогда для остального места уже не остаётся. Поэтому для мастера нужен отдельный код. Тем более узлы можно не меги делать, а наны например, а у них памяти мало, поэтому нужны компактные скетчи для узлов. 

Смотри, сеть стационарная, все на кабелях,  какова Вероятность что ды доподключишь в последствии что то помимо уже установленного. Правильно, никакая. Тогда зачем делать централизованное хранилище конфига? Прошил в епром все типы подключенных датчиков, ИУ и все. В зависимости от этого инициируешь переменные.

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

 

riv
Offline
Зарегистрирован: 20.07.2017

MaksVV пишет:

путаться будешь, тут вот оно в скетче, правишь когда надо. А там в еепроме как посмотреть, что залито? И где он одинаковый код. На одном узле, например, используется 3 параметра, а на другом - 23. В основном скетче проще всё менять, чем  еепром прошивать отдельным скетчем. Еепром считаю нужен как энергонезависимая память. 

Тогда будет, по крайней мере в моем случае минимум 15 скетчей для узлов на меге, 2 мастер слейв на DUE.

Для всех нужно иметь свой разный конфиг и нигде не ошибиться. Я не просто так помнишь начинал с очень простых и читаемых типов у-в и ИУ. 

Узлы у меня практически типовые с небольшими отличиями.

Ну на самом деле нужно подумать еще. Это не окончательное решение. Но уж больно идея заманчивая. Кстати чтобы не писать все время в процессе отладки можно эмулятор простой сделать читать не из памати а из файла ну типо ф-ю EEPROM1 с теми же вызовани сделать на время отладки.

MaksVV
Offline
Зарегистрирован: 06.08.2015

riv пишет:
Прошил в епром все типы подключенных датчиков, ИУ и все. В зависимости от этого инициируешь переменные. 

блин ну не пойму я смысла. Это всё и так лежит в энергонезависимой памяти, которая называется флеш. В ней залит скетч. В скетче есть эта информация. Дак нафига её в еепром то пихать? В том то и дело, если ты ничего подключать дополнительно не собираешься вообще не имеет смысла в еепром пихать. Т.к. туда пихается обычно изменяемая инфа. А постоянная она из флеша (скетча) спокойно также грузится.