一:
可以先对变量指定地址,如
u8 val @0x05
汇编中对指定地址0x05进行赋值等操作
二:
可以把这行代码放在一个函数里,
void Function(void)
{
//your code
}
取Function函数的地址,在copy从这个物理地址读取数据存储到一个数组中,但由于你并不知道编译器编译后汇编代码的大小,所以copy的长度得是一个估计值,
以下是ARM平台的一个程序,原理差不多。是将SectorErase函数Copy到Ram中运行
#define fucmax 0x400//flash处理函数编译后的尺寸,可以利用编译器得出
typedef void(*FUC)(uint32 x,uint16 y);
void EraseSectorInRAM(uint32 SectorIndex)
{
FUC handle_flash;
uint16 dest[fucmax];
uint16 *sour = (uint16*)SectorErase; //取SectorErase的地址
memcpy(dest,sour,fucmax); //copy SectorErase()函数到指定数组
handle_flash = (FUC)dest;
handle_flash(SectorIndex,0);
}
|