尽可能多地使用硬件,尤其是对于时间要求高的功能。所有微控制器都有专门为计数和计时事件而创建的定时器/计数器。
除此之外,这确实是一个非常广泛的问题。所以没有好的答案。
唯一真正的答案是经验。尝试它,分析它,强调它,修复它。您必须识别高使用率的代码区域。20% 的软件在 90% 的时间内运行,这意味着删除了每条指令,从而提高了性能。
好的设计总是平衡硬件、软件和内存。这适用于所有微处理器,尤其是微控制器。最大限度地使用一种或低效使用一种,您将得到一个糟糕的产品。随着硅密度的增加,越来越多的功能被包含在微控制器的硬件中。但是更多的功能意味着更多的期望。双板载内存,您将添加一些使用它的功能。
所有 ISR 都有开销,这取决于 ISR 使用的寄存器。如果保存机器状态的延迟与为高度时间关键功能的 ISR 服务相比显着,则您的设计可能无法扩展。因此,使用硬件的答案的普遍共识。
使用软件中断可以减少 ISR 机器状态膨胀。
// Timer0 ISR
Temp = Temp + 1
if (Temp == 150)
call Inc_Seconds()
当 Inc_Seconds() 的所有寄存器每 150 个周期仅使用一次时,它们必须被压入。
// Timer0 ISR
Temp = Temp + 1
if (Temp == 150)
_Software_Interrupt
...
// Software_Interrupt ISR
call Inc_Seconds()
现在延迟命中仅每 150 个周期发生一次。
如果您在 hh:mm:ss 中实现实时时钟,那么它是否关闭 50ms 是否重要。没有人会发现错误。这当然不是实时操作问题。
至于必须同时发生的事件。他们必须吗?如果他们必须那么硬件设计必须照顾它。否则,必须发生一些软件妥协。如果您不能一次设置两位,则设置一位。下一条指令设置另一个。在 RISC 处理器上精确到一个时钟周期。我认为这已经足够好了。