# 常见问题

## Q1: 调用 BM_Write 总是发送超时，可能是哪些原因？

超时代表无法发送报文至总线，或者虽然发送至总线了但是我方没有收到自动回应（这是 CAN 协议的底层机制，由硬件自动完成）。导致这个问题的原因很多，建议先尝试使用经过验证的 Busmaster 上位机打开同样的端口，使用同样的波特率等配置参数，尝试发送，观察是否发送成功，不成功则修改配置参数。待 Busmaster 调试通过后再回到开发环境中，使用跟 Busmaster 一致的配置参数来初始化通道。

## Q2: 某种原因发送超时之后，就再也无法成功发送了，提示 BUSOFF

同样的建议，首先请使用 Busmaster 保证能够稳定收发，然后再到二次开发软件里尝试发送。另外，您可以参考 `bmapi_transmit_only` 例程中的 `recoverFromError()` 函数，了解如何在意外出现 BUSOFF 故障之后，从故障状态中恢复并继续收发操作。

## Q3: BMAPI 中的各个函数操作，支持多线程吗？

各个 WriteXXX 和 ReadXXX 函数均支持多线程，但是 OpenEx 和各个 SetXXX 函数不支持多线程。

## Q4: BM_WriteMultipleCanMessage 对一次发送的 CAN 消息数量有限制吗？

内部使用 1MB 的发送缓冲区，大约最多能装 25000 条报文。
