打印
[STM32F1]

(*CopyRoutine)(0);这句为什么可以这样写。求大神解惑

[复制链接]
1505|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
543049411|  楼主 | 2014-5-4 16:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(*CopyRoutine)(0);这句为什么可以这样写。求大神解惑,我在ST提供的USB例程中看到这句有些疑问。在下C语言学艺不精。求各位解释一下。


谢谢!
沙发
msblast| | 2014-5-4 16:28 | 只看该作者
CopyRoutine是一个函数指针变量。
比如
void (*CopyRoutine)(int) = NULL;
void func(int val)
{
    ...
}
CopyRoutine = func;
(*CopyRoutine)(0);

CopyRoutine(0);//这样也没错,相当于调用了func

使用特权

评论回复
板凳
香水城| | 2014-5-4 16:29 | 只看该作者
CopyRoutine的原型是一个函数指针,函数参数是16位变量,函数返回值是指向8位变量的指针

它的默认值是NULL,但是根据主机发出的request而被动态的赋值,比如:
CopyRoutine = pProperty->GetDeviceDescriptor
CopyRoutine = pProperty->GetConfigDescriptor
。。。。。。(还有很多)。。。。。。

该函数的作用和意义是:通过这个函数获得用户的数据缓冲区地址,从而可以在【数据出】阶段把收到的数据拷贝到用户缓冲区,或者在【数据入】阶段把用户缓冲区的数据拷贝到USB硬件发送缓冲区。

当以Length=0调用该函数时,CopyRoutine返回用户缓冲区的长度;这是为了处理用户缓冲区的长度和主机SETUP数据请求长度不符的情况下,不至于造成用户缓冲区溢出。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

26

帖子

0

粉丝