KEILv5 STM32 程序在APP與BOOTLOADER共用方法
先將需要共用的程序定義在固定了FLASH地址中:
#pragma arm section code=".ARM.__at_0x800F000"
void Function(void)
{
}
#pragma arm section
在Bootloader中調(diào)用固定地址的程序:
((void (*)(void))0x0800F001)();
**注意:使用的是STM32F105VC,使用的thumb指令集,調(diào)用的程序地址最后一位為1,而不是”0x0800F000“
方法二:(未驗證)
將程序的基地址寫成表的形式存儲在固定位置比如0x8008000
const uint32_t func_table[] =
{ (uint32_t)&func1,
(uint32_t)&func2};
在需要調(diào)用的地方直接使用根據(jù)地址表調(diào)用即可:
// 聲明函數(shù)指針
void (func1*)(int a);
void (func2*)(int a, int b);
void app_init(void)
{
// 取函數(shù)表基地址
uint32_t *table_base = (uint32_t*)(0x08008000);
//初始化函數(shù)指針
func1 = (void (*)(int))(table_base[0] | 0x1);
func2 = (int (*)(int, int))(table_base[1] | 0x1);
// 調(diào)用函數(shù)
func1(11);
}