KEILv5 STM32 程序在APP与BOOTLOADER共用方法
扫描二维码
随时随地手机看文章
先将需要共用的程序定义在固定了FLASH地址中:
#pragma arm section code=".ARM.__at_0x800F000"
void Function(void)
{
}
#pragma arm section
在Bootloader中调用固定地址的程序:
((void (*)(void))0x0800F001)();
**注意:使用的是STM32F105VC,使用的thumb指令集,调用的程序地址最后一位为1,而不是”0x0800F000“
方法二:(未验证)
将程序的基地址写成表的形式存储在固定位置比如0x8008000
const uint32_t func_table[] =
{ (uint32_t)&func1,
(uint32_t)&func2};
在需要调用的地方直接使用根据地址表调用即可:
// 声明函数指针
void (func1*)(int a);
void (func2*)(int a, int b);
void app_init(void)
{
// 取函数表基地址
uint32_t *table_base = (uint32_t*)(0x08008000);
//初始化函数指针
func1 = (void (*)(int))(table_base[0] | 0x1);
func2 = (int (*)(int, int))(table_base[1] | 0x1);
// 调用函数
func1(11);
}