RTS_CONTROL_TOGGLE不工作(具有發射後,將其關閉之前,變量1-15毫秒的延遲)對我們的嵌入式XP平臺。如果我使用timeBeginPeriod(1)等將時間量程改爲1 ms,那麼我可能會弄錯它,但是我懷疑它是否可靠或足夠重要。 (設備有時會響應1毫秒)
最終的解決方案確實很醜,但它在這個硬件上工作。我不會在任何硬件不固定的地方使用它。
基本上是:
1)設置FIFO的串行端口的設備管理器頁面上關閉或1個字符深
2)使用這個代碼發送郵件+ 2個額外的字節:
int WriteFile485(HANDLE hPort, void* pvBuffer, DWORD iLength, DWORD* pdwWritten, LPOVERLAPPED lpOverlapped)
{
int iOldClass = GetPriorityClass(GetCurrentProcess());
int iOldPriority = GetThreadPriority(GetCurrentThread());
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
EscapeCommFunction(hPort, SETRTS);
BOOL bRet = WriteFile(hPort, pvBuffer, iLength, pdwWritten, lpOverlapped);
EscapeCommFunction(hPort, CLRRTS);
SetPriorityClass(GetCurrentProcess(), iOldClass);
SetThreadPriority(GetCurrentThread(), iOldPriority);
return bRet;
}
當最後一個或兩個字節寫入串行端口時,WriteFile()會返回。他們還沒有離開端口,因此需要發送2個額外的字節。當您執行CLRRTS時,其中一個或兩個人都會被破壞。
就像我說的...這很醜。
我討厭在嵌入式開發問題時可以在任何地方找到有限的支持。理學士在計算機工程,EIT和我正在做的.Net開發全職,而我渴望與我的開發板和fpgas修補,希望工具和支持嵌入式開發不久的將來會好起來。 但我希望你在這個問題上運氣。 – marr75 2009-06-19 15:28:22