Поиск
Показаны результаты для тегов 'keil stm32h7'.
-
Help! Пытаюсь распределить память в H7, но видимо. что-то "не так" делаю. В проце два региона - IRAM1 IRAM2, по дефолту включены обы на вкладке Target. Я на влкдке линкера снимаю чекбокс "брать распределени с таргета" и даю ему свой скаттер-файл. Дефотный был такой: ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00200000 { ; load region size_region ER_IROM1 0x08000000 0x00200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } RW_IRAM2 0x24000000 0x00080000 { .ANY (+RW +ZI) } } Теперь я делаю две вещи, первая - новый скаттер: ; My Scatter: LR_IROM1 0x08000000 0x00200000 { ; load region size_region ER_IROM1 0x08000000 0x00200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x0001C000 { ; RW data .ANY(+RW +ZI) } RW_IRAM11 0x2001C000 0x00004000 { ; data for DMA .ANY(+RW +ZI) } RW_IRAM2 0x24000000 0x00080000 { .ANY (+RW +ZI) } } Т.е я отрезал от IRAM1 кусочек. и назвал его IRAM11 второе что я делаю, обьявляю переменную: vu16 ADC_Buf[2] __attribute__((section("RW_IRAM11"))); Компилю, смотрю мап-файл - IRAM1 и IRAM11 выкинуты, все запихнуто в IRAM2. Ладно, второй вариант - переношу эту переменную в отлдельный фал adc_buf.c, а в скаттере пишу: RW_IRAM11 0x2001C000 0x00004000 { ; data for DMA adc_buf.o(+RW +ZI) } Все замечательно, теперь эта переменная в IRAM11. Но все остальные переменный проекта - в IRAM2. Т.е. во 1-х, вся область IRAM1 пропадает зря. Во 2-х - полчается что во втором варианте, атрибут с именем секции в определении этой переменной можно убрать, т..е все переменные, определенные в этом файле и так будут в IRAM11, а в первом варианте почему линкер плевать на него хотел, с высокой колокольни? P.S. Если кому интерено, для чего весь этот геморрой - чтобы сделать IRAM11 не кешируемой, через MPU. Т.е чтобы масивы, с которыми идет работа по ПДП была без D-кэша.