制作变频器-第六部分

💡 原文中文,约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,简化协程的使用。

➡️

继续阅读