|
STM32CubeMX 4.21.0 генерит шмурдяк, FreeRTOS не запускается с LwIP |
|
|
|
Jul 27 2017, 11:56
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 18-07-15
Пользователь №: 87 617

|
Добрый день.
Наша комманда столкнулась проблемой и решила поделиться - мало ли кому может пригодиться. STM32CubeMX 4.21.0 версия генерит код, который при запуске впадает в ASSERT изза кривых приоритетов прерывания. Видимо STMicro пропустила Unit testы.
Наша платформа: STM32F7 + FreeRTOS + LwIP. STM32CubeF7 версии 1.7.0
Вышла 4.22.0 - не пробовали пока.
Также столкнулись с отсутствием поддержки драйверами периферии функций инвалидации и очистки data-кэша. Будьте осторожны.
|
|
|
|
|
 |
Ответов
(1 - 10)
|
Jul 27 2017, 12:41
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 18-07-15
Пользователь №: 87 617

|
Верно. Из коробки - нет, однако нашли appnote который показывает как это делать. Да и уже делали на ATSAME70Q21 - там было лучше с поддержкой кэша в драйверах, те опыт положительный был. Как оказалось, драйвер Ethernet без функций Invalidate/Clean - пришлось дописывать.
|
|
|
|
|
Jul 27 2017, 14:15
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 18-07-15
Пользователь №: 87 617

|
Это да. И самое страшное, что у большинства так (Атмел,НХП,СТМ, ...). Хотя надо отдать должное НХП S32K микроконтроллер имеет BSP, прошедший SRL1 тесты. Мы уже глянули внутрь, а там ба... даже аккуратный Doxygen есть. Второй момент, в РФ полно клиентов, (  грамотных) которые конечно же скажут при оценке вами задачи, мол "что там делать. всё ж готово от STMicro, бери CubeMX и всё". А по факту окажется гораздо сложнее оценки.
Сообщение отредактировал Dimka78 - Jul 27 2017, 14:17
|
|
|
|
|
Jul 28 2017, 14:41
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 18-07-15
Пользователь №: 87 617

|
Цитата(jcxz @ Jul 27 2017, 16:30)  какой именно кеш? И зачем его очищать (особенно драйверу периферии)?? Или имеются в виду инструкции барьеров: DMB/DSB/...? Для работы в драйвером Ethernet, у которого свой DMA. Он положит в память новый пакет, пока SCB_InvalidateDCache_by_Addr не сделаешь - ничего не получишь. Инструкции: SCB_CleanDCache_by_Addr/SCB_InvalidateDCache_by_Addr Цитата(Шаманъ @ Jul 27 2017, 16:54)  Там еще есть MPU через который можно кэширование в той части памяти где расположены буферы просто отключить, ну или в DTCM можно положить (она не кэшируется) - это уже смотря какие у Вас требования. Зачастую это более эффективный вариант, чем "дергать" кэш. А DTCM вариант. Только если рассматривать их appnote, то мороки много (так показалось).
|
|
|
|
|
Jul 28 2017, 16:58
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата SCB_CleanDCache_by_Addr/SCB_InvalidateDCache_by_Addr Вообще-то правильно делать ПЕРЕД отдачей буфера для обмена по DMA. ПРи чтении по DMA из периферии: Если точно буфер выровнен по размеру cache row, то можно SCB_InvalidateDCache_by_Addr. Если еще чьи-то данные могут зависнуть в кэше - то SCB_CleanDCache_by_Addr При записи из памяти в периферию: SCB_CleanDCache_by_Addr/SCB_CleanInvalidateDCache_by_Addr (в зависимости от обстоятельсв).
Сообщение отредактировал Genadi Zawidowski - Jul 28 2017, 17:00
|
|
|
|
|
Jul 29 2017, 15:13
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 18-07-15
Пользователь №: 87 617

|
Цитата(Genadi Zawidowski @ Jul 28 2017, 18:58)  Вообще-то правильно делать ПЕРЕД отдачей буфера для обмена по DMA. ПРи чтении по DMA из периферии: Если точно буфер выровнен по размеру cache row, то можно SCB_InvalidateDCache_by_Addr. Если еще чьи-то данные могут зависнуть в кэше - то SCB_CleanDCache_by_Addr
При записи из памяти в периферию: SCB_CleanDCache_by_Addr/SCB_CleanInvalidateDCache_by_Addr (в зависимости от обстоятельсв). Спасибо. Замечание очень важное. Да, Ethernet буфера у меня выровнены по размеру cache row. Есть ещё SCB_CleanInvalidateDCache и SCB_CleanDCache - но занимает много времени.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|