@ru_arduino

Страница 1081 из 7737
Влад
16.01.2017
18:11:48
там есть по две штуки сетевогой буфера и uart.

роутер и есть мк

Dolphin
16.01.2017
18:12:14
а парсер тогда кто?

Влад
16.01.2017
18:12:26
роутер он потому что строит радио-сеть

Google
Влад
16.01.2017
18:12:34
парсит скрипт на одноплатнике

Dolphin
16.01.2017
18:13:02
нене, ты сказал роутер ловит пакет и шлет парсеру, тот парсит и обратно в роутер

да

Влад
16.01.2017
18:13:16
смотри.

это умный дом.

есть выключатель и реле

на выключателе нажимаю кнопку — он отправляет пакет на главное устройство в радио-сети(dag root), которое и есть роутер, "адрес такой-то, нажата кнопка 2". роутер это выплевывает в uart, где это ловит компьютер, парсит посылку, смотрит у себя в логике, что надо сделать. ага, он видит, что вторая кнопка этого выключателя должна включать свет на реле в ванной, например. он формирует команду "включить реле по адресу такому-то" и отправляет это обратно в uart. там это ловит радио-роутер, извлекает адрес из команды, формирует пакет с командой и отправляет по адресу. реле получает пакет, включает свет.

Dolphin
16.01.2017
18:18:27
ок

но ты сказал что вешается уарт

значит либо парсер криво парсит

Влад
16.01.2017
18:19:17
и вот если куча выключателей ему начнут слать посылки, а он в ответ начнет слать команды, то через 20-30 секунд он перестанет посылать пакеты устройствам.

Dolphin
16.01.2017
18:19:17
либо переполнение буфера на мк (одного из, либо обоих)

Влад
16.01.2017
18:20:08
все остальное будет работать нормально — принимает пакеты по сети, принимает по уарт, отправляет по уарт, строит сеть. но пакеты по сети не передает.

Google
Влад
16.01.2017
18:20:45
и выключатель с реле тоже будут работать нормально — достаточно перезагрузить радио-роутер, и все заработает нормально

Dolphin
16.01.2017
18:21:10
это я понял

Влад
16.01.2017
18:22:39
переполнение буфера — это когда ты начинаешь ему столько пихать данных, что он их не успевает переваривать. а тут он успевает переварить, обмен мизерный по uart.

Dolphin
16.01.2017
18:23:01
не, я имею ввиду именно ошибку

типа буфер на n-байт выделен, а ему прилетело n+1

просто ты полез в уарт ковырять, а проблема мож не там совсем?

не в либе всмс

Влад
16.01.2017
18:24:39
static int uart_data_receiver(unsigned char c) { if ((uart_iterator <= MAGIC_SEQUENCE_LENGTH - 1) || (uart_iterator >= UART_DATA_LENGTH - MAGIC_SEQUENCE_LENGTH && uart_iterator <= UART_DATA_LENGTH - 1)) { if (c != uart_magic_sequence[uart_iterator]) { uart_iterator = 0; return 1; } } uart_command_buf[uart_iterator] = c; if (uart_iterator < UART_DATA_LENGTH-1) { uart_iterator++; } else { uart_iterator = 0; if (uart_command_buf[6] == UART_PROTOCOL_VERSION_V1) { for (int i = 0; i <= 15; i++) { destination_address.u8[i] = uart_command_buf[i+7]; } send_command_packet(&destination_address, &udp_connection, uart_command_buf[23], uart_command_buf[24], uart_command_buf[25]); } } return 1; }

все, что относится к приему по uart выглядит вот так

Dolphin
16.01.2017
18:25:59
UART_DATA_LENGTH - MAGIC_SEQUENCE_LENGTH - 1 ?

?

Влад
16.01.2017
18:26:29
static uint8_t uart_magic_sequence[UART_DATA_LENGTH] = {0x01,0x16,0x16,0x16,0x16,0x10, 0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x03,0x16,0x16,0x16,0x17,0x04}; /* UART Binary data */ #define UART_PROTOCOL_VERSION_V1 0x01 #define UART_DATA_LENGTH 42 #define MAGIC_SEQUENCE_LENGTH 6

м?

Dolphin
16.01.2017
18:28:10
Это ты писал?

Влад
16.01.2017
18:28:26
часть я, часть по наследству досталась

Samael
16.01.2017
18:28:56
ru_raspberry PI: Raspberry, Orange, Banana. Lattepanda, etc... https://telegram.me/ru_raspberry

Памагите!!!?

Dolphin
16.01.2017
18:29:17
if ((uart_iterator <= MAGIC_SEQUENCE_LENGTH - 1) || ((uart_iterator >= UART_DATA_LENGTH - MAGIC_SEQUENCE_LENGTH) && (uart_iterator <= UART_DATA_LENGTH - 1)))

Влад
16.01.2017
18:31:11
что?

Dolphin
16.01.2017
18:31:41
ничего, в скобки взял

Google
Dolphin
16.01.2017
18:32:08
много недостает данных, чтобы так основательно копнуть

Влад
16.01.2017
18:33:45
ну я просто не вижу, где тут можно словить переполнение. ничего динамически не выделяется

если пришло не то, ругнется просто

Dolphin
16.01.2017
18:37:18
а че такое - уарт_итератор?

счетчик?

Влад
16.01.2017
18:37:58
номер символа в пакета, если распознана правильная последовательность в начале пакета

да

Dolphin
16.01.2017
18:43:16
uart_iterator >= UART_DATA_LENGTH - MAGIC_SEQUENCE_LENGTH вот здесь должно же быть - 1?

Samael
16.01.2017
18:45:03
Посоветуйте ssh клиент на андроид.

Иначе сюда свой секас с малиной перенесу?

Dolphin
16.01.2017
18:46:20
Подполковник
16.01.2017
18:46:27
как сделать индикацию чувствительнее к звуку

Samael
16.01.2017
18:47:11
Dolphin
16.01.2017
18:47:15
что?
Влад, приём! )

Влад
16.01.2017
18:47:39
а

щас

Dolphin
16.01.2017
18:47:56
а
чуть выше спросил

не, туплю я ... все - спать пора значит

Влад
16.01.2017
18:52:26
вроде нет, 0x03 это 37 байт

массив с 0, значит 36

Google
Влад
16.01.2017
18:52:55
42-6 равно 36

Dolphin
16.01.2017
18:52:56
да

да да, говорю же туплю

уже проверил

Влад
16.01.2017
18:53:29
а я думал глюк нашел :(

хотя тогда бы он не разбирал

Dolphin
16.01.2017
18:53:54
не растраивайся, найдешь )

а я думал глюк нашел :(
Я так понимаю уарт на прерываниях принимает?

Влад
16.01.2017
19:01:49
да

Dolphin
16.01.2017
19:02:17
Может сделать флаг заполнения буфера (конец приема), а отправку вынести наружу из этой функции

Admin
ERROR: S client not available

Dolphin
16.01.2017
19:02:31
подозреваю что тут неладное со стеком творится

у тебя нет гарантий, что при получении нового пакета по уарт сразу за этим, не закончена отправка предыдущего

Th0r
16.01.2017
19:04:33
http://i.imgur.com/86BHvRb.png

Dolphin
16.01.2017
19:05:07
http://i.imgur.com/86BHvRb.png
Я совдеповский проеб :( за 10ку отдавали малыша

Влад
16.01.2017
19:05:43
хм. какого пакета, сетевого? уарт-то не сунет ему новый символ, пока обработчик не вернет 1

а он ему не вернет, пока не отработает send_command_packet

Dolphin
16.01.2017
19:06:47
либо сброс приема

ну короче меня настораживает отправка внутри прерывания. с переполнением вроде все ок, все ровно

с логикой вроде тоже

Google
Влад
16.01.2017
19:09:59
Может сделать флаг заполнения буфера (конец приема), а отправку вынести наружу из этой функции
и не принимать новый пакет по uart, пока не отправлен по радио предыдущий?

Black
16.01.2017
19:10:26
В чём первичный вопрос?

Dolphin
16.01.2017
19:10:38
почему нет? Это быстро произойдет же

Влад
16.01.2017
19:10:45
если в этом дело, то он не должен упасть, если закомментировать send_command_packet

да, как вариант

Dolphin
16.01.2017
19:11:01
согласен

Влад
16.01.2017
19:11:04
собрал, поставил проверяться

Dolphin
16.01.2017
19:11:17
скрестил пальцЫ )

Влад
16.01.2017
19:13:17
В чём первичный вопрос?
так все в истории) зависает сетевой стек на мк.

Dolphin
16.01.2017
19:13:21
компактненько так

Dolphin
16.01.2017
19:14:13
Бля красиво, тоже так хочу )

4 минуты )

Влад
16.01.2017
19:16:02
я его ребутнул случайно :(

Dolphin
16.01.2017
19:16:15
ну епт ))

я спать хочу ))

но не уйду пока не узнаю ?

Влад
16.01.2017
19:17:32
Все, не дышу

Dolphin
16.01.2017
19:17:53
?

красота

Влад
16.01.2017
19:19:31
левое окошко — это устройство шлет ему кучу запросов, правое — это по ссш с одноплатника парсер принимает пакеты

Страница 1081 из 7737