硬件开发综合设计学习01:树莓派 4B 相关介绍

树莓派开发学习系列文章

硬件开发综合设计学习01:树莓派 4B 相关介绍
硬件开发综合设计学习02:数据库与树莓派远程通信
硬件开发综合设计学习03:基于华为云的物联网云平台部署(上)
硬件开发综合设计学习04:基于华为云的物联网云平台部署(下)
硬件开发综合设计学习05:基于Docker Desktop的本地简易MQTT服务搭建

硬件开发综合设计学习01:树莓派 4B 相关介绍

树莓派 4B 相关介绍

  • 树莓派开发学习系列文章
  • 硬件开发综合设计学习01:树莓派 4B 相关介绍
    • 系统基本参数
    • 树莓派引脚分布参考
      • 40针引脚对应创乐博扩展板分布(J8)
      • 特殊引脚说明

系统基本参数

描述:树莓派 4B,版本 1.5
版本号:c03115
片上系统:BCM2711
内存:4GB
存储:MicroSD 卡
USB 端口:4 个(其中 2 个为 USB3.0 端口)
以太网端口:1 个(最大速度 1000Mbps)
Wi-Fi:支持
蓝牙:支持
摄像头端口(CSI):1 个
显示端口(DSI):1 个

树莓派引脚分布参考

image.png

40针引脚对应创乐博扩展板分布(J8)

物理引脚功能名扩展板名扩展板名功能名物理引脚
11GPIO 17G17G18GPIO 18(PCM_CLK)12
36GPIO 16G16G19GPIO 19(PCM_FS)35
33GPIO 13(PWM1)G13G20GPIO 20(PCM_DIN)38
32GPIO 12(PWM0)G12G21GPIO 21(PCM_DOUT)40
31GPIO 6G6G22GPIO 2215
29GPIO 5G5G23GPIO 2316
7GPIO 4(GPCLK0)G4G24GPIO 2418
26GPIO 7(CE1)CE1G25GPIO 2522
24GPIO 8(CE0)CE0G26GPIO 2637
19GPIO 10(MOSI)MOSIG27GPIO 2713
21GPIO 9(MISO)MISOSCLGPIO 3(SCL)5
23GPIO 11 (SCLK)SCKSDAGPIO 2(SDA)3
10GPIO 15(RXI)RXIIDSCGPIO 1(ID_SC)28
8GPIO 14(TXD)TXOIDSDGPIO 0(ID_SD)27
5V5V
3.3V3.3V
GNDGND

特殊引脚说明

  1. GPIO 2 (SDA)GPIO 3 (SCL):这两个引脚用于I2C(Inter - Integrated Circuit)总线通信。I2C是一种同步、多主从的串行通信协议,广泛用于连接低速外设,如传感器(温度、湿度、光线传感器等)和EEPROM等。SDA是数据线,SCL是时钟线。
  2. GPIO 4 (GPCLK0):这是一个通用时钟引脚,可以用于为外部设备提供时钟信号。
  3. GPIO 14 (TXD)GPIO 15 (RXI):这两个引脚用于UART(Universal Asynchronous Receiver/Transmitter)串口通信。TXD用于发送数据,RXI用于接收数据。
  4. GPIO 18 (PCM_CLK)GPIO 19 (PCM_FS)GPIO 20 (PCM_DIN)GPIO 21 (PCM_DOUT):这些引脚与PCM(Pulse - Code Modulation)音频编码有关。PCM是一种将模拟音频信号转换为数字信号的方法。这些引脚可用于音频设备的连接。
  5. GPIO 13 (PWM1)GPIO 12 (PWM0):这两个引脚支持PWM(Pulse - Width Modulation)功能。PWM通过改变脉冲宽度来控制输出信号的平均电压,常用于控制电机速度、LED亮度等。
  6. GPIO 10 (MOSI)GPIO 9 (MISO)GPIO 11 (SCLK):这三个引脚用于SPI(Serial Peripheral Interface)通信。SPI是一种高速、全双工的同步串行通信协议,常用于连接高速外设,如SPI接口的闪存、显示屏等。MOSI用于主设备输出从设备输入,MISO用于主设备输入从设备输出,SCLK是时钟信号。
  7. GPIO 7 (CE1)、GPIO 8(CE0):是 SPI 通信中的片选信号。在多 SPI 设备连接的情况下,用于选择不同的 SPI 设备进行通信。
