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