Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-ноя-15 00:44

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 2018-янв-13 15:45 
Не в сети

Зарегистрирован: 2016-окт-17 09:48
Сообщения: 2
Устал ковыряться, не понимая куда лезть.
Ранее писал на Pascal и МЭК 61131-3.
Из-за чего запросто может быть, что я написал в С++ белиберду, и не замечаю этого.

Последовательность событий:

1. Функция CRC16_OLD - криво работает, выдает при части запросов неверные CRC, но при части запросов выдает все-таки верные CRC. "Кривизна" достаточно стабильна.

2. Параллельно добавлена другая функция CRC16_NEW и расчет CRC производится в ней, без удаления CRC16_OLD - работает без ошибок.

3. Без удаления CRC16_NEW расчет CRC опять переключен на CRC16_OLD - и о чудо, функция, не работавшая в пп.1 начинает работать без ошибок.

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

Попробовал посмотреть эту функцию в памяти в рабочем и нерабочем вариантах (скриншот), отличается.

Но как понять, что за операторы или переменные отличаются - так и не нашел.
Важно ли это отличие вообще - не понятно. Как ловить эту пакость - не понятно. Где почитать или куда дальше лезть - не понятно. Тупик...

Keil 5.20.0.0.
CPU 1986ВЕ92У
Функции CRC стандартны:
- OLD из мануала на Modbus с таблицами констант.
- NEW с сайта https://www.lammertbies.nl с заполнением таблиц при инициализации.
Если что-то еще требуется (проект уже достаточно большой, а влиять как я понимаю может что угодно, откуда угодно) скажите.


Вложения:
08000F18-08000F48 оба варианта.png
08000F18-08000F48 оба варианта.png [ 54.61 КБ | Просмотров: 735 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2018-янв-15 12:20 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1175
Откуда: Тула
Точно нужен сам код ф-ций. Возможно что-то не инициализировано или хромают циклы.
Ещё лучше - минимальный проект(ы). С вероятностью 0,8 пока будете его делать найдёте причину ошибки.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2018-янв-16 10:53 
Не в сети

Зарегистрирован: 2016-окт-17 09:48
Сообщения: 2
Вот ведь...

Холодный перезапуск процессора (Power OFF - Power ON) похоже решает этот вопрос.
Как я понял - он автоматически обнуляет все переменные, в отличие от перезагрузки ПО по JTAG/SWD, которая пишет "поверх" старых кодов.

В принципе это уже устраивает.
Сейчас еще принудительно обнулю все переменные в начале программы...
Печально, что IDE на подобное никак не реагирует, даже warning'ами.
Стреляй себе в ногу - не хочу.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB