может так (без правки скрипта линкера):
Код: Выделить всё
#define FLASH_PAGE_SIZE ((uint32_t)0x00000400) /* FLASH Page Size */
#define FLASH_USER_START_ADDR ((uint32_t)0x08002000) /* Start @ of user
......
FlashErase(FLASH_USER_START_ADDR);
CheckFlashErase(FLASH_USER_START_ADDR);
FlashWord16Prog(FLASH_USER_START_ADDR, (uint16_t)DATA_TO_PROG);
FlashWord16Prog(FLASH_USER_START_ADDR + 2, (uint16_t)(DATA_TO_PROG >> 16));
/* Check the programming of the address */
if ((*(uint32_t *)(FLASH_USER_START_ADDR)) != DATA_TO_PROG)
{
error |= ERROR_PROG;
}https://www.st.com/en/embedded-software ... etsf0.html[/uquote]
Вот в чём дело-то. Как линкёр зарезервирует место под мой массив? Причём внутри секции.Я не вижу способа как внутрь секции с кодом втиснуть мой массив.
Добавлено after 2 minutes 42 seconds:
Их там много. Ткни пальцем в нужный.у меня на гитхабе в stm32samples есть пример: я там выделил во флеше 1 блок для хранения настроек
Добавлено after 18 minutes 40 seconds:
Код: Выделить всё
.myvars :
{
. = ALIGN(1024);
__varsstart = ABSOLUTE(.);
KEEP(*(.myvars));
} > rom Добавлено after 6 minutes 6 seconds:
Хм, 1К зарезервировано, это понятно как. А как их разаместить с нужного адреса? Такого в примере нет.
Ещё уточнения:
а) как все уже, наверно, догадались, это нужно для возможности записи моих данных во флэш;
б) у STM32F746 размер страниц флэш разный, мне нужны две штуки по 32К, а не одна на 128К, поэтому и нужно положить секцию по конкретным адресам.


