реклама на сайте
подробности

 
 
> STM32F417 вылетает в Hard Fault, NOCP
Quasar
сообщение Jul 7 2014, 14:42
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



Приветствую.

Есть самодельная плата на STM32F417 c Ethernet, LwIP и FreeRTOS. Она периодически улетает в Hard Fault, дамп привожу ниже. Улетает она с причиной NOCP.
Цитата
No coprocessor Usage Fault. The processor does not support coprocessor instructions: 0 = no Usage Fault caused by attempting to access a coprocessor
1 = the processor has attempted to access a coprocessor that does not exist.


Сначала думал FPU, но он включен, и вроде как исправно работает, на камне крутятся два фильтра, использующие FPU. Также, судя по дампу, вылет случается не на операции с плавающей точкой, а на операции UXTAH (см. приложенные картинки).

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

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kan35
сообщение Jul 8 2014, 16:12
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Возможно у вас в параллельных потоках используется FPU. В таком случае следует позаботиться о том, чтобы контекст FPU сохранялся при переключении задач (во freertos какой то флаг разрешения должен быть по идее). Если FPU используется в прерывании, то следует разрешить в процессору сохранять контекст в стек.
Самое простое и быстрое для проверки тезиса - отключить FPU в компиляторе.
Go to the top of the page
 
+Quote Post
Quasar
сообщение Jul 9 2014, 11:50
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



Цитата(kan35 @ Jul 8 2014, 20:12) *
Возможно у вас в параллельных потоках используется FPU. В таком случае следует позаботиться о том, чтобы контекст FPU сохранялся при переключении задач (во freertos какой то флаг разрешения должен быть по идее). Если FPU используется в прерывании, то следует разрешить в процессору сохранять контекст в стек.
Самое простое и быстрое для проверки тезиса - отключить FPU в компиляторе.

Идея правдободобная если учитывать тот факт, что у меня действительно два потока используют FPU, но в моей версии FreeRTOS, контекст переключается приведенной ниже функцией, там есть проверка на использование FPU:

Код
__asm void xPortPendSVHandler( void )
{
    extern uxCriticalNesting;
    extern pxCurrentTCB;
    extern vTaskSwitchContext;

    PRESERVE8

    mrs r0, psp

    /* Get the location of the current TCB. */
    ldr    r3, =pxCurrentTCB
    ldr    r2, [r3]

    /* Is the task using the FPU context?  If so, push high vfp registers. */
    tst r14, #0x10
    it eq
    vstmdbeq r0!, {s16-s31}

    /* Save the core registers. */
    stmdb r0!, {r4-r11, r14}

    /* Save the new top of stack into the first member of the TCB. */
    str r0, [r2]

    stmdb sp!, {r3}
    mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY
    msr basepri, r0
    bl vTaskSwitchContext
    mov r0, #0
    msr basepri, r0
    ldmia sp!, {r3}

    /* The first item in pxCurrentTCB is the task top of stack. */
    ldr r1, [r3]
    ldr r0, [r1]

    /* Pop the core registers. */
    ldmia r0!, {r4-r11, r14}

    /* Is the task using the FPU context?  If so, pop the high vfp registers
    too. */
    tst r14, #0x10
    it eq
    vldmiaeq r0!, {s16-s31}

    msr psp, r0

    #ifdef WORKAROUND_PMU_CM001 /* XMC4000 specific errata */
        #if WORKAROUND_PMU_CM001 == 1
            push { r14 }
            pop { pc }
        #endif
    #endif

    bx r14
    nop
  nop
}



Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Quasar   STM32F417 вылетает в Hard Fault   Jul 7 2014, 14:42
- - vlad_new   Сталкивался с подобным. Помогло отключение, щас то...   Jul 7 2014, 16:16
- - kolobok0   Цитата(Quasar @ Jul 7 2014, 18:42) Есть с...   Jul 8 2014, 05:45
|- - Quasar   Цитата(kolobok0 @ Jul 8 2014, 09:45) приб...   Jul 8 2014, 09:59
|- - kolobok0   Цитата(Quasar @ Jul 8 2014, 13:59) ...Код...   Jul 8 2014, 22:12
|- - Quasar   Цитата(kolobok0 @ Jul 9 2014, 02:12) загл...   Jul 9 2014, 10:04
|- - kolobok0   Цитата(Quasar @ Jul 9 2014, 14:04) Я чест...   Jul 10 2014, 06:11
- - Golikov A.   по идее в кортекс м3-м4 при в ходе в прерывание в ...   Jul 9 2014, 10:22
- - Golikov A.   А конвейеры учтены? Там есть же какие-то барьеры н...   Jul 9 2014, 13:25
|- - Quasar   Цитата(Golikov A. @ Jul 9 2014, 17:25) А ...   Jul 9 2014, 14:50
- - Golikov A.   Вот фиг знает кем. Есть мнение что программистом, ...   Jul 9 2014, 18:59
- - adnega   Очень важно во FreeRTOS правильно указывать приори...   Jul 10 2014, 06:22
- - Quasar   ЦитатаСталкивался с подобным. Помогло отключение, ...   Oct 4 2014, 07:02
|- - jcxz   Это какой именно prefetch отключили? Интересно. И ...   Oct 4 2014, 08:32
||- - Quasar   Цитата(jcxz @ Oct 4 2014, 12:32) Это како...   Oct 4 2014, 13:16
||- - AHTOXA   Цитата(Quasar @ Oct 4 2014, 19:16) Отключ...   Oct 4 2014, 20:01
||- - scifi   Цитата(AHTOXA @ Oct 4 2014, 23:01) Я испо...   Jan 26 2016, 18:07
||- - ataradov   QUOTE (scifi @ Jan 26 2016, 12:07) А заче...   Jan 26 2016, 19:07
||- - scifi   Цитата(ataradov @ Jan 26 2016, 22:07) Что...   Jan 27 2016, 07:17
||- - ataradov   QUOTE (scifi @ Jan 27 2016, 01:17) Даже н...   Jan 27 2016, 07:22
|- - SasaVitebsk   Цитата(Quasar @ Oct 4 2014, 10:02) Перера...   Jan 27 2016, 06:16
|- - Quasar   Цитата(SasaVitebsk @ Jan 27 2016, 09:16) ...   Feb 2 2016, 17:35
- - sidy   Скорее всего отключили буфер предварительной выбо...   Oct 4 2014, 11:09


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 11:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016