主要观点:在atsamd-hal项目中,async/await支持经历了较长时间才实现。作者发现embassy框架后,开始思考在HAL中支持异步编程,最终在 2024 年 11 月将其合并。如今大多数异步HAL与执行器的耦合度降低,atsamd-hal也可与多种执行器一起使用。async/await可在单核心系统(如微控制器)中利用并发,通过Future、async关键字、await关键字和执行器等三个构建块实现协作式多任务处理,同时需要反应堆来监听外部事件并唤醒执行器,微控制器的中断可用于此目的。文中还以atsamd-hal中的外部中断控制器为例,详细介绍了实现异步支持的步骤,包括中断处理程序绑定、wait()方法实现和中断处理程序实现等,并给出了同步和异步版本的使用示例,展示了异步版本的简洁性和可读性。
关键信息:
async/await在atsamd-hal项目中的实现历程及最终合并时间。- 异步编程的三个构建块及其作用。
- 微控制器中实现异步支持的具体步骤和相关代码。
- 同步和异步版本的使用示例及对比。
重要细节:
Futuretrait 的定义及Poll枚举的含义。async函数是返回Future的语法糖,await关键字用于驱动Future前进。- 不同的执行器在嵌入式和普通计算世界中的情况。
- 中断处理程序绑定的相关 trait 和宏的使用。
- 在
wait()方法中如何处理中断和注册唤醒器。 - 中断处理程序的实现细节及与
Future的交互。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。