Пишу для EFM32G880F128 в IDE Keil. Понадобилось разместить функцию для исполнения из RAM.
Как вычитал, для этого в Keil используются scatter файлы.
Вот какой файл выдал Keil в моём проекте:
Код
LR_IROM1 0x00000000 0x00020000 { ; load region size_region
ER_IROM1 0x00000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00004000 { ; RW data
.ANY (+RW +ZI)
}
}
ER_IROM1 0x00000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00004000 { ; RW data
.ANY (+RW +ZI)
}
}
Не поможет ли кто грамотно вставить RAM секцию в этот файл?
Вот мой, неработающий, вариант:
Код
LR_IROM1 0x00000000 0x00020000 { ; load region size_region
ER_IROM1 0x00000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00004000 { ; RW data
.ANY (+RW +ZI)
}
MCU_IRAM +0 { : My section, called MCU_RAM_CODE
.ANY (+RW +ZI)
.ANY (MCU_RAM_CODE)
}
}
ER_IROM1 0x00000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00004000 { ; RW data
.ANY (+RW +ZI)
}
MCU_IRAM +0 { : My section, called MCU_RAM_CODE
.ANY (+RW +ZI)
.ANY (MCU_RAM_CODE)
}
}
В исходном коде сделал так:
#define __SI32_RRAM __attribute__ ((section('MCU_RAM_CODE')))
...
__SI32_RRAM void WriteToFlash (void)
Получил от компилятора:
Error 600 Too many characters in character constant.
Со scatter файлами дело никогда не имел, поэтому, видимо, написал ерунду.
Не поможет ли кто грамотно написать?