何时使用计时器,DELAY-CYCES()和INTERNAL-MCU RTC警报
我想开始讨论何时使用计时器,DELAY周期,RTC警报(如果存在)的最佳做法。
快速概述:
delay_cycles(x)-编译器插入需要x个周期的指令。 如果已知时钟频率,则周期可转换为时间。 (免责声明:在延迟过程中,中断可能会触发,从而导致ISR执行时间的延迟,总之,在某些情况下,延迟的时间很难预测)。
计时器-适用于不受其他ISR影响的计时(某些边缘情况除外)。 处理器可以在计时器计数时执行其他操作(休眠,处理其他输入等)。 功能强大的工具,主要问题是缺少可用的计时器模块(MSP430F5659具有2个加一个WDT)。
内部RTC -不影响CPU运行的时钟,可轮询H:M:S:D:M:Y 用于保留课程时间,并具有警报。 可以针对分钟更改,午夜等情况触发中断。这对于从睡眠状态唤醒或将时间与报警列表进行比较以确定何时执行操作非常有用。 在精细比例计时时不是很好(粒度小于秒)
举一个例子进行讨论:
假设我们有一个接口的传感器(SPI,I2C,UART...等等)。 在I/O层,我们可能希望以特定的时间间隔进行通信,或者在特定时间后停止侦听输入。 在IO层的顶部,我们处理传感器信息并将其存储在外部存储器中,这很可能需要自身的延迟(串行闪存,FRAM,SD卡等)。 由于电源限制,存储此传感器信息的过程应限制在一定的时间内,或者可能由于外力的作用,额外的时间无法提供更好的样品。 最后,有一些与此类似的任务计划定期执行,我们在这些任务之间睡觉。
我经常遇到的一个问题是无法在函数中使用计时器,因为它当前正在我的调用函数中使用。 我很好奇,你们有哪些最佳实践可以帮助你们在何时将上述工具一起使用来解决上述问题。