1

在我目前的项目中,我有两个级别的任务,在 VxWorks 系统中,一个用于数字运算和其他工作的较高优先级 (100) 任务,然后是一个用于将后台数据记录到板载闪存的较低优先级 (200) 任务。使用 fwrite() 调用对存储在 TFFS 文件系统上的文件进行日志记录。高优先级任务以周期性速率运行,然后休眠以允许完成后台日志记录。

我的期望是后台日志记录任务将在高优先级任务休眠时运行,并在高优先级任务唤醒时被抢占。

一旦高优先级任务准备好再次运行,当有足够的数据来保持记录任务持续被占用时,似乎正在发生的事情是暂停后台记录任务的显着延迟。

在 Power PC 架构上的 VxWorks 6.8 下,什么会延迟优先级较低的任务的抢占?

4

2 回答 2

1

你没有量化显着,所以以下只是猜测......

你提到写入闪存。问题之一是写入闪存通常需要驱动程序轮询硬件状态以确保操作成功完成。

在某些操作期间,文件系统可能会暂时禁用抢占以确保不会发生损坏 - 再加上必须等待硬件完成,这可能会导致延迟。

如果您可以访问 System Viewer 工具,这将有助于确定延迟的原因。

于 2012-05-09T02:06:25.773 回答
0

我支持使用 System Viewer 的建议,它会显示 TFFS 堆栈中涉及的所有任务,您可能会惊讶有多少层。如果您正在使用大量数据进行 fwrite,则闪存访问可能很大(并且正如 Benoit 所说的那样很慢)。您可以尝试一些较小的 fwrite。我建议做一个测试,看看 fwrites() 对于不同大小需要多长时间,当你跨越闪存块边界时,你可能会看到使用相同大小的测试之间的差异。

于 2012-06-15T11:19:26.780 回答