分清iOS中的OC和CF概念

在iOS世界,主要有两种对象:Objective-C 对象和 Core Foundation 对象。Core Foundation 对象主要是由C语言实现的 Core Foundation Framework 的对象,其中也有对象引用计数的概念,只不过不是 Cocoa FrameworkFoundation Frameworkretain/release,而是自身的 CFRetain/CFRelease 接口。

这两种对象间可以互相转换和操作,不使用ARC的时候,单纯的用C的类型转换,不需要消耗CPU的资源,所以叫做 Toll-Free bridged。比如 NSArrayCFArrayRef, NSStringCFStringRef,他们虽然属于不同的 Framework,但是具有相同的对象结构,所以可以用标准C的类型转换。

比如不使用ARC时,我们用下面的代码:

NSString *string = [NSString stringWithFormat:...];
CFStringRef cfString = (CFStringRef)string;

但是在ARC有效的情况下,将出现编译错误,我们需要怎样做:用 __bridge 或者 __bridge_retained 来转型,其差别就是变更对象的所有权。

在I2C通信协议中,主机从机的角色区分主要基于其对总线的控制能力以及功能特性。I2C协议支持多主控(multi-mastering)架构,这意味着多个设备都可以充当主机角色,但在任何时刻只能有一个设备作为主机来控制总线。 主机的主要功能包括: - **控制时钟信号(SCL)**:主机负责生成时钟信号,该信号决定了数据传输的速度[^2]。 - **生成起始停止信号**:主机通过在SDA线上发送特定的信号序列来启动或结束一次通信过程。起始信号是在SCL为高电平时,SDA从高电平跳变到低电平;而停止信号则是在SCL为高电平时,SDA从低电平跳变到高电平[^1]。 - **发送地址信息**:主机发送从机地址以选择特定的从机进行通信,地址信息包含在起始信号之后发送的第一个字节中,其中最低位表示数据传输方向(读或写)[^2]。 - **管理数据传输**:主机决定数据传输的方向,并在数据传输过程中发送或接收数据字节,同时处理应答(ACK)非应答(NACK)信号[^1]。 从机的主要功能包括: - **响应地址**:从机监听总线上的地址信息,并仅当接收到自己的地址时才会参与通信过程[^2]。 - **根据主机指令进行操作**:从机根据主机发送的读写命令执行相应的数据发送或接收操作[^1]。 - **产生应答信号**:在每个接收到的字节后,从机会发送一个应答信号(ACK)表示成功接收,或者发送一个非应答信号(NACK)表示未能正确接收数据[^2]。 I2C协议的这一设计允许灵活地连接多个设备,并确保在复杂系统中实现高效的数据交换。通过这种方式,主机从机之间的角色明确,确保了通信过程的有序性可靠性。 ### I2C通信示例代码 以下是一个简单的I2C通信示例代码,演示了如何使用Python的`smbus`库与I2C设备进行基本的读写操作: ```python import smbus # 初始化I2C总线 bus = smbus.SMBus(1) # 使用I2C总线1 # 定义从机地址 slave_address = 0x50 # 假设从机地址为0x50 # 向从机写入数据 def write_data(data): bus.write_byte(slave_address, data) # 从从机读取数据 def read_data(): return bus.read_byte(slave_address) # 示例:写入一个字节的数据 write_data(0xA5) # 示例:读取一个字节的数据 received_data = read_data() print(f"Received data: {received_data}") ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值