2012-05-08 27 views
1

在我目前的項目中,我有兩個級別的任務,在VxWorks系統中,數字運算和其他工作具有更高優先級(100)任務,然後是用於背景數據記錄到板載閃存的較低優先級(200)任務記憶。日誌記錄是通過使用fwrite()調用來完成的,該文件存儲在TFFS文件系統中。高優先級任務以定期運行速度運行,然後休眠以允許完成後臺日志記錄。什麼可以延遲VxWorks任務的搶佔?

我的期望是,當高優先級任務睡覺,爲高優先級任務喚醒儘快搶佔後臺記錄任務將運行。

似乎是發生在一次高優先級任務準備再次運行,當有足夠的數據,以保持持續佔領了伐木任務暫停後臺記錄任務顯著延遲。

什麼能延緩低優先級任務的優先購買權的VxWorks 6.8下一個Power PC的架構?

+0

是否選擇搶先調度?如果沒有,那麼每個任務都會運行,直到有什麼東西阻止它們 - 通常是I/O。 – wallyk

+0

搶先調度被選中並且一般運行良好。這似乎是一個特例。 – Greg

+0

['dosFormat.c'](http://www-kryo.desy.de/documents/vxWorks/V5.4/trueffs/guide/gettingStarted2.html)中定義的'flMinClusterSize'的配置值是什麼? (使用'dosFormat)()'?)另外,擦除塊的大小是多少? – wallyk

回答

1

您沒有量化顯着,所以下面只是猜測...

您提到寫入閃存。其中一個問題是寫入閃存通常需要驅動程序輪詢硬件的狀態以確保操作成功完成。

這可能是某些操作時,文件系統暫時禁用搶佔,以確保不會發生損壞現象 - 加上不必等待硬件來完成,這也許能夠解釋延遲。

如果你有機會到系統瀏覽器的工具,那將很長的路要走對確定延遲的原因。

+0

好點,我沒有量化。我仍然在努力,儘管它看起來是在毫秒級。 – Greg

+0

如果您使用系統時鐘頻率爲1000Hz的taskDelay(或其包裝),則預計會有1ms的抖動。 – nos

0

我第二次使用系統瀏覽器的建議,它會顯示所有參與TFFS堆棧的任務,你可能會驚訝有多少層有。如果你使用大塊數據進行fwrite,Flash訪問可能很大(並且Benoit說的速度很慢)。你可以嘗試一些小型的筆記本。我建議你做一個測試,看看fwrites()對不同大小的測試需要多長時間,並且你可能會發現測試和測試之間的差異,因爲你跨越閃存塊的邊界時使用相同的大小。