大侠们*(U32 *)downPt是什么意思,有点迷糊。

[复制链接]
7022|10
 楼主| d0112319 发表于 2011-9-15 11:44 | 显示全部楼层 |阅读模式
TE, TI, ARM, FOR, USB
是ARM中USBD例程,大题是这样的:extern volatile U8 *downPt;RdPktEp3((U8 *)downPt, 8);        void RdPktEp3(U8 *buf,int num){    int i;                for(i=0;i<num;i++)    {        buf[i]=(U8)rEP3_FIFO;            }}download_addr = *(U32 *)downPt;   download_len  = *(U32 *)(downPt+4);后面的这两句是把指针downPtv的地址赋给download_addr吗?不太明白,哪位大侠给解释一下,谢谢!
 楼主| d0112319 发表于 2011-9-15 11:45 | 显示全部楼层
代码怎么这么乱是这样的?
extern volatile U8 *downPt;
RdPktEp3((U8 *)downPt, 8);       
void RdPktEp3(U8 *buf,int num)
{
    int i;
           
    for(i=0;i<num;i++)
    {
        buf[i]=(U8)rEP3_FIFO;       
    }
}
download_addr = *(U32 *)downPt;
download_len  = *(U32 *)(downPt+4);
xinzha 发表于 2011-9-15 13:30 | 显示全部楼层
这些都是c里面指针的用法,lz去查查c语言的书是最好的,别人告诉你怎么回事对你没帮助。
laoqian112 发表于 2011-9-15 13:31 | 显示全部楼层
将downPt+4转化为U32型指针。然后,将这个指针指向地址的值赋给download_len。
 楼主| d0112319 发表于 2011-9-15 14:47 | 显示全部楼层
有C语言的书,没找到这个方面的内容,书上就介绍了指向指针的指针,就是**P,感觉和这个也不太一样。
看C语言书记不住,想做实践中在学习一下。
3# xinzha
 楼主| d0112319 发表于 2011-9-15 14:52 | 显示全部楼层
是不是这个(U32 *)作用是把downPt强制转换成32位指针,在加上*(U32 *)downPt就是取其指向地址的值,这个和*downPt有什么区别,*downPt也是取指向地址的值?
ADaiPlay 发表于 2011-9-22 21:27 | 显示全部楼层
楼主还在看USBD吗?我也正在看呢,交流交流。这个地方不去纠结也没关系吧,知道这是将从USB第一个传输包里将传输地址和文件大小读取出来,就足够了吧
 楼主| d0112319 发表于 2011-11-13 16:54 | 显示全部楼层
我这本来就是业余,也算不上爱好吧,反正就是没事干实在无聊了就看看,本身我是做结构的。现在搞定了USB固件程序,发现还要开发USB驱动程序和上位机程序,原来学过C没学过C++,看来要开发驱动和上位机程序,需要先学学VC++了。
xhtxzxw 发表于 2011-11-13 21:31 | 显示全部楼层
不复杂的指针问题。估计LZ的老师对指针很迷糊(我的经验,愿意来二姨妈家问C的,都至少对C有  性 娶)。
用剥大葱的思路就很容易理解了:
*(U32 *)downPt ===> *** + 瓤(U32 *)downPt ====>*** + 真皮(U32 *) + 核downPt。
downPt不管是它什么类型,加上真皮,就成为指针了。
“(U32 *)downPt” 是一个指向32位无符号数的指针;
*指针 = 指针所指的值
所以“*(U32 *)downPt”就是:将downPt作为指向32位无符号数的指针(即:将downPt的值作为地址),取这个指针所指的值。
abmin 发表于 2011-11-14 10:49 | 显示全部楼层
9楼详细!
ninicaoyuan 发表于 2014-10-31 11:24 | 显示全部楼层
9#形象,赞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

13

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部