Еще немного про Core-Coupled Memory (CCM) на STM32

В дополнение к прошлой заметке
Как я уже говорил, у CCM есть некоторые особенности, чтобы их понять и не наступать на грабли, по каждому чипу лучше всего сверяться с документацией. Например для STM32F407, CCM подключена только к D-BUS (шине данных), поэтому на этих чипах нет никакой возможности выполнять код лежащий в CCM.
Для STM32F3xx наоборот, ST вполне даже рекомендует оптимизировать быстродействие переместим код в CCM, обещая при этом +43% к производительности. Но опять же, согласно RM0316 CCM не имеет подключения к шинам DMA S3,S4 поэтому DMA работать откажутся.

По поводу производительности, по тестам для STM32F407 выходит такой результат, в таблице время выполнения теста относительно FLASH/RAM (больше — хуже):

Код в FLASH Код в SRAM
Данные в SRAM 0% +14.53%
Данные в CCM +2.4% +15.73%

А вот результаты того же теста для STM32F303:

Код в FLASH Код в SRAM Код в CCM
Данные в SRAM 0% 0% -16.93%
Данные в CCM +4.6% +10.77% -12.32%

методика простая:

uint32_t test(volatile uint32_t *data, size_t size) {
    uint32_t s = HAL_GetTick();
    for (int k = 0; k < COUNTER; k++) {
        volatile uint32_t *ptr;
        size_t i = size;
        ptr = data;
        while (--i)
            *ptr++ = 0xAABBCCDD;
        i = size;
        ptr = data;
        while (--i)
            *ptr++ ^= 0xDDCCBBAA;
        i = size;
        ptr = data;
        uint32_t v = 0xFFFFFFFF;
        while (--i)
            v ^= *ptr++;
    }
    s = HAL_GetTick() - s;
    return s;
}