返回> 网站首页
gcc编译STM32程序指定常量和函数位置
yoours2023-10-02 17:35:29
简介一边听听音乐,一边写写文章。
一、boot程序跳转App
1. 由bootloader跳转到应用需要修改应用的ld文件的FLASH地址,如:
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
BOOT_FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K
FLASH (rx) : ORIGIN = 0x8010000, LENGTH = 960K
}
2. 修改中断向量表地址
3. 注意bootloader跳转之前的栈顶校验地址
二、指定常量版本信息和函数在FLASH上的地址
1. 修改ld文件
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH
.version_addr 0x8010200:
{
KEEP(*(.version_addr))
} >FLASH
.bspInit_addr 0x8010300:
{
KEEP(*(.bspInit_addr))
} >FLASH
*在 为避免影响中断向量表地址,则在isr_vector 后进行定义。
2. 修改.c文件
版本常量定义
__volatile__ const char Version[] __attribute__((section(".version_addr"))) =
{
'y', 'x', 't', '2', '.',
'0', ' ', '_', '2', '3',
'0', '8', '2', '1', '_',
'0', '0', '4', '8', '5'
};
函数定义:
__attribute__((section(".bspInit_addr"))) void bspInit()
{
}