Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
w25qxx_init()中rt_device_find()返回值的疑惑
发布于 2014-11-06 22:44:32 浏览:4302
订阅该版
在spi_flash_w25qxx.c里面的```rt_err_t w25qxx_init(const char * flash_device_name, const char * spi_device_name)```函数里,第10行,根据rt_spi_device的名字来查找device: ```rt_spi_device = (struct rt_spi_device *)rt_device_find(spi_device_name);``` rt_device_find()返回的应该是rt_device_t类型,也就是rt_device *类型,实际上是rt_spi_device.parent的指针,为什么可以强制转换成(struct rt_spi_device *)类型?也就是为什么可以转换成指向rt_spi_device的指针,应该是指向rt_spi_device.parent的指针啊? PS:在调用w25qxx_init()前,调用了rt_spi_bus_attach_device()函数注册了rt_spi_device类型设备,实际上是调用rt_device_register()向内核注册了rt_spi_device.parent,即rt_device类型设备。那么rt_device_find()返回的也应该是rt_spi_device.parent的指针,而不是rt_spi_device的指针。 请指教!
查看更多
3
个回答
默认排序
按发布时间排序
pangwei
2014-11-07
这家伙很懒,什么也没写!
这其实是C语言面向对象设计时,继承的实现方法。给你举个例子 ``` /* 父类 */ struct parent_class { int a, b; char *str; }; /* 继承于父类的子类 */ struct child_class { struct parent_class p; int a, b; }; /* 操作示例函数*/ void func() { struct child_class obj, *obj_ptr; /* 子类对象及指针 */ struct parent_class *parent_ptr; /* 父类指针 */ obj_ptr = &obj; /* 取父指针 */ parent_ptr = (struct parent_class*) &obj; /* 可通过转换过类型的父类指针访问相应的属性 */ parent_ptr->a = 1; parent_ptr->b = 5; /* 子类属性的操作 */ obj_ptr->a = 10; obj_ptr->b = 100; } ``` 在上面代码中,注意child_class结构中第一个成员p,这种声明方式代表child_class类型的数据中开始的位置包含一个parent_class类型的变量。在函数func中obj是一个child_class对象,正像这个结构类型指示的,它前面的数据应该包含一个parent_class类型的数据。强制类型赋值中parent_ptr指向了obj变量的首地址,也就是obj变量中的p对象。好了,现在parent_ptr指向的是一个真真实实的parent类型的结构,那么可以按照parent的方式访问其中的成员,当然也包括可以使用和parent结构相关的函数来处理内部数据,因为一个正常的,正确的代码,它是不会越界访问parent结构体以外的数据。
sdwuyawen
2014-11-07
这家伙很懒,什么也没写!
谢谢pangwei的指导,明白了一些了。取父指针时,由于child_class结构中第一个成员是p,所以 ``` parent_ptr = (struct parent_class*) &obj; ``` 和 ``` parent_ptr = (struct parent_class*) &obj.p; ``` 是完全一样的。
撰写答案
登录
注册新账号
关注者
0
被浏览
4.3k
关于作者
sdwuyawen
这家伙很懒,什么也没写!
提问
2
回答
1
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
在RT-Thread Studio中构建前执行python命令
2
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
3
CherryUSB开发笔记(一):FSDEV USB IP核的 HID Remote WakeUp (USB HID 远程唤醒) 2025-01-18 V1.1
4
RT-thread 缩写字典
5
RT Thread 源码分析笔记 :线程和调度器
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
聚散无由
2
篇文章
14
次点赞
catcatbing
2
篇文章
4
次点赞
Wade
2
篇文章
2
次点赞
Ghost_Girls
1
篇文章
4
次点赞
xiaorui
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部