-4

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

4

2 回答 2

5

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

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

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

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

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

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

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

于 2013-07-02T13:59:07.127 回答
0

8051 的架构不适合任何合理的抢占式调度。至少片上 RDATA/IDATA 中的堆栈,可能更多,必须换出到 XDATA,它变得非常混乱。

8051 适用于烤面包机/洗衣机控制器。

如果您想要/需要诸如抢占式调度程序之类的功能,请移至 ARM。

于 2013-07-02T14:22:54.267 回答