<think>嗯,用户想了解Python中yield的用法和生成器的相关知识。首先,我需要回顾一下生成器的基本概念。生成器是一种特殊的迭代器,可以通过函数来创建,而yield关键字就是用来定义生成器的关键。用户可能已经知道普通的函数使用return返回值,但yield的不同之处在于它会暂停函数执行并保留状态,下次调用时继续执行。 接下来,我需要解释yield的工作流程。例如,当函数执行到yield语句时,会返回一个值,但不会退出函数,而是保持当前状态。下次调用next()时,函数从yield之后继续执行。这点可能需要用例子来说明,比如斐波那契数列的生成器,这样用户能更直观地理解。 然后,生成器的优势是什么?内存效率高,因为不需要一次性生成所有数据,而是按需生成。这在处理大数据时特别有用。比如,当用户需要处理一个很大的文件或者数据集时,生成器可以逐个产生数据,而不是全部加载到内存中。这可以引用用户提供的引用内容中的例子,比如sum(firstn(1000000)),说明生成器如何提升性能。 另外,用户可能想知道生成器的应用场景。比如流式处理、惰性计算、协程等。这些场景需要展开说明,让用户了解实际使用中的情况。比如,使用生成器处理日志文件,逐行读取处理,而不是一次性读入内存。 用户提供的引用中有提到生成器和迭代器的区别,可能需要对比说明。生成器是迭代器的一种,但更简洁,不需要实现__iter__和__next__方法,只需使用yield即可。引用中的斐波那契例子可以再次使用,展示生成器的简洁性。 还要注意yield的常见误区,比如函数中使用yield后,函数就变成了生成器函数,调用时返回生成器对象,而不是直接执行。这点需要强调,避免用户误解。同时,生成器只能遍历一次,之后需要重新创建,这也是需要注意的地方。 用户的问题可能涉及如何创建生成器,除了函数中使用yield,还可以用生成器表达式。比如(i for i in range(10)),和列表推导式类似,但使用圆括号。这点可能需要补充说明,以全面回答用户的问题。 最后,结合用户提供的引用内容,引用相关的部分来支持解释,比如引用[3]提到的yield类似return,但函数不会释放状态,这点需要强调。同时,引用[2]中的例子可以说明生成器在性能上的优势,比如处理大量数据时节省内存。 总结来说,回答的结构应该包括:生成器的定义、yield的工作机制、生成器的优势、应用场景、与迭代器的对比、创建方式以及注意事项。通过例子和引用中的内容来增强解释的可信度,并确保语言通俗易懂,帮助用户逐步理解。</think>### Python yield 用法及生成器详解 #### 一、生成器的核心概念 生成器是一种特殊的迭代器,通过函数中的`yield`关键字实现。与普通函数使用`return`不同,`yield`会**暂停函数执行并保留当前状态**,下次调用时从暂停处继续执行[^3]。 #### 二、yield 的工作机制 1. **执行流程** - 当函数执行到`yield`时,返回右侧表达式的值 - 函数状态(变量值、执行位置)被冻结 - 下次调用`next()`时,从`yield`下一行继续执行 ```python def count_down(n): while n > 0: yield n n -= 1 gen = count_down(3) print(next(gen)) # 输出 3 print(next(gen)) # 输出 2 ``` 2. **状态保持特性** 生成器函数中的局部变量在多次调用中会保持状态,而普通函数每次调用都会重新初始化变量[^3]。 #### 三、生成器的核心优势 1. **内存效率** 按需生成数据,避免一次性加载所有数据到内存。例如处理百万级数据: ```python def large_dataset(): for i in range(1_000_000): yield i * 2 ``` 此生成器仅需几十字节内存,而列表需要约8MB[^2]。 2. **惰性计算特性** 数据只有在被请求时才会生成,适合处理: - 无限序列(如斐波那契数列) - 流式数据(如日志文件实时处理) - 大数据集分块处理 #### 四、典型应用场景 1. **高效迭代器实现** ```python def fibonacci(): a, b = 0, 1 while True: yield a a, b = b, a + b fib = fibonacci() print([next(fib) for _ in range(10)]) # 输出前10项 ``` 2. **协程实现基础** `yield`可实现双向通信,是协程编程的基础: ```python def coroutine(): while True: received = yield print(f"Received: {received}") c = coroutine() next(c) # 启动协程 c.send("Hello") # 输出 Received: Hello ``` #### 五、生成器进阶用法 1. **表达式形式** 使用圆括号创建生成器表达式: ```python squares = (x*x for x in range(10)) sum(squares) # 返回 285 ``` 2. **数据管道构建** 多生成器串联实现复杂处理流程: ```python def read_lines(file): with open(file) as f: for line in f: yield line.strip() def filter_comments(lines): for line in lines: if not line.startswith('#'): yield line pipeline = filter_comments(read_lines('config.ini')) ``` #### 六、注意事项 1. **一次性特性** 生成器遍历完成后需要重新创建: ```python gen = (x for x in range(3)) list(gen) # [0,1,2] list(gen) # [] ``` 2. **异常处理** 使用`generator.close()`或`generator.throw()`管理生成器生命周期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值