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