对该建议的分析与说明
-
为什么 AiCube 会默认添加 usb_OUT_done():
从手册可以看出,查询方式下 usb_OUT_done() 是必须调用的——否则 USB 将无法接收下一包数据。AiCube 自动生成这段代码是为了保证生成的工程开箱就能正常工作,避免用户遗漏这个关键调用导致 USB 通信卡死。
-
您的困扰是完全合理的:
查询方式下确实存在"生成代码 → 自己写处理逻辑 → 重新生成 → 又自动加了回来"的循环。从论坛反馈(帖子:USB中建议增加是否自动写入USBLIB_OUT_Done()函数选项)来看,这个问题已被多名用户提出。
-
目前的建议解决方案(过渡方案):
在官方更新增加该选项之前,您可以:
- 将
usb_OUT_done(); 注释掉,替换为您自己的处理逻辑
- 或者将 USB 通信方式改为 中断方式——根据手册说明,中断方式下用户不需要调用
usb_OUT_done();,库函数内部会自动处理,这样 AiCube 生成的代码中就不会出现这个手动调用,您就可以在中断服务函数中自由编写接收处理逻辑,不受自动生成干扰。
论坛中已有用户采用中断方式方案成功实现 USB 数据收发,并建议"推荐优先看"相关 AIcube USB 实验。
-
关于您的建议:
您提到的"增加一个选项,可不自动添加该语句"这个改进建议非常合理,符合实际开发需求。该建议已在论坛中提交,官方后续版本可考虑在 AiCube 的 USB 配置界面中增加一个类似"是否自动添加 usb_OUT_done() 调用"的开关,让用户在"开箱即用模板"和"自由控制"之间自主选择。
总结
| 项目 |
说明 |
usb_OUT_done() 的作用 |
查询方式下数据处理完成后必须调用,否则无法接收下一包数据(见手册原文) |
| 中断方式 |
不需要手动调用 usb_OUT_done(),库自动处理 |
| 您的建议 |
合理且已记录,可在下一代 AiCube 中考虑增加开关选项 |
| 当前过渡方案 |
改用中断方式,或生成后手动注释该行 |
如果您需要,我可以为您提供一份 USB 中断方式接收数据的完整示例程序(在中断服务程序中处理数据,无需手动调用 usb_OUT_done()),这样就不会再受到自动生成代码的干扰。是否需要?