Synchronization uCOS ii互斥与关键部分、调度器锁定与信号量

Synchronization uCOS ii互斥与关键部分、调度器锁定与信号量,synchronization,embedded,ucos,Synchronization,Embedded,Ucos,我在为一个运行UCOSII的嵌入式系统写作。 我需要原子地写和读两个整数,它们的值和时间戳应该相互同步。 最简单的方法是将两个值的写入用关键部分包装起来,从而禁用任何中断或任务切换。但有人告诉我,这是一种非常具有攻击性的行为,而且很容易通过禁用中断来搞乱其他实时内容 但是写两个整数是一个非常小的操作,我不确定使用互斥锁的整个簿记是否值得 所以我做了一些测量。我测量了写这两个值所需的时间一百万次,并计算了所需的毫秒数。所有这些都是在单个任务中完成的,只是为了了解不同同步机制的开销。结果如下: 无同

我在为一个运行UCOSII的嵌入式系统写作。 我需要原子地写和读两个整数,它们的值和时间戳应该相互同步。 最简单的方法是将两个值的写入用关键部分包装起来,从而禁用任何中断或任务切换。但有人告诉我,这是一种非常具有攻击性的行为,而且很容易通过禁用中断来搞乱其他实时内容

但是写两个整数是一个非常小的操作,我不确定使用互斥锁的整个簿记是否值得

所以我做了一些测量。我测量了写这两个值所需的时间一百万次,并计算了所需的毫秒数。所有这些都是在单个任务中完成的,只是为了了解不同同步机制的开销。结果如下:

无同步角质化机制:~65 临界截面:~185 优先级为2的互斥锁:~1890 调度程序已锁定:~1750 信号量已初始化为1:~1165 我承认我是用附加的调试器测量的,因为我是新手,我不确定我们是否有探查器,但对我来说CS是最快的,互斥比信号量慢,因为它有所有的优先级反转处理

那么,我是否应该由此得出结论,使用临界截面是最好的?或者禁用中断真的是一件非常糟糕的事情吗? 一般来说,是否有关于何时使用每个同步机制的指南

更新:一位同事建议使用旋转锁。显然,这将比更高级的同步机制具有更小的开销。但我想知道在这种特殊情况下,它是否比关键部分更好


更新2:想想看,既然我们只有一个CPU,自旋锁就没什么用了。它将一直旋转直到上下文切换…

我怀疑在写入两个值时禁用中断是可以的。但这实际上取决于应用程序的实时性要求,我们不知道这些要求是什么

这是185毫秒来完成100万次的操作吗?这是否意味着您将平均禁用185纳秒的中断?如果额外的185纳秒会导致您错过最后期限并失败,您是否有任何实时要求

请看一下您正在考虑的互斥和其他服务的uC/OS ii源代码。我猜想您会发现这些服务会在短时间内禁用中断。使用这些服务可能会导致中断被禁用的时间超过写入这两个值所需的时间

嵌入式软件开发中有很多指导原则,比如最小化关键部分。不要把所有这些准则都当作硬性规定。相反,要学习并理解每一条准则存在的原因。这样你就知道什么时候该遵守它们,什么时候该破例


您希望最小化关键部分,这样就不会长时间禁用中断而错过中断或实时截止日期。禁用中断几秒钟几乎肯定是不好的。在许多应用程序中,禁用中断毫秒可能是不好的。对于许多应用程序,禁用中断纳秒可能是可行的。

我怀疑在写入两个值时禁用中断是可以的。但这实际上取决于应用程序的实时性要求,我们不知道这些要求是什么

这是185毫秒来完成100万次的操作吗?这是否意味着您将平均禁用185纳秒的中断?如果额外的185纳秒会导致您错过最后期限并失败,您是否有任何实时要求

请看一下您正在考虑的互斥和其他服务的uC/OS ii源代码。我猜想您会发现这些服务会在短时间内禁用中断。使用这些服务可能会导致中断被禁用的时间超过写入这两个值所需的时间

嵌入式软件开发中有很多指导原则,比如最小化关键部分。不要把所有这些准则都当作硬性规定。相反,要学习并理解每一条准则存在的原因。这样你就知道什么时候该遵守它们,什么时候该破例


您希望最小化关键部分,这样就不会长时间禁用中断而错过中断或实时截止日期。禁用中断几秒钟几乎肯定是不好的。在许多应用程序中,禁用中断毫秒可能是不好的。对于许多应用程序,禁用中断纳秒可能是可行的。

如果停止时间小于其他机制的开销,并且小于任何中断处理程序或任务上允许的最大延迟,则更简单的暴力方法是 很可能是最合适的


但是,您需要确保,在维护过程中,临界截面的长度不会增长到不可接受的程度,或者,在未经适当考虑的情况下,使用该机制不会被视为在任何地方使用它的绿灯。因此,我建议您在清晰的注释中记录其使用,并说明其理由和限制,即您为什么这样做,以及在什么情况下保证在满足实时截止日期方面是安全的。

如果停止时间小于其他机制的开销,并且小于任何中断处理程序或任务上允许的最大延迟,那么简单的暴力方法可能是最合适的


但是,您需要确保,在维护过程中,临界截面的长度不会增长到不可接受的程度,或者,在未经适当考虑的情况下,使用该机制不会被视为在任何地方使用它的绿灯。因此,我建议您在清晰的注释中记录其使用,并说明其理由和限制,即您为什么这样做,以及在什么情况下保证在满足实时期限方面是安全的。

对于uCOS II的小型同步操作,只需禁用中断即可


uCOS II提供的所有机制都将在一段时间内禁用中断,这段时间比读取或写入两个整数所需的时间长。在这种情况下使用它们实际上会影响中断延迟。

对于uCOS II的小型同步操作,只需禁用中断即可

uCOS II提供的所有机制都将在一段时间内禁用中断,这段时间比读取或写入两个整数所需的时间长。在这种情况下使用它们实际上会影响中断延迟。

185e-3/1e6=185e-9 185纳秒185e-3/1e6=185e-9 185纳秒