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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> STM32F417 вылетает в Hard Fault, NOCP
jcxz
сообщение Oct 4 2014, 08:32
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Это какой именно prefetch отключили? Интересно.
И действительно все fault-ы после этого прекратились?

PS: У Вас кстати LwIP плохо портирован (или вообще не портирован) на Cortex. Видно по куску кода в самом первом посте
(SWAP_BYTES_IN_WORD).
Go to the top of the page
 
+Quote Post
sidy
сообщение Oct 4 2014, 11:09
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Скорее всего отключили буфер предварительной выборки Prefetch buffer: FLASH_ACR_PRFTEN. Сам сталкивался с тем что при включенном буфере программа попадает в HardFault, из произвольного места.
Go to the top of the page
 
+Quote Post
Quasar
сообщение Oct 4 2014, 13:16
Сообщение #18


Местный
***

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



Цитата(jcxz @ Oct 4 2014, 12:32) *
Это какой именно prefetch отключили? Интересно.
И действительно все fault-ы после этого прекратились?

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


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

По поводу оптимизации LwIP, это тот который в STM32Cube идет. То есть, я его ни как не правил, наверное его ни кто не оптимизировал под Cortex.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 4 2014, 20:01
Сообщение #19


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Quasar @ Oct 4 2014, 19:16) *
Отключил 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
        ;


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 26 2016, 18:07
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(AHTOXA @ Oct 4 2014, 23:01) *
Я использовал вот такой код, чтобы включать префетч только в ревизии Z:

А зачем его включать, если и без него всё работает?
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 26 2016, 19:07
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (scifi @ Jan 26 2016, 12:07) *
А зачем его включать, если и без него всё работает?

Чтобы работало быстрее? Без кешей тоже все работает и без любых других оптимизаций.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 27 2016, 06:16
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Quasar @ Oct 4 2014, 10:02) *
Переразвел немного железку, увеличил стеки, перетащил работу FPU в один поток. Все равно продолжились вылеты. То NOCP, то Undefened Instruction. Отключил префтеч. буфер, HardFault'ы как рукой сняло.

У меня FreeRTOS, LwIP, десяток задач, stm32f407. FPU в полный рост причём в очень многих задачах. Математики очень много. Всё работает ничего не вылетает. Так что ничего не надо переносить.
Гарантированные размеры стека настраиваются легко. Выберите режим, чтобы он заполнялся. дайте поработать да и посмотрите докуда доходит. FreeRTOS это позволяет сделать.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 27 2016, 07:17
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ataradov @ Jan 26 2016, 22:07) *
Чтобы работало быстрее? Без кешей тоже все работает и без любых других оптимизаций.

В моей практике если "уже работает", ни разу не было "лучше бы быстрее". Даже наоборот - станешь ускорять, что-нибудь напутаешь и что-нибудь сломаешь. Это же не компьютерная игра, а embedded.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Jan 27 2016, 07:22
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



QUOTE (scifi @ Jan 27 2016, 01:17) *
Даже наоборот - станешь ускорять, что-нибудь напутаешь и что-нибудь сломаешь.
Я не путаю и не ломаю. А чем дальше в лес, тем сложнее без наворотов. Cortex-M7 на 300 МГц без ускорений сильно тормозится.
Go to the top of the page
 
+Quote Post
Quasar
сообщение Feb 2 2016, 17:35
Сообщение #25


Местный
***

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



Цитата(SasaVitebsk @ Jan 27 2016, 09:16) *
У меня FreeRTOS, LwIP, десяток задач, stm32f407. FPU в полный рост причём в очень многих задачах. Математики очень много. Всё работает ничего не вылетает. Так что ничего не надо переносить.
Гарантированные размеры стека настраиваются легко. Выберите режим, чтобы он заполнялся. дайте поработать да и посмотрите докуда доходит. FreeRTOS это позволяет сделать.


У меня тоже все работает и ничего не вылетает, проблема была в префтече на ревизии А, собственно выше я так и написал.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:21
Рейтинг@Mail.ru


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