Windows嵌入式疑难问题解答
时间:05-28
来源:互联网
点击:
问:我的用户态驱动和内核态ISR要对I/O设备协同操作才能完成, 但我的IO设备是这样工作的:
IO设备只有一个地址,内部有16个寄存器,
要对设备中的寄存器读写时, 要先往IO 端口中写寄存器号,再在这个端口读写,(有点像对COMS的操作)
这就要保证一个读写操作要两次IO,并且一定要成对出现,就是这两个操作要是原子的,不可拆分;
如果IST正刚往端口中写了寄存器号,还没来得及写数据,这时中断来了,ISR也要操作设备,那不是乱了,
这种问题怎么解决呢?有没有什么信号量、互斥量什么的可以用?
答:看看ISR 和 IST的协助方式,就知道如何解决这种问题,在网上也有人已经回答了这个问题:
1. IST 在操作时, 通常还没 call InterruptDone(dwSysIntr);, 故 ISR 不会产生中断, 就没有这个问题了.
2. ISR 先把 Index Register 读出後保存後再修改, 离开前再改回原值.
3. 将 IST 要读的值全部放在 ISR 内读完, 再用 Share Memory 的方式, 送给 IST.
- FPGA设计的安全性问题解答(09-10)
- PCI Express架构QA问题解答(05-10)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)