zjj841011 发表于 2010-10-8 15:00:46

绝对绕口的一个问题! 求解。

系统中可能使用到两种DataFlash,为MX25系列或者AD45系列。为了保证程序的通用性和自适应性,我定义了一个函数数组DataFlashWrite。

//写函数
void (*DataFlashWrite)(uint8 *target_address, uint32 flash_address, uint32 byte_length) =
{
        MX25_Write,
        AD45_Write
};

问题是现在DataFlashWrite数组是占用RAM空间,我想把数组定义在Code Flash中,如何实现啊,我尝试了几种写法都不对:

尝试1:void (const *DataFlashWrite)(uint8 *target_address, uint32 flash_address, uint32 byte_length)

尝试2:void (const (*DataFlashWrite))(uint8 *target_address, uint32 flash_address, uint32 byte_length)

这么绕口的问题我实在不知道怎么表示了,请大家帮忙!

zjj841011 发表于 2010-10-8 15:04:47

在线等待....

dr2001 发表于 2010-10-8 15:12:35

先Typedef,然后按照普通变量那样进行声明和操作。
可读性比较强,也比较容易操作。

如果直接声明,应该形如:
void (* const Data...)(blabla);
你要的是指针变量本身是const的,而不是他指向的对象const。

zjj841011 发表于 2010-10-8 15:22:28

2楼正解

不过我还是被绕的不知道为什么

dr2001 发表于 2010-10-9 09:08:18

类比定义int * ptr来理解:
void ()(blabla)是函数的抽象类型,相当于int。
只不过这个类型的Name要写在函数名那个位置而已,也就是(* ptr)写的位置变了。

函数指针从可读性上说,Typedef成普通变量操作更好。
大家不缺少那个变量名 & 不差那一两行代码。
页: [1]
查看完整版本: 绝对绕口的一个问题! 求解。