Перейти к содержанию
    

STM32F417 вылетает в Hard Fault

Это какой именно prefetch отключили? Интересно.

И действительно все fault-ы после этого прекратились?

 

PS: У Вас кстати LwIP плохо портирован (или вообще не портирован) на Cortex. Видно по куску кода в самом первом посте

(SWAP_BYTES_IN_WORD).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего отключили буфер предварительной выборки Prefetch buffer: FLASH_ACR_PRFTEN. Сам сталкивался с тем что при включенном буфере программа попадает в HardFault, из произвольного места.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это какой именно prefetch отключили? Интересно.

И действительно все fault-ы после этого прекратились?

 

PS: У Вас кстати LwIP плохо портирован (или вообще не портирован) на Cortex. Видно по куску кода в самом первом посте

(SWAP_BYTES_IN_WORD).

 

Отключил FLASH_ACR_PRFTEN. После этого, пока не было ни одного Hard_Fault. Я как-то и падения производительности не заметил. Сейчас 5 фильтров IIR использующих FPU крутятся и 50 частот обрабатывается алгоритмом Герцеля + Speex. Хватает еще и на сеть вполне.

 

По поводу оптимизации LwIP, это тот который в STM32Cube идет. То есть, я его ни как не правил, наверное его ни кто не оптимизировал под Cortex.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отключил FLASH_ACR_PRFTEN.

У вас наверное ревизия A. Там не работает префетч, это описано в еррате.

В ревизии Z это исправили.

Я использовал вот такой код, чтобы включать префетч только в ревизии Z:

    static const uint32_t REVISION_Z = 0x10010000;
    FLASH->ACR = 0
            | ((DBGMCU->IDCODE & DBGMCU_IDCODE_REV_ID) == REVISION_Z ? FLASH_ACR_PRFTEN : 0)
            | FLASH_ACR_ICEN
            | FLASH_ACR_DCEN
            | FLASH_ACR_LATENCY_5WS
        ;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я использовал вот такой код, чтобы включать префетч только в ревизии Z:

А зачем его включать, если и без него всё работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем его включать, если и без него всё работает?

Чтобы работало быстрее? Без кешей тоже все работает и без любых других оптимизаций.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переразвел немного железку, увеличил стеки, перетащил работу FPU в один поток. Все равно продолжились вылеты. То NOCP, то Undefened Instruction. Отключил префтеч. буфер, HardFault'ы как рукой сняло.

У меня FreeRTOS, LwIP, десяток задач, stm32f407. FPU в полный рост причём в очень многих задачах. Математики очень много. Всё работает ничего не вылетает. Так что ничего не надо переносить.

Гарантированные размеры стека настраиваются легко. Выберите режим, чтобы он заполнялся. дайте поработать да и посмотрите докуда доходит. FreeRTOS это позволяет сделать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы работало быстрее? Без кешей тоже все работает и без любых других оптимизаций.

В моей практике если "уже работает", ни разу не было "лучше бы быстрее". Даже наоборот - станешь ускорять, что-нибудь напутаешь и что-нибудь сломаешь. Это же не компьютерная игра, а embedded.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Даже наоборот - станешь ускорять, что-нибудь напутаешь и что-нибудь сломаешь.
Я не путаю и не ломаю. А чем дальше в лес, тем сложнее без наворотов. Cortex-M7 на 300 МГц без ускорений сильно тормозится.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня FreeRTOS, LwIP, десяток задач, stm32f407. FPU в полный рост причём в очень многих задачах. Математики очень много. Всё работает ничего не вылетает. Так что ничего не надо переносить.

Гарантированные размеры стека настраиваются легко. Выберите режим, чтобы он заполнялся. дайте поработать да и посмотрите докуда доходит. FreeRTOS это позволяет сделать.

 

У меня тоже все работает и ничего не вылетает, проблема была в префтече на ревизии А, собственно выше я так и написал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...