音频业务流程

我们当前使用的芯片属于 LN882HKI 系列,根据官方手册说明,其内置 Flash 容量为 2MB。此外,按照官方 SDK 示例中相关注释来看,采用的是 W25Q16 SPI Flash 作为存储器。

任务划分

  • socket_task_entry:
    • 职责:Socket 连接管理、数据接收和发送。
    • 数据流:
      • 接收:音频数据写入 PCMBuffer_rx,打印数据写入 print_buffer。
      • 发送:从 PCMBuffer_tx 读取 ADC 数据,发送给服务端。
    • 同步:
      • 写入 PCMBuffer_rx 后,通过 rx_data_ready_sem 通知 audio_task。
      • 写入 print_buffer 后,通过 print_data_ready_sem 通知 print_task。
      • 等待 tx_data_ready_sem,从 PCMBuffer_tx 读取数据。
  • audio_task:
    • 职责:ADC 采集和音频播放。
    • 功能:
      • 定时器中断(40kHz)采集 ADC 数据,写入 PCMBuffer_tx,通知 socket_task_entry。
      • 以 40kHz 频率从 PCMBuffer_rx 读取数据,通过 PWM 播放。
    • 同步:
      • 等待 rx_data_ready_sem,读取 PCMBuffer_rx。
      • 写入 PCMBuffer_tx 后,通过 tx_data_ready_sem 通知 socket_task_entry。
  • print_task:
    • 职责:处理打印逻辑。
    • 功能:从 print_buffer 读取数据,执行打印(已实现)。
    • 同步:等待 print_data_ready_sem,读取 print_buffer。

缓冲区

  • PCMBuffer_tx:环形缓冲区,4096 个样本(8KB),存储 ADC 数据。
  • PCMBuffer_rx:环形缓冲区,4096 个样本(8KB),存储服务端音频数据。
  • print_buffer:环形缓冲区,30000 字节,存储打印数据。

任务优先级

  • audio_task:tskIDLE_PRIORITY + 3。
  • socket_task_entry:tskIDLE_PRIORITY + 2。
  • print_task:tskIDLE_PRIORITY + 1。

同步机制

  • 信号量:
    • tx_data_ready_sem:通知 socket_task_entry 有 ADC 数据可发送。
    • rx_data_ready_sem:通知 audio_task 有服务端音频数据可播放。
    • print_data_ready_sem:通知 print_task 有打印数据可处理。
  • 临界区:
    • 中断和任务间访问缓冲区时,使用 taskENTER_CRITICAL 保护。

LOG(LOG_LVL_INFO, “Data %x,%x,%x,%x,%x,%x\n”, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5]);

error1