furi_hal_serial: 共享的 RX 回调函数对两个 UART 都会触发 furi_check
作者: opetany93创建于 2026年8月21日更新于 2026年8月25日
描述错误。当为两个 UART 分配相同的回调函数指针时,furi_hal_serial_async_rx_start() 会中止:
// targets/f7/furi_hal/furi_hal_serial.c:868
// 为不同的 UART 分配不同的函数
furi_check(
furi_hal_serial[FuriHalSerialIdUsart].rx_byte_callback !=
furi_hal_serial[FuriHalSerialIdLpuart].rx_byte_callback);从这个文件中,我可以看到回调指针从未用于区分两个端口:
- furi_hal_serial_async_rx_configure() 以 handle->id 为索引存储回调、处理器和上下文
- 同一函数为每个端口安装一个独立的 ISR,由 handle->id 选择:furi_hal_serial_usart_irq_callback 或 furi_hal_serial_lpuart_irq_callback
- 每个 ISR 都使用硬编码的常量(第 128 行和第 329 行)来索引数组,而不是使用回调指针
内容来源: flipperdevices/flipperzero-firmware