-
- Не приводится ли каким-то чудом индекс массива Samx(115 знак., 12.05.2023 18:28)
- Для художественного оформления темы - сабж. Вертикальный шилд - блютуз мост на USB в компе.>>> my504(1 знак., 12.05.2023 18:01, картинка)
- Слона лучше есть кусочками. Если условия позволяют я бы занулил все 64 байта с заведомо известной и легко считаемой crc. Если не совпадёт при сравнении на приемном конце, начал бы ручками подбирать величину crc при которой сравнение сработает. То же самое проделать для 1 байта из 60 меняяя его значение от 0 до FF ну и далее по всему списку step-by-step по принципу 1 из 60. Так будет проще найти где и на чем ломается алгоритм. - akz(12.05.2023 17:05)
- Ваша таблица констант может оказаться где-то на разделе между
разными областями памяти, требующими разных команд. Попробуйте
перемещать таблицу в ПЗУ. Ещё, объявите массив констант crc8Table
как volatile. Так компилятор будет вынужден вычитывать значение из
флеш принудительно и не сможет оптимизировать. Я так делаю, когда
нужно иметь возможность менять константы прямо в прошивке. Иначе
компилятор слишком умный - может не читать флешь, заранее зная
результат. - Nikolay_Po(12.05.2023 16:24)
- Вооот. Я нечто подобное и подозреваю. Спасибо, попробую. Правда
оптимизация у меня отключена, но я подозреваю какой то косяк с
линкером. Именно размер общего кода отличает нынешний проект от
базового. - my504(12.05.2023 16:53)
- Это уже какая-то эзотерика пошла... Так и до плясок с бубном недалеко. - SciFi(12.05.2023 16:55)
- Вооот. Я нечто подобное и подозреваю. Спасибо, попробую. Правда
оптимизация у меня отключена, но я подозреваю какой то косяк с
линкером. Именно размер общего кода отличает нынешний проект от
базового. - my504(12.05.2023 16:53)
- подключиться к физической линии еще одним rx какого нить уарта с
анализатором протокола и посмотреть, все ли правильно передается - 0men(12.05.2023 14:38)
- А мне все-таки кажется, что проблема в программировании и связана
она с переносом программы с 8-битника на 32-разрядный МК. - reZident(12.05.2023 15:05)
- Не вижу совсем ничего платформозависимого. Думаю косяк вне этого куска кода. - POV(12.05.2023 16:04)
- У меня конечно есть одно изделие с таким же обменом на PIC18Q43, но я с него ничего не переносил. Я взял за шаблон проект с точно таким же контроллером. Его и правлю. - my504(12.05.2023 15:30)
- А мне все-таки кажется, что проблема в программировании и связана
она с переносом программы с 8-битника на 32-разрядный МК. - reZident(12.05.2023 15:05)
- Дурацкий вопрос, а не может быть проблема в последнем if-е? Ведь
обычно возвращается 0, когда все нормально и код ошибки,
отличающийся от нуля. А тут наоборот: когда CRC - OK, то
возвращается 1, а когда не ОК, то возвращается 0. - reZident(12.05.2023 13:50)
- В отладчике я даже не исполняю последнюю строку. Просто навожу
курсор на вычисленное и считанное из таблицы значения. Они разные. - my504(12.05.2023 14:33)
- Мож он вам покажэт правду на следующем такте? А пока вы видите мусор из кучи. - mse homjak(12.05.2023 17:03)
- Тогда еще для прикола: il-2(251 знак., 12.05.2023 14:43)
- )))) Ну не до такой же степени... Проблема где то в фоне на котором
это все работает. Поэтому по шагам нормально, а на лету убивается. - my504(12.05.2023 15:41)
- Так, а не может ли когда "на лету" содержимое буфера меняться во
время подсчета CRC? прерывания от UART запрещаются на время расчета
CRC? - reZident(12.05.2023 16:30)
- Нет, не запрещаются. Но там и не может быть прерываний во время обработки пакета. Следующий пакет придет не раньше, чем будет ответ на текущий или с таймаутом в 1 сек. А ответ на текущий происходит ПОСЛЕ проверки CRC. Причем с хорошим запасом. Штатный обмен идет с темпом 1 пакет (от ПО к устройству) за 100 мс. Осциллограмма контролируется. - my504(12.05.2023 16:50)
- Так, а не может ли когда "на лету" содержимое буфера меняться во
время подсчета CRC? прерывания от UART запрещаются на время расчета
CRC? - reZident(12.05.2023 16:30)
- )))) Ну не до такой же степени... Проблема где то в фоне на котором
это все работает. Поэтому по шагам нормально, а на лету убивается. - my504(12.05.2023 15:41)
- Попробуйте переменную index сделать типа uint или uint32. Возможно у вас где-то идет байтовый доступ к невыровненному
массиву. - reZident(12.05.2023 14:40)
- фантастика... - 0men(12.05.2023 14:41)
- В отладчике я даже не исполняю последнюю строку. Просто навожу
курсор на вычисленное и считанное из таблицы значения. Они разные. - my504(12.05.2023 14:33)
- Может отладчик виноват? Например открыто окно с регистрами UART? - LightElf(12.05.2023 13:43)
- Не открыто. Его смотреть бессмысленно. Поверх реальных данных и CRC пакет шифрован. Обсуждаемый код получает пакет не из прерывания, а от дешифровальщика. В ПО сейчас применяется отладочная версия, которая открывает консоль с не шифрованными пакетами. То есть я могу сравнить отправленный и полученный. - my504(12.05.2023 14:21)
- Проверить арифметику. Вручную. - Cкpипaч(12.05.2023 13:36)
- Этим и занят последний час. Специально раскрыл построчно строку
вычисления. - my504(12.05.2023 13:38)
- Можно же просто вставить код в онлайн компилятор и посмотреть, что
там насчиталось: SciFi(1 знак., 12.05.2023 13:41, ссылка)
- Текучка заедает... ))) Постоянно отвлекают. Наконец посчитал по
шагам. И.... все сошлось. А на лету не сходится. my504(26 знак., 12.05.2023 15:09)
- Отладочный вывод, есть? Попробуй увеличить разрядность переменной,
в которой суммируешь. - Cкpипaч(12.05.2023 16:06)
- Вывод есть только в штатный Watch Кейла. То есть через Jlink. Но
только я ничего не суммирую. Там делается циклический ксор и
извлекается из таблицы очередное значение CRC по результату этого
ксора. - my504(12.05.2023 16:56)
- Попробуй ксорить в 32-битной переменной. - Cкpипaч(12.05.2023 17:04)
- Можно попробовать, только в понедельник. Сегодня я уже никакой...
Но я пытаюсь понять что отличает текущий проект от исходного, где
идентичный код, идентичный обмен, идентичный МК, но все работает. - my504(12.05.2023 17:47)
- Все просто, он не идентичный. - Cкpипaч(12.05.2023 18:07)
- >>> SciFi(1 знак., 12.05.2023 17:15, ссылка)
- Можно попробовать, только в понедельник. Сегодня я уже никакой...
Но я пытаюсь понять что отличает текущий проект от исходного, где
идентичный код, идентичный обмен, идентичный МК, но все работает. - my504(12.05.2023 17:47)
- Попробуй ксорить в 32-битной переменной. - Cкpипaч(12.05.2023 17:04)
- Вывод есть только в штатный Watch Кейла. То есть через Jlink. Но
только я ничего не суммирую. Там делается циклический ксор и
извлекается из таблицы очередное значение CRC по результату этого
ксора. - my504(12.05.2023 16:56)
- Отладочный вывод, есть? Попробуй увеличить разрядность переменной,
в которой суммируешь. - Cкpипaч(12.05.2023 16:06)
- Текучка заедает... ))) Постоянно отвлекают. Наконец посчитал по
шагам. И.... все сошлось. А на лету не сходится. my504(26 знак., 12.05.2023 15:09)
- Можно же просто вставить код в онлайн компилятор и посмотреть, что
там насчиталось: SciFi(1 знак., 12.05.2023 13:41, ссылка)
- Этим и занят последний час. Специально раскрыл построчно строку
вычисления. - my504(12.05.2023 13:38)
- проверить корректность расчета CRC в онлайн калькуляторе. будет
понятно - неправильно считается при отправке, или на приемной
стороне Andrey190(1 знак., 12.05.2023 13:27, ссылка)
- Передающая сторона полностью исключается. Это серийное и отлично
работающее с серийными изделиями (включая базовый прототип этого
проекта) ПО. Причем уже примерно 7 лет. - my504(12.05.2023 13:40)
- может скопипастено не с того проекта? не тот полином? у меня для
расчета CRC8 другая таблица используется. - Andrey190(12.05.2023 14:03)
- У нас нет другого... ))) 7 лет во всех проектах и в ПО применяется
одна и та же таблица CRC с одинаковым стартовым значением CRC. - my504(12.05.2023 14:23)
- выложите сюда принятые данные. может и найдется что либо - Andrey190(12.05.2023 14:34)
- У нас нет другого... ))) 7 лет во всех проектах и в ПО применяется
одна и та же таблица CRC с одинаковым стартовым значением CRC. - my504(12.05.2023 14:23)
- может скопипастено не с того проекта? не тот полином? у меня для
расчета CRC8 другая таблица используется. - Andrey190(12.05.2023 14:03)
- Передающая сторона полностью исключается. Это серийное и отлично
работающее с серийными изделиями (включая базовый прототип этого
проекта) ПО. Причем уже примерно 7 лет. - my504(12.05.2023 13:40)
- Кто-то/что-то подсирает в твой буфер и портит правильные данные. il-2(479 знак., 12.05.2023 12:18)
- Сейчас проект почти пуст, то есть процесс обмена единственный, если не считать работу таймеров для формирования диаграммы работы SDR приемника (сам приемник закомментирован). Мало этого, я ставлю бряк на входе в приведенный код и сравниваю посланный и принятый пакеты. Идентичны. В этом и вопрос. причем прием происходит в прерывании, а не в DMA из за специфического синхронизирующего оформления пакета... То есть в отладчике массив не может быть ничем модифицирован после my504(142 знак., 12.05.2023 13:07)
- Это такой метод црц - помимо ксора ещё и мотаться беспорядочно по
псевдослучайному массиву? - Ralex(12.05.2023 12:07)
- :-) Меня ТОПАЗ-ЭЛЕКТРО заставил еще круче изгаляться: Лaгyнoв(2110 знак., 12.05.2023 16:42)
- Век живи - век учись: SciFi(1 знак., 12.05.2023 12:14, ссылка)
- "Не могу прочитать... что-то на программистском" :) - Ralex(12.05.2023 12:49)
- страшный баян, заранее просчитываются все сдвиги для каждого
значения байта, экономит быстродействие за счет перерасхода памяти.
Зовется "табличный метод". - Nikolay801_(12.05.2023 13:00)
- Аааааа вспомнил, там же помимо ксора ещё изощренно битики сдвигают.
Точно, спасибо за пояснение. Теперь понятно что за таблица, я думал
псевдослучайные. - Ralex(12.05.2023 13:13)
- На самом деле генератор чисел для этой таблицы вполне можно назвать генератором псевдослучайных чисел. По определению это он и есть. SciFi(1 знак., 12.05.2023 13:17, ссылка)
- Аааааа вспомнил, там же помимо ксора ещё изощренно битики сдвигают.
Точно, спасибо за пояснение. Теперь понятно что за таблица, я думал
псевдослучайные. - Ralex(12.05.2023 13:13)
- страшный баян, заранее просчитываются все сдвиги для каждого
значения байта, экономит быстродействие за счет перерасхода памяти.
Зовется "табличный метод". - Nikolay801_(12.05.2023 13:00)
- "Не могу прочитать... что-то на программистском" :) - Ralex(12.05.2023 12:49)
- А "на том конце" crc=0xFF при инициализации? - Гyдвин(12.05.2023 12:06)
- Да, конечно. Тут вообще использован софт и обмен большого семейства серийных изделий. Я сейчас работаю с серийным ПО для серийного изделия. А текущий проект создается как обрезок этого серийного для тестовых применений. Сам обмен является частью общей платформы ПО на которой вызываются разные приложения для разных изделий. Так что обмен не зависит от типа изделия. Приложения лишь по разному парсят и отображают данные из пакетов. - my504(12.05.2023 13:13)
- В arrayUARTin пишешь из прерывания? На всякий случай объяви его
volatile. Компилятор не менял? Свежие - умнее. - Nikolay_Po(12.05.2023 11:57)
- Не, тоже самое... ((( У меня оптимизация отключена... - my504(12.05.2023 13:21)
- Сейчас попробую. Но компилятор не менял. Тот же пятый Кейл. - my504(12.05.2023 13:16)
- Скобки от for? Или у вас осознанно crc считается по всему блоку, за
исключением одного байта в середине? Cкpипaч(153 знак., 12.05.2023 11:30)
- Да, 59-ый байт пропускается, ибо в нем и находится контрольный CRC.
Скобки на for я ставил, но это ни на что не влияет. Что
естественно. Под for попадает только первый if. Насколько я понимаю
в синтаксисе C. Более того, текущий вариант содержит скобки, но я
изменил уже в сообщении на исходную форму записи. - my504(12.05.2023 11:36 - 11:40)
- В оригинале и отступов нет? Ну точно, чтобы никто ничего не понял
:-) А так-то ошибки не видно. Наверное, хорошо спрятана... - SciFi(12.05.2023 11:40)
- И отступы тоже есть. Это так себя ведет форматирование кода в
форуме. - my504(12.05.2023 11:41)
- потому что код надо вставлять в КОД General(933 знак., 12.05.2023 12:30, картинка)
- Проблема в том, что я именно так и вставил... Причем в исходнике
(при открытии редактирования) отступы сохранились... - my504(12.05.2023 13:00)
- Да, при вставке через </> код корежится и его приходится ручонками править - LightElf(12.05.2023 15:09)
- Проблема в том, что я именно так и вставил... Причем в исходнике
(при открытии редактирования) отступы сохранились... - my504(12.05.2023 13:00)
- потому что код надо вставлять в КОД General(933 знак., 12.05.2023 12:30, картинка)
- И отступы тоже есть. Это так себя ведет форматирование кода в
форуме. - my504(12.05.2023 11:41)
- В оригинале и отступов нет? Ну точно, чтобы никто ничего не понял
:-) А так-то ошибки не видно. Наверное, хорошо спрятана... - SciFi(12.05.2023 11:40)
- Да, 59-ый байт пропускается, ибо в нем и находится контрольный CRC.
Скобки на for я ставил, но это ни на что не влияет. Что
естественно. Под for попадает только первый if. Насколько я понимаю
в синтаксисе C. Более того, текущий вариант содержит скобки, но я
изменил уже в сообщении на исходную форму записи. - my504(12.05.2023 11:36 - 11:40)