编写wince的底层驱动应该如果实现比较精确的uS、mS级延时呢?
比如我想一个GPIO先设为高电平,2uS后就变成低电平。
[解决办法]
用Winbase.h中的QueryPerformanceFrequency、QueryPerformanceCounter 试试看。
[解决办法]
1. WinCE 下是沒有 us 等級的 delay function.
2. Sleep(X) 只能保證最短 delay X ms, 沒法保證一定是剛好是 X ms (與 thread priority 有關).
3. 用一個 for loop 做 delay, 建議在 loop 中加讀取 io 的程式碼, 它的 delay 時間較不會隨最佳化或是 core clock 變更而改變.
4. 若真是那麼 time critical, 建議用一個 hardware timer, 將其寫成 installable isr, 在 driver 中將資料準備好, 在 iisr 中將資料的每個 bit 送出, 待 packet 送完後再返回 sysintr, 通知 driver 的 ist 己將該 packet 送出完成.
5. 接收要怎麼做呢?? 直接拉 gpio 中斷好了.
Paul, Chao @ Techware
[解决办法]