2011-07-22 10 views
4

我有這個奇怪的問題。 我想知道是否有可能在Linux或Windows上運行的C/C++中創建程序,並且會將系統計時器設置爲特定週期(例如每秒2000次)的掛鉤中斷處理程序,並且我希望該中斷具有最高優先級,這意味着它必須每半毫秒執行一次,並且在執行時不得中斷。在Linux或Windows的精確時段安排任務

這是我們用MS-DOS和Borland Turbo C 3.1完成的。我們有一個在ISA插槽上運行的接口卡(我們自己的)。每半毫秒,我們的程序就會讀取通過接口控制工業過程的電子器件的狀態。這對我們來說在過去的15年中一直有效,但是我們的主板擁有ISA插槽,所以我們正在尋找新的解決方案。

我們也有基於PIC微控制器的解決方案,但是我們的視野將隨着通用處理器的發展而擴大。

我的猜測是有一些針對嵌入式應用的定製Linux內核,所以我正在尋找一些我們可以開始嘗試的來源。

+0

你看過定製硬件嗎?由於FPGA的價格比以前更便宜。看看http://natami.net/ Firebee Atari和Minimig。 –

+1

如果你去Borland C++而不是Turbo C,它是非常兼容的,但可以用DOS擴展程序生成(更大的)32位DOS程序http://www.thefreecountry.com/programming/dosextenders.shtml也可以看DJGPP正如Cody所說,這是一個更現代的用於DOS的GNU編譯器。 –

回答

6

是的,您可以在MS-DOS中執行此操作,因爲它不是多用戶或多任務操作系統。然而,同樣的事情將不是工作在Windows中,因爲它一個多用戶和多任務操作系統。這也不是實時的,這意味着當您要求執行任務時,您無法保證您的任務將被執行,正好是。一切都預先安排好了,這意味着任何其他進程和任務(用戶模式或系統級別)都可以有效地將您的進程「壓」到優先級列表中,並強制它等待執行,直到完成其他任務或者自己被打斷,讓你的程序有機會運行一段時間。

我不瞭解Linux,但我想大多數主要的發行版都是類似於Windows編寫的。

您需要找到一個實時的單用戶操作系統來執行此操作。 Unix衍生產品可能是開始尋找的最佳地點,但我不會是能夠提出建議的人。

或者,您可以繼續使用MS-DOS(或FreeDOS等替代選項),但切換到不同的接口技術,可用於較新的主板。沒有理由更新適用於您的某些內容,特別是如果更新對您的目標產生反作用。

+0

適用於MSDOS,但具有現代硬件。另請參閱FreeDOS,它可能與更多硬件兼容。 –

+0

感謝您的回覆。我知道這些操作系統是如何工作的以及他們如何安排任務。 這是繼續使用FreeDOS的好選擇。我們正在考慮讓接口卡掛在USB端口上。有關FreeDOS良好的C++編譯器和編輯器的建議將非常棒。 Turbo C 3.1的問題在於它具有源代碼長度限制。 –

+0

@Gorgi:我不知道FreeDOS是否支持USB驅動,在提交到USB主機接口之前,最好檢查一下。是的,Turbo C太老了,不能積極使用。您可能會嘗試找到可編譯應用程序以在DOS上運行的GCC版本,或者使用[this](http://www.delorie.com/djgpp/)之類的東西。 –

0

多年來,個人和負擔得起的計算性能不可思議地增加,除了在一個領域,低延遲。當您比較486和現代臺式機CPU時,延遲在許多使用情況下實際上有所增加。

也就是說,看看this paper,作者得出的結論是,在商用硬件上,Linux可以進行亞毫秒的調度。

+0

你確定這個區別在於硬件而不是軟件嗎? –

+0

@Cody Gray,很確定。 486中的高速緩存缺失相當昂貴,但恢復時間只能持續很長時間。對於具有巨大L3,L2和L1高速緩存的現代CPU而言,最糟糕的情況是高速緩存未命中,這實際上是一個非常冗長的事情。我正在談論最壞的情況,而不是平均的表現,現在這當然是非常高的。 –

+0

我並不是說年紀越大越好,但在延遲方面已經有了很小的改進。 –

2

典型的操作系統,例如標準的Linux或Windows,不適用於並且無法達到那種程度的實時準確性和可用性。

這聽起來像你需要調查Real-Time Linux,或類似的。

RTLinux是Linux內核的一個修改版本,它被設計用來實時地執行這種應用程序。

希望有所幫助。