QNX中控制循环的正确方法



我在QNX上开始一个项目。我不熟悉这个操作系统。我正在为SPI外部存储器编写驱动程序。在HW寄存器上有很多轮询循环。控制这些循环以避免在HW失败时线程被卡住的最佳方法是什么?

我可以启动一个计时器并检查它是否在循环条件内超时,但我想知道是否有任何更简单的方法(如看门狗:除了QNX管理程序外,我没有找到看门狗API)。

建议欢迎。

虽然它并不总是可移植的,但使用硬件轮询循环时最常见的做法是使用基于循环计数器的超时。软件时钟的分辨率(毫秒)对于大多数硬件超时应用程序来说通常太大了。

的例子:

int wait_for_device() {
unsigned loop_count = 0;
while (poll_device() != DONE) {
if (++loop_count == LOOP_TIMEOUT) return -1;
}
return 0;
}

对于大多数现实世界的设备驱动程序,为轮询执行硬件IO周期的时间可以被认为是估计适当超时的循环时间的下界。

相关内容

  • 没有找到相关文章

最新更新