制作变频器-第六部分
💡
原文中文,约1400字,阅读约需4分钟。
📝
内容提要
文章讨论了如何在单片机上实现用户界面的多任务处理。由于单片机没有操作系统,作者利用C++20的协程和协作式多任务管理多个独立的控制流。通过实现一个简单的Executor,作者有效地调度协程,尽管目前使用的是asio的stackless coro。未来,随着编译器更新,可以直接使用asio的co_spawn。
🎯
关键要点
- 单片机没有操作系统,导致UI开发面临多任务处理的挑战。
- UI由多个子任务构成,包括SVPWM生成、V/F控制、遥控接收和编码器处理。
- 用户可以在单片机上实现自己的控制流上下文切换,类似于用户态线程。
- C++20的协程被用作单片机的多任务处理手段,主要通过co_await实现协作式多任务。
- 目前使用asio的stackless coro来实现协程,满足单片机的低系统要求。
- 作者实现了一个简单的Executor,用于驱动asio的stackless coroutine,未来可直接使用asio的co_spawn。
❓
延伸问答
单片机上如何实现多任务处理?
单片机通过C++20的协程和协作式多任务管理多个独立的控制流,用户可以实现自己的控制流上下文切换。
为什么单片机的UI开发需要考虑多任务?
因为UI由多个子任务构成,如SVPWM生成、V/F控制、遥控接收和编码器处理,这些都需要独立的控制循环。
C++20的协程在单片机中如何应用?
在单片机中,C++20的协程主要通过co_await实现协作式多任务,允许协程主动让出CPU时间。
目前单片机使用的协程实现是什么?
目前使用的是asio的stackless coro,它对系统要求极低,表现为一个函数对象,支持协作式多任务。
Executor在单片机中的作用是什么?
Executor用于驱动asio的stackless coroutine,允许在单片机上实现简单的多任务调度。
未来单片机的编译器更新会带来什么变化?
未来编译器更新后,可以直接使用asio的co_spawn,简化协程的使用。
➡️