-
- Не самое лучшее решение размещать в памяти данные через директивы
компилятора, я бы даже сказал максимально плохое. Нужно размещать
секции через скрипт линкера, которому дополнительно можно
объяснить, какие объекты куда класть. Код из куба делает следующее: evgeniy1294(873 знак., 22.02.2021 14:58)
- Всё равно бы пришлось писать #pragma location, только не на точный
адрес, а на имя сегмента. Я бы так и сделала, если бы у меня в
SRAM123 было бы еще что-то, но раз уж в каждой из этих SRAMx у меня
всего по одному массиву, то решила с определением дополнительных
секций не заморачиваться, тем паче что писать задания для линкера я
не шибко умею :). А код с дефайнами из CubeMX мне объяснять не надо
- он мне и самой понятен, неясно только чем RCC_AHB2ENR_D2SRAM1EN Kceния(191 знак., 22.02.2021 20:23)
- D2 - домен питания. Код скорее всего универсален для всего
семейства H7, а может быть даже и для F7, не во всех из которых
этот домен есть. Что касается DATA_IN_D2_SRAM, видимо где-то
определение таки есть, возможно в настройках проекта. - evgeniy1294(22.02.2021 20:27)
- Вопрос чуть в сторону: когда D-Cache включают, то оно на SRAM1-2-3
действует? Это которое: Kceния(51 знак., 22.02.2021 22:08)
- Блок-схема в даташите говорит, что да, без разницы. - evgeniy1294(22.02.2021 23:13)
- Это грустно... Хотя говорят, что через MCU поправимо. А стоит ли
мне вернуться с AXI на DTCM теперь (после того, как DMA-процессы
вынесла в SRAM123)? Есть ли разница, где ОЗУ у программы
располагать? - Kceния(23.02.2021 15:09)
- Немного поправлю: через MPU, AXI - это шина, TCM - память. В TCM обычно помещают стэк и данные программы, с которыми не требуется работать через DMA. - evgeniy1294(23.02.2021 15:53)
- есть. но небольшая - Mahagam(23.02.2021 15:29)
- А вот здесь мужик жалуется, что у него AXI работает вдвое
медленнее, чем DTCM, т.е. почти со скоростью flash => - Kceния(23.02.2021 17:17, ссылка)
- Частота шины AXI 240МГц. Не помню точно спецификацию шины, но
процесс чтения может занять пару тактов шины. - evgeniy1294(23.02.2021 17:31)
- От этого вашего замечания нет проку, поскольку эти 240 МГц не с чем
сравнивать - про частоту DTCM вы умалчиваете. Вдруг DTCM работает с
частотой ядра (480 МГц), и тогда тот мужик прав. - Kceния(23.02.2021 18:06)
- Там на шине ещё и арбитраж. Есть вот такая интересная презентация: - evgeniy1294(23.02.2021 18:55, ссылка)
- Только арбитража мне еще не хватало :) - Kceния(23.02.2021 19:35)
- Ксения, хотите предсказуемых задержек - берите PRU и работайте
только с регистрами. Во всех остальных случаях латентность уже lloyd(407 знак., 23.02.2021 20:51)
- Я лишь только спросила, имеет ли смысл ради ускорения работы кода вернуть ОЗУ программы из AXI назад в DTCM. Причем, миграция на AXI была связана с тем, что на DTCM не работает DMA. После того, как буферы DMA удалось расположить в области SRAM1-2-3, необходимость жития на AXI исчезла, и возник вопрос о выборе между AXI и DTCM. Ответы же на этот вопрос крайне противоречивы - различаются в два раза. - Kceния(23.02.2021 23:11)
- Ксения, хотите предсказуемых задержек - берите PRU и работайте
только с регистрами. Во всех остальных случаях латентность уже lloyd(407 знак., 23.02.2021 20:51)
- Только арбитража мне еще не хватало :) - Kceния(23.02.2021 19:35)
- Там на шине ещё и арбитраж. Есть вот такая интересная презентация: - evgeniy1294(23.02.2021 18:55, ссылка)
- От этого вашего замечания нет проку, поскольку эти 240 МГц не с чем
сравнивать - про частоту DTCM вы умалчиваете. Вдруг DTCM работает с
частотой ядра (480 МГц), и тогда тот мужик прав. - Kceния(23.02.2021 18:06)
- Частота шины AXI 240МГц. Не помню точно спецификацию шины, но
процесс чтения может занять пару тактов шины. - evgeniy1294(23.02.2021 17:31)
- А вот здесь мужик жалуется, что у него AXI работает вдвое
медленнее, чем DTCM, т.е. почти со скоростью flash => - Kceния(23.02.2021 17:17, ссылка)
- The L1-cache can be a performance booster when used in conjunction with memory interfaces on AXI bus. This must not be confused with memories on the Tightly Couple Memory (TCM) interface, which are not cacheable. Any normal memory area can be cacheable, as described above, but the biggest gains are seen on memories accessed by the AXI bus such as the internal Flash memory, internal SRAMs and external memories attached to the FMC or Quad-SPI controllers - evgeniy1294(23.02.2021 00:15)
- Это грустно... Хотя говорят, что через MCU поправимо. А стоит ли
мне вернуться с AXI на DTCM теперь (после того, как DMA-процессы
вынесла в SRAM123)? Есть ли разница, где ОЗУ у программы
располагать? - Kceния(23.02.2021 15:09)
- Блок-схема в даташите говорит, что да, без разницы. - evgeniy1294(22.02.2021 23:13)
- Вопрос чуть в сторону: когда D-Cache включают, то оно на SRAM1-2-3
действует? Это которое: Kceния(51 знак., 22.02.2021 22:08)
- D2 - домен питания. Код скорее всего универсален для всего
семейства H7, а может быть даже и для F7, не во всех из которых
этот домен есть. Что касается DATA_IN_D2_SRAM, видимо где-то
определение таки есть, возможно в настройках проекта. - evgeniy1294(22.02.2021 20:27)
- Всё равно бы пришлось писать #pragma location, только не на точный
адрес, а на имя сегмента. Я бы так и сделала, если бы у меня в
SRAM123 было бы еще что-то, но раз уж в каждой из этих SRAMx у меня
всего по одному массиву, то решила с определением дополнительных
секций не заморачиваться, тем паче что писать задания для линкера я
не шибко умею :). А код с дефайнами из CubeMX мне объяснять не надо
- он мне и самой понятен, неясно только чем RCC_AHB2ENR_D2SRAM1EN Kceния(191 знак., 22.02.2021 20:23)
- Не самое лучшее решение размещать в памяти данные через директивы
компилятора, я бы даже сказал максимально плохое. Нужно размещать
секции через скрипт линкера, которому дополнительно можно
объяснить, какие объекты куда класть. Код из куба делает следующее: evgeniy1294(873 знак., 22.02.2021 14:58)