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