ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
940791 Топик полностью
Dingo (16.08.2019 12:44 - 12:50, просмотров: 107) ответил Mefod на Так и сделано. Но вот интересно есть ли у gcc что-то подобное как у iar с кейлом. Что находится в сети либо не работает, либо делает не так (как пример через указатель)
Дык всё равно к линкеру же: 
/* Specify the memory areas */
MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 1024K
  RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 128K
  MEMORY_B1 (rx)  : ORIGIN = 0x60000000, LENGTH = 0K
  CCMRAM (rw)     : ORIGIN = 0x10000000, LENGTH = 64K
}
и тут же
  /* MEMORY_bank1 section, code must be located here explicitly            */
  /* Example: extern int foo(void) __attribute__ ((section (".mb1text"))); */
  .memory_b1_text :
  {
    *(.mb1text)        /* .mb1text sections (code) */
    *(.mb1text*)       /* .mb1text* sections (code)  */
    *(.mb1rodata)      /* read-only data (constants) */
    *(.mb1rodata*)
  } >MEMORY_B1
Прямо с примером. Файл линкера у меня имеет расширение *.ld Дальше - дело техники: как уже написали подвинуть область памяти, а на освободившемся пространстве сделать свой сегмент с преферансом и куртизанками и использовать как душе угодно. Если STM32, то загляните SPL ещё в файлы statup_*.s и обратите внимание на функцию void SystemInit (void). В частности, там есть фрагмент #ifdef DATA_IN_ExtSRAM SystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM */ Замороченно, конечно, но ничего сверхсложного.