首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C语言实现两个微控制器执行的同步

用C语言实现两个微控制器执行的同步
EN

Stack Overflow用户
提问于 2013-03-14 20:54:56
回答 2查看 4.8K关注 0票数 3

我想用这个问题作为一种方式来讨论在由两个或更多个微控制器组成的网络上的同步算法。

今天下午,我开始思考这个问题,在这里,我会让两个不同的微控制器交换数据,然后同步执行,同时开始工作,大约在同一时间完成。这是一种确保您正在运行的代码是正确的,并且内存中可能没有错误的一种方法(在两个微控制器上发生完全相同错误的可能性极低,正如您可能想象的那样)。

我想只要发送一条带有微控制器1的时间戳的消息,第二个微控制器就会接收到它,并将它与自己的时间戳进行比较,然后将它重新发送到microcontroller1。

在这一点上,他们都将开始执行相同的代码,并在结束时同步,在那里他们将交换对方的结果,然后他们会得出结论,如果有什么问题,或一切正常。

我认为这将是实现两个微控制器之间执行同步的一种“体面”的方法,但我无法摆脱我的头脑,也许有一种更好、更聪明的方法来做到这一点。

这个“可能”可以在两个微控制器上正常工作,但是如果我想用更多的微控制器来做呢?如果我想以我前面解释过的方式实现一个5核心系统(例如,5个arm9核),该怎么办?我不认为这对几个微控制器有效。即使我想实现一个5核心系统,所有的微控制器都要做不同的工作(我认为在任何情况下同步都必须是最好的.我真的不知道我从来没有需要过一个以上的核心,但我需要从现在开始做)

编辑:

我想用这个问题来理解两个或多个微控制器的网络同步算法,或者在同一个板上的同步算法。

今天下午,我开始思考这个问题,在这里,我会让两个不同的微控制器交换数据,然后同步执行,同时开始工作,大约在同一时间完成。这是一种确保您正在运行的代码是正确的,并且内存中可能没有错误的一种方法(在两个微控制器上发生完全相同错误的可能性极低,正如您可能想象的那样)。

我想只要发送一条带有微控制器1的时间戳的消息,第二个微控制器就会接收到它,并将它与自己的时间戳进行比较,然后将它重新发送到microcontroller1。

在这一点上,他们都将开始执行相同的代码,并在结束时同步,在那里他们将交换对方的结果,然后他们会得出结论,如果有什么问题,或一切正常。

我认为这将是实现两个微控制器之间执行同步的一种“体面”的方法,但我无法摆脱我的头脑,也许有一种更好、更聪明的方法来做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-14 21:32:00

当然,在某些系统中,两个或多个处理器正在执行相同的任务,并对结果进行比较。我知道自动列车控制系统的两个系统应该产生相同的结果,如果其中一个系统没有产生相同的结果,紧急刹车被“拉”,列车停止,直到司机按下“我注意到计算机不工作正常”按钮。这两个系统的软件是由两组不同的开发人员编写的,他们没有分享如何实现解决方案的任何信息,以避免“常见的错误,因为我们都认为应该这样解决”。

飞机电子通常使用不均衡的数字和“多数投票”从不同的系统中选择多个答案--在飞机上“停止”是个坏主意。同样,系统正在使用不同的软件,而且通常也使用不同的处理器和语言供应商--因此,一个系统是用C或C++编写的,另一个是用Java编写的,第三个是用Pascal或ADA编写的--以减少处理器、语言或编译器错误导致系统中的每件事情“出错”的可能性。

从以前使用x86的工作中,我已经详细地研究了这一点,对于一个想要“锁步运行的备份处理器”的客户来说,他们必须使用经过修改的编译器,在代码分支、调用、返回等的决策点添加I/O指令,然后使用外部硬件来确保处理器实际上是同步的)。因此,现代处理器,包括这样的ARM,有足够的“聪明的东西”,在处理器内部是相当“不可预测的”,以至于几乎不可能使两个处理器以精确的锁定步调运行。当然,只要你不太精确地测量时间,你就能得到“在相同的时间内完成同样的任务”的东西。

超标量执行单元、异步中断、异步(Ish)内存控制器、缓存、缓存内容,都是为了使一个处理器比另一个处理器运行得更快或更慢。

因此,对于系统“同步”的精确程度是有限制的。

网络时间协议(,NTP)确实有一些非常聪明的算法来设置/同步多个系统之间的时间,这允许多个系统具有相同的“时间”概念。但请记住,“相同”是有限度的。可能是几微秒。

所以,你能否“同时开始”取决于你所说的“同一时间”。微秒或毫秒可以吗?如果是这样,几乎肯定是有可能的。如果你指的是时钟周期,那很可能不是。

票数 2
EN

Stack Overflow用户

发布于 2013-03-14 22:27:52

有许多方法可以做到这一点,这取决于您希望如何定制系统,以及您需要它运行的精确程度。

不过,你在正确的轨道上来回发送时间戳。像这样进行本地同步的“标准”方法是精确时间协议(PTP / IEEE 1588),它的工作精度可降低到微秒级,这取决于实现(相对于网络时间协议,后者更适合远程同步,而且通常不能比毫秒范围更好地实现同步)。

如果您在您的微控制器上运行了一个具有以太网或类似功能的Linux系统,那么您可以查看一下PTPD。或者,如果您想自己实现某件事情,请看一下PTP (可能还有NTP)算法,并受到启发。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15419993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档