dimka8947 0 27 июля, 2017 Опубликовано 27 июля, 2017 · Жалоба Добрый день. Наша комманда столкнулась проблемой и решила поделиться - мало ли кому может пригодиться. STM32CubeMX 4.21.0 версия генерит код, который при запуске впадает в ASSERT изза кривых приоритетов прерывания. Видимо STMicro пропустила Unit testы. Наша платформа: STM32F7 + FreeRTOS + LwIP. STM32CubeF7 версии 1.7.0 Вышла 4.22.0 - не пробовали пока. Также столкнулись с отсутствием поддержки драйверами периферии функций инвалидации и очистки data-кэша. Будьте осторожны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 27 июля, 2017 Опубликовано 27 июля, 2017 · Жалоба Так они вроде кэш и не включают нигде? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka8947 0 27 июля, 2017 Опубликовано 27 июля, 2017 · Жалоба Верно. Из коробки - нет, однако нашли appnote который показывает как это делать. Да и уже делали на ATSAME70Q21 - там было лучше с поддержкой кэша в драйверах, те опыт положительный был. Как оказалось, драйвер Ethernet без функций Invalidate/Clean - пришлось дописывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 27 июля, 2017 Опубликовано 27 июля, 2017 · Жалоба Как оказалось, драйвер Ethernet без функций Invalidate/Clean - пришлось дописывать. У меня всегда было впечатление, что их "драйвер" лишь для примера. "Никаких гарантий, не используйте в аппаратах жизнеобеспечения, мы не виноваты" и так далее. Если нужно что-то боевое, то делать самому. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka8947 0 27 июля, 2017 Опубликовано 27 июля, 2017 (изменено) · Жалоба Это да. И самое страшное, что у большинства так (Атмел,НХП,СТМ, ...). Хотя надо отдать должное НХП S32K микроконтроллер имеет BSP, прошедший SRL1 тесты. Мы уже глянули внутрь, а там ба... даже аккуратный Doxygen есть. Второй момент, в РФ полно клиентов, ( ;) грамотных) которые конечно же скажут при оценке вами задачи, мол "что там делать. всё ж готово от STMicro, бери CubeMX и всё". А по факту окажется гораздо сложнее оценки. Изменено 27 июля, 2017 пользователем Dimka78 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 27 июля, 2017 Опубликовано 27 июля, 2017 · Жалоба Также столкнулись с отсутствием поддержки драйверами периферии функций инвалидации и очистки data-кэша. Будьте осторожны. какой именно кеш? И зачем его очищать (особенно драйверу периферии)?? Или имеются в виду инструкции барьеров: DMB/DSB/...? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 27 июля, 2017 Опубликовано 27 июля, 2017 · Жалоба какой именно кеш? И зачем его очищать (особенно драйверу периферии)?? Какой-какой... Это ж бубль гум STM32F7. Там процессор быстрый-быстрый, но с кешем. Скоро все будем осваивать эти новые грабли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шаманъ 0 27 июля, 2017 Опубликовано 27 июля, 2017 · Жалоба Какой-какой... Это ж бубль гум STM32F7. Там процессор быстрый-быстрый, но с кешем. Скоро все будем осваивать эти новые грабли. Там еще есть MPU через который можно кэширование в той части памяти где расположены буферы просто отключить, ну или в DTCM можно положить (она не кэшируется) - это уже смотря какие у Вас требования. Зачастую это более эффективный вариант, чем "дергать" кэш. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka8947 0 28 июля, 2017 Опубликовано 28 июля, 2017 · Жалоба какой именно кеш? И зачем его очищать (особенно драйверу периферии)?? Или имеются в виду инструкции барьеров: DMB/DSB/...? Для работы в драйвером Ethernet, у которого свой DMA. Он положит в память новый пакет, пока SCB_InvalidateDCache_by_Addr не сделаешь - ничего не получишь. Инструкции: SCB_CleanDCache_by_Addr/SCB_InvalidateDCache_by_Addr Там еще есть MPU через который можно кэширование в той части памяти где расположены буферы просто отключить, ну или в DTCM можно положить (она не кэшируется) - это уже смотря какие у Вас требования. Зачастую это более эффективный вариант, чем "дергать" кэш. А DTCM вариант. Только если рассматривать их appnote, то мороки много (так показалось). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 28 июля, 2017 Опубликовано 28 июля, 2017 (изменено) · Жалоба 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 (в зависимости от обстоятельсв). Изменено 28 июля, 2017 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka8947 0 29 июля, 2017 Опубликовано 29 июля, 2017 · Жалоба Вообще-то правильно делать ПЕРЕД отдачей буфера для обмена по 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 - но занимает много времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться