什么可能会延迟VxWorks任务的抢占?

时间:2012-05-08 15:05:41

标签: c++ file-io vxworks

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

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

当有足够的数据来保持日志记录任务被持续占用时,一旦高优先级任务准备再次运行,就会出现暂停后台日志记录任务的重大延迟。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

如果您可以访问系统查看器工具,那将大大有助于确定延迟的原因。

答案 1 :(得分:0)

我接下来建议使用System Viewer,它将显示TFFS堆栈中涉及的所有任务,您可能会惊讶地发现有多少层。如果您正在使用大块数据制作fwrite,则闪存访问可能很大(并且如Benoit所说的那样慢)。你可以尝试一堆较小的fwrites。我建议做一个测试,看看fwrites()对于各种大小需要多长时间,你可能会看到从测试到测试的差异与你跨越闪存块边界的大小相同。

相关问题