关于函数指针调用的问题
const unsigned char FlashInit_C[] =
{0x1B, 0x99, 0x3B, 0x18, 0x69, 0x82, 0xB7, 0x45, 0xED, 0x02, 0x19, 0xEA, 0x01, 0x06, 0xCC, 0x03, 0x30, 0x6B, 0x40, 0xED, 0x02, 0x19, 0xEA, 0x01, 0x07, 0x6A, 0x40, 0xE6, 0x08, 0x26, 0x0B, 0xED, 0x02, 0x19, 0xEA, 0x01, 0x04, 0x0D, 0x40, 0x10, 0x20, 0x09, 0xED, 0x02, 0x19, 0xEA.......};
#define CONV_FAR_DATA_TO_FUN_PTR(to, from)\
*(UINT16*)&to = *(UINT16*)((unsigned char*)&from+1);\
*((unsigned char*)&to+2) = *(unsigned char*)&from;
typedef UINT16 (* _far pFLASHINIT)(FLASH_SSD_CONFIG *_near PSSDConfig);
pFLASHINIT pFlashInit,ppFlashInit;
pFlashInit = (pFLASHINIT) FlashInit_C;
CONV_FAR_DATA_TO_FUN_PTR(ppFlashInit,pFlashInit);
这是飞思卡尔官网下的的flash驱动程序,小弟是新手实在看不懂,请高手解释一下,尤其是那个宏定义
指针 C 函数指针
[解决办法]
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
[解决办法]
数组的内容应该是一段机器码,可能有点小加密,就是把第三字节的数据放在了第一字节,所以需要那个宏来解密。