我如何在嵌入式程序中进行多线程处理?

-4 embedded multithreading 8051

嗨,我是嵌入式程序员。最近我们遇到一个项目,我们被迫使用多线程。我已经在 java 中使用了相同的代码,但我无法实现它我的 8051 嵌入式代码。任何人都可以帮助我吗?

Chr*_*ton 5

线程化要求有某种机制来切换线程,通常称为调度程序。

广义上讲,有两种类型的线程:协作式和抢先式。

在协作线程中,每个线程都做一些工作,然后将控制权转移回调度程序。这几乎就像有一个盛大的 while(1) {} 循环作为程序结构,只是具有更多的独立性(仅在开发期间)任务。它仍然面临着一项任务占用 CPU 甚至锁定并阻止其他任何任务运行的风险。实际上,任务之间的独立性对于开发人员来说只是一种幻觉或组织抽象。

在抢占式多任务处理中,调度程序(可能由定时器中断驱动)通过从一个线程中获取执行、保存其状态并重新启动不同的冻结线程来定期强制更改任务。这设置起来有点棘手,但更可靠。

通常,无论采用哪种方案,您都不会从头开始编写基础架构,而是会使用原始操作系统或至少由其他人开发的调度程序例程。

但是,对于非常小的嵌入式系统,您还可以考虑中断服务例程本身可以提供类似于备用线程的东西,以处理某些简短和/或紧急的任务。如果您的串行中断触发,您可以获取一些字符并将它们存储起来,以便在方便的时候由其他东西进行解释。很多任务都可以通过使用中断来处理直接部分,然后在while(1){}类型的程序结构中的稍后点做结果工作来实现。

有些人可能会嘲笑在 8051 上运行调度程序的想法——尽管出于一些奇怪的原因,廉价的小型 8051 等效内核今天最终出现在一些相当复杂的专用芯片中(通常由大量存储内存和强大的内存组成)外围引擎来完成真正的工作),所以实际上看到多线程解决方案在其上实现动态任务创建以管理设备所做的一切并不少见。