Realking 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 2 minutes ago, GenaSPB said: О... неработающая с data cache программа - известная проблема. Особенно при наличия обмена по DMA Зачем Вам нужен MPU? DMA не юзаю А зачем? В начале писал, чтобы невыровненный доступ был разрешен. И не задавайте вопросы зачем.. Много причин для этого есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 7 минут назад, Realking сказал: с ним тоже не работает.. и пишут что для SDRAM его надо отключать Кто пишет? Если речь про MPU_RASR.B, то у меня в проекте для STM32F429 с SDRAM этот бит установлен для всех регионов SDRAM. И работает прекрасно. И DMA он тож не мешает. И вообще: // s // i t s // z e a x r //base e x c b s p n d T(0xD0000000, 23, 0, 1, 1, 1, 3, 1, 0), //SDRAM_regionB (данные) T(0xD0000000, 18, 0, 1, 1, 0, 7, 0, 0) //SDRAM_regionA (код) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 40 minutes ago, jcxz said: Кто пишет? Если речь про MPU_RASR.B, то у меня в проекте для STM32F429 с SDRAM этот бит установлен для всех регионов SDRAM. И работает прекрасно. И DMA он тож не мешает. И вообще: // s // i t s // z e a x r //base e x c b s p n d T(0xD0000000, 23, 0, 1, 1, 1, 3, 1, 0), //SDRAM_regionB (данные) T(0xD0000000, 18, 0, 1, 1, 0, 7, 0, 0) //SDRAM_regionA (код) Возможно у Cortex-M4 это и работает, но тут походу другой случай Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 1 hour ago, Realking said: Много причин для этого есть Мне не понадобился. Слышал про необходимость, связаную с FMC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 7 часов назад, GenaSPB сказал: О... неработающая с data cache программа - известная проблема. Особенно при наличия обмена по DMA Расскажите пожалуйста про data cache + DMA подробнее. А то кому эта проблема известна, а кому не известна. Лично я больше месяца времени убила в происках причины, отчего у меня DAC через DMA не работает. Оказалось, "двойная ошибка": первая та, что data cache был включен, а вторая та, что RAM начинался с адреса 0x20000. А всё потому, что Examples такие - в них и функция SCB_EnableDCache() вызывается, и адрес RAM в проекте таков. А работал тот пример только благодаря тому, что массив чисел, которые DMA гнал на DAC, был объявлен как const, а потому располагался в ROM, и поэтому работе DMA ни data cache не мешал, ни адрес ROM. И кто только такие примеры сочиняет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 37 минут назад, Xenia сказал: Расскажите пожалуйста про data cache + DMA подробнее. А то кому эта проблема известна, а кому не известна. Думаю, @GenaSPB имеет ввиду обыкновенное обеспечение когерентности данных при работе с DMA. Вот тут уже затрагивали этот вопрос немного. Осталось понять, что Геннадий имеет ввиду под Цитата О... неработающая с data cache программа - известная проблема. Особенно при наличия обмена по DMA ведь при наличии только лишь CPU как единственного мастера на шине проблем с когерентностью данных не должно быть, вроде как... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба Да разумеется я об этом и говорил. Связано с тем что в h7 dma ничего про кеш не знает. Перед запуском на чтение из ацп в память для соответствующей области выполнить invalidate или clean invalidate по смыслу. Перед передачей clean или его модификацию clean invalidate. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 1 час назад, GenaSPB сказал: Да разумеется я об этом и говорил. Связано с тем что в h7 dma ничего про кеш не знает. А вы-то об этом как узнали? :) Я догадалась, что DMA всегда пишет в реальную память, не взирпая на кэш, только после того, как этот кэш отключила. P.S. А кстати, много ли мы теряем, отключая D-cache? Ясно, что отключать кэш инструкций I-cache жалко, т.к. flash читается медленно с делэями. А насколько быстрее читается D-cache по сравнению с оперативкой? Ответ на этот вопрос для меня актуален, поскольку эффект от кэширования ROM хорошо заметен, а эффект от отключение D-cache остался мной незамеченным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 1 час назад, GenaSPB сказал: Связано с тем что в h7 dma ничего про кеш не знает. Интересно сказано, а есть какие-то ДМА, которые "знают" про кэш? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 2 минуты назад, mantech сказал: Интересно сказано, а есть какие-то ДМА, которые "знают" про кэш? Ну если есть полностью кэш-когерентные системы, значит... есть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 1 минуту назад, Arlleex сказал: Ну если есть полностью кэш-когерентные системы, значит... есть Вот это мне и интересно, сколь АРМов не видел, все так же, как тут, может ДСПшки какие... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 36 минут назад, mantech сказал: Вот это мне и интересно, сколь АРМов не видел, все так же, как тут, может ДСПшки какие... В ARM-ах тоже не видел... Думаю в каких-нибудь CPU для персоналок такое есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 20 октября, 2020 Опубликовано 20 октября, 2020 (изменено) · Жалоба Я книжки читал.... про процессоры. Виртуалку на базе v86 режима в 386м. Когда-то давно во времна qemm и himem.sys. dpmi. Картинки рассматривал. Да, в x86 это все обеспечивается аппаратурой. Эти все механизмы - кеш и страничная трансляция адресов - в arm переехали почти без модификаций. Но лучше изучать до появления проблем. Изменено 20 октября, 2020 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 1 hour ago, Arlleex said: Ну если есть полностью кэш-когерентные системы, значит... есть Есть, но это создаёт массу проблем с масштабированием системы. Для поддержания когерентности у тех же процов архитектуры IA-32 (в народе -- x86) есть специальная шина для обмена инфой между процами; а обмениваться должны все процы со всеми, поэтому есть предел числа процов, выше которого проблематично подняться технически. А есть и противоположная крайность -- где когерентности нормальной нет даже в рамках одного проца (проц записал команду самому себе для последующего выполнения -- но сам об этом не узнает, если принудительно не очистить кэш команд и очередь предвыборки). Ну и полно промежуточных вариантов с разной степенью удобства для программиста и для железа. Например, в IBMовских мэйнфреймах (хоть Системы 360, появившейся ещё в 1964-м, что у её современных потомоков, выпускаемых вот прям сейчас) проц видит собственные записи в память (за исключением некоторых ограничений, но вполне разумных), однако не видит записи со стороны других процов и канальной подсистемы (грубо говоря, DMA), поэтому там нужно соблюдать определённые правила при написании многопоточных программ (потенциально работающих одновременно на нескольких процах) и при вводе-выводе, но зато можно строить компы с сотнями и тысячами процов -- и всё будет работать. ARMы в этом смысле находятся где-то между совсем "некогерентными" архитектурами и означенными мэйнфреймами: кое-что обеспечивается, но бОльшая часть заботы о когерентности лежит на программисте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 20 октября, 2020 Опубликовано 20 октября, 2020 · Жалоба 2 hours ago, Xenia said: А вы-то об этом как узнали? :) Я догадалась, что DMA всегда пишет в реальную память, не взирпая на кэш, только после того, как этот кэш отключила. P.S. А кстати, много ли мы теряем, отключая D-cache? Ясно, что отключать кэш инструкций I-cache жалко, т.к. flash читается медленно с делэями. А насколько быстрее читается D-cache по сравнению с оперативкой? Ответ на этот вопрос для меня актуален, поскольку эффект от кэширования ROM хорошо заметен, а эффект от отключение D-cache остался мной незамеченным. Если кэшируется содержимое внутренней SRAM, то мало что теряем (а DTCM, как правило, и вовсе никогда не кэшируется, ибо работает со скоростью кэша -- но к ней DMA часто не имеет доступа). А вот если кэшируется внешняя память, особенно какая-нибудь там DDR2+, то кэши очень большой выигрыш дают (из-за большой латентности такой памяти). Кстати говоря, если включить MPU, то можно выделить под ту область, с которой DMA работает, отдельный блок с точки зрения MPU, и при этом назначить ему атрибут "некэшируемый". Тогда, понятно дело, проц не будет соответствующую область памяти кэшировать, а вот остальную -- будет, что представляется наилучшим решением (нет потерь скорости для работы с большей частью памяти и нет проблем с той областью, где надо взаимодействовать с DMA). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться