Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: 2019-апр-05 11:29 
Не в сети

Зарегистрирован: 2018-окт-23 18:06
Сообщения: 5
Здравствуйте.
Отлаживаюсь на ВЕ94Т, с жтаг отладчиком rlink, под keil5.29.
Простая ситуация - в прерывании обрабатывается некие вычисления с числами double. есть умножение, деление.
в какойто момент туда прилетают нечисла - nan или inf.
и я это вижу тем что отваливается сеанс отладки. попытка снова зашить/подключиться отладчиком неудачны. процесор впадает в кому, и становится адекватен только после выключения питания.
Это нормальное поведение этого процессора?
что неправильно в проекте? как сделать чтобы процессор в мат.исключении был адекватен?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-05 12:30 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1362
Откуда: Тула
alexraynepe196 писал(а):
в какойто момент туда прилетают нечисла - nan или inf.

В какой конкретно? Откуда знаете про нечисла, как фиксируете их? Покажите какие именно не числа (в бинарном виде).
alexraynepe196 писал(а):
и я это вижу тем что отваливается сеанс отладки. попытка снова зашить/подключиться отладчиком неудачны. процесор впадает в кому, и становится адекватен только после выключения питания.

Это может быть симптом аппаратных проблем (патиние, сигналы отладчика, rlink, а также дрова или keil).

Может стоит копнуть в сторону исключений и эскалации исключений.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-06 01:02 
Не в сети

Зарегистрирован: 2018-окт-23 18:06
Сообщения: 5
prostoRoman писал(а):
В какой конкретно? Откуда знаете про нечисла, как фиксируете их? Покажите какие именно не числа (в бинарном виде).


вот проблемный код:
Код:

      // здесь выставлен сигнал на пине процессора
      bool ok = isnormal(rtY.tightenSling)                            //<- это double
            && isnormal(rtY.directionOfRotation)                     //<- это double
            && isnormal(rtY.cmdTightenSlings);                      //<- это double
    system_state(ok, failMODEL);

    // модеь выдает натяжение в 100%
    const double tighten_scale = 100.0;
    int x = lround(rtY.tightenSling * bimp::bimVALUE_MAX / tighten_scale);  // bimp::bimVALUE_MAX = 0xff
    int bimx = ensure_range(x, 0, bimp::bimVALUE_MAX);   // операция с целыми

   // здесь выставляется другой сигнал на пине процессора, но его нет.

я определяю этот кусок кода по выставленым сигналам на пинах процессора. Гдето в указаном коде, процессор стопорится. На что мне тут грешить? совсем немного вариантов.
это было проверено тем что добавил преждевременный return по условию !ok. в этом месте падать перестало.

prostoRoman писал(а):
Это может быть симптом аппаратных проблем (патиние, сигналы отладчика, rlink, а также дрова или keil).
Может стоит копнуть в сторону исключений и эскалации исключений.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-06 19:02 
Не в сети

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

Проверить ядро можно в пошаговом режиме отладки ассемблерного кода.

А вот про неработающий ресет - самое интересное. Как Вы определяете, что МК не сбросился?
По отладчику может быть не корректно, нужно что-то более весомое. Ну и сам сброс выполнять подёргав за ногу (с программными могут быть нюансы...)

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-08 11:46 
Не в сети

Зарегистрирован: 2018-окт-23 18:06
Сообщения: 5
Цитата:
Проверить ядро можно в пошаговом режиме отладки ассемблерного кода.

эту возможность я упустил, надо будет попробовать если случай выдастся - посмотреть как красиво Кейль вылетает из отладки на этой строке. хотя особых сюрпризов не ожидаю.
проблема для меня очевидна - число nan делится на дабловую константу.
то что в этом месте отладчик не вылетает в код исключения, и вообще становится наработоспособен - это проблема. и об этом этот пост - это багрепорт для мидландровцев. Если они вообще интересуются этим форумом.
проверка нормальности дабловых аргументов (isnormal - стандартная функция math.h), перед исполнением деления, снимает проблему. сейчас проц не падает. Поэтому поиск причины считаю исчерпаным.

Код:
А вот про неработающий ресет - самое интересное. Как Вы определяете, что МК не сбросился?
По отладчику может быть не корректно, нужно что-то более весомое. Ну и сам сброс выполнять подёргав за ногу (с программными могут быть нюансы...)

Не сбросился - определяю по тому что отладчик не может подцепиться к процу и снова в него зашить и запустить код. Вот он всегда это делает нормально, а на этом месте не может.
У отладчика стоит режим HWRESET - и он вполне адекватно работает в других ситуациях.
Производитель отладчика - не миландр, а дорогущая буржуйская контора. Это решает - кому в этом тандеме доверять, а кому нет.
Таки сброс кнопкой железной - пробовал.
Этот момент считаю тоже исчерпанным.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-08 12:11 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 450
Откуда: ПКК "Миландр"
Если скинете минимальный проект, из пары строк чтобы заведомо падал, то миландровцы посмотрят в чем дело.

В 1986ВЕ94 используется лицензионное ядро Cortex-M3. При выполнении недопустимых операций, исполнение переходит в обработчики UsageFault_Handler, если он разрешен или сразу в HardFault. Но впринципе, ничто не мешает кампилятору сгенерить код, который убъет тактирование или поломает ноги совмещенные с Jtag раньше, чем дело дойдет до исключения.
В данном случае вероятно дело в библиотеках по работе с double, поскольку аппаратно Cortex-M3 не поддерживает операции с плавающей точкой. Либо с использованием этих библиотек.
Как уже было сказано, ассемблерный код покажет в чем собственно причина.

В качестве предположения:
В регистре BRK->Reg_0F есть бит HSI_ON который разрешает работу генератора HSI. Если кривой код выключит этот бит, то при рестарте МК больше не запустится, т.к. не будет частоты HSI. Ресет тоже не поможет, потому что регистры BRK не сбрасываются при сбросе Reset. Регистры BRK сбрасываются только по питанию.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-08 12:38 
Не в сети

Зарегистрирован: 2018-окт-23 18:06
Сообщения: 5
Цитата:
В качестве предположения:
В регистре BRK->Reg_0F есть бит HSI_ON который разрешает работу генератора HSI. Если кривой код выключит этот бит, то при рестарте МК больше не запустится, т.к. не будет частоты HSI. Ресет тоже не поможет, потому что регистры BRK не сбрасываются при сбросе Reset. Регистры BRK сбрасываются только по питанию.


Спасибо! это вероятный вариант, ибо я перехожу на ПЛЛ, и возможно выключаю HSI. проверю при случае.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-08 13:30 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1362
Откуда: Тула
Vasiliy писал(а):
... Регистры BRK сбрасываются только по питанию.

Видимо MDR_BKP.
В остальном поддерживаю.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-апр-08 21:40 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 96
Есть ещё вариант установить в 0 бит разрешения тактирования блока тактовой частоты (MDR_RST_CLK->PER_CLOCK бит 4)


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

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


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

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


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

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