Сообщение от dee098
Похоже на то что ваш <SoftwareSerialParity.h> либо парсер теряет пакеты. Я в своем коде использую хардверный сериал для работы с ПСП и софтверный для отладки. Как уже писал ErikPshat приведи вывод к более читаемому формату. Не так сложно дополнять байт 0 если значение меньше 0x10.
dee098 добавил 27-01-21 в 0:Jan p
Есть смысл избавиться от
Тем болле что освобождения памяти я в твоем коде не увидел.
|
Софтварный серил пиха принимать не хочет. А в сторонней библиотеке он был переписан по нормальному с выбором режима. Через него пиха отлично принимает данные. Да и работает он без проблем. Переписал вывод информации в лог. Пробовал очищать память переменной msg, но что то не помогло это. В каком месте покопать ? И у меня вопрос. Верно ли я написал функцию byte *ECBEncryptBytes(byte *clearBytes, byte *key) ?
Valera0141 добавил 27.01.2021 в 10:06
Сообщение от dee098
Похоже на то что ваш <SoftwareSerialParity.h> либо парсер теряет пакеты. Я в своем коде использую хардверный сериал для работы с ПСП и софтверный для отладки. Как уже писал ErikPshat приведи вывод к более читаемому формату. Не так сложно дополнять байт 0 если значение меньше 0x10.
dee098 добавил 27-01-21 в 0:Jan p
Есть смысл избавиться от
Тем болле что освобождения памяти я в твоем коде не увидел.
|
А зачем избавляться от msg = new byte[msgLength] {0x00};, если это в памяти выделяет место под массив с нужным размером, а потом его заполняет циклом из псп. Без этого в переменную какую то белеберду заносит. Или я что то не знаю?
Обновил немнгого код
https://drive.google.com/file/d/1rIP...ew?usp=sharing, добавив удаление из памяти заполненные переменные msg и всё, что с ним связано. Ардуино всё равно зависает в момент чтения. Ещё видно, что она перезагружается один раз сама по себе (видно по повторному выводу надписи Start). Вот лог
Start
00
00
5A 02 01 A2
5A 02 0C 97
5A 0B 80 (08 40 9A 93 08 E4 5C FF 6B ) F3
5A 02 01 A2
5A 02 0C 97
5A 0B 80 (02 2Start
5A 02 01 A2
5A 02 01 A2
5A 02 01 A2
5A 02 01 A2
12
74
5A 02 01 A2
5A 02 0C 97
5A 0B 80 (08 96 E5 62 A7 2D 8C 17 66 ) 58
5A 02 01 A2
5A 02 0C 97
5A 0B 80 (02 5
Проблема явно где то в генерации сискона
Нашёл место зависания. Переписал
for (int i = 0; i < n-1; i++)
req[i] = response[i+1];
на
for (int i = 1; i < n; i++)
req[i] = response[i];
Осталось разобраться с генерацией сискона. Что то там не то, так как пиха дальше 0x80 не проходит. Вот лог
Start
00
00
5A 02 01 A2
5A 02 0C 97
5A 0B 80 (08 A0 25 3A DB CA 63 B9 19 ) 39
5A 02 01 A2
5A 02 0C 97
5A 0B 80 (02 D7 B3 7A E1 34 8A 03 AA ) C8
5A 02 01 A2
5A 02 0C 97
5A 0B 80 (08 28 79 7F AF 2C 05 1D CB ) 2A
...
5A 02 01 A2
5A 02 0C 97
5A 0B 80 (08 0D 91 C5 45 2B 14 D5 5E ) F8
00