看了stm8 iap 串口demo,有个地方想不懂,在 GO_Command_Process中ReceiveAddress函数检查地址使用
//check if address is valid
if(!CheckAddress(*((u32*) &DataBuffer[N_ADDR_4]) ))
result = 0;
更新go地址使用
//update GO address
GoAddress = *(TFunction*)(&DataBuffer[N_ADDR_3]);
头文件定义
//indexes to received data
#define N_COMMAND 0
#define N_NEG_COMMAND 1
#define N_ADDR_4 2
#define N_ADDR_3 3
#define N_ADDR_2 4
#define N_ADDR_1 5
TFunction的定义
//typedef @far void (*)(void) TFunction;
typedef @far void (*TFunction)(void);
可以知道TFunction是一个函数指针类型
,但为什么跳转地址的时候直接调用GoAddress就可以了,GoAddress应该是地址的第二个字节啊,第二最高有效位,为什么不是地址的第一个字节的,还有TFunction所指向的函数究竟是什么作用的?
//jump to GO address
GoAddress();
|