当前位置: 技术问答>linux和unix
关于嵌入式驱动程序的问题。
来源: 互联网 发布时间:2016-03-20
本文导语: #elif defined(USE_INTERRUPT) interruptible_sleep_on(&wq); "#elif defined(USE_INTERRUPT)"这句应该是做得什么。 高手能够指点下,我有些问题,谢谢。 我做得是基于ARM9的LINUX的嵌入式系统驱动程序的开发。 | ...
#elif defined(USE_INTERRUPT)
interruptible_sleep_on(&wq);
"#elif defined(USE_INTERRUPT)"这句应该是做得什么。
高手能够指点下,我有些问题,谢谢。
我做得是基于ARM9的LINUX的嵌入式系统驱动程序的开发。
interruptible_sleep_on(&wq);
"#elif defined(USE_INTERRUPT)"这句应该是做得什么。
高手能够指点下,我有些问题,谢谢。
我做得是基于ARM9的LINUX的嵌入式系统驱动程序的开发。
|
只是一句条件判断,
#if **
#elif **
...
#endif
#if **
#elif **
...
#endif
|
void sleep_on(wait_queue_head_t *queue);
void interruptible_sleep_on(wait_queue_head_t *queue);
如你可能期望的, 这些函数无条件地使当前进程睡眠在给定队列尚. 这些函数强烈不推荐, 但是, 并且你应当从不使用它们. 如果你想想它则问题是明显的: sleep_on 没提供方法来避免竞争条件. 常常有一个窗口在当你的代码决定它必须睡眠时和当 sleep_on 真正影响到睡眠时. 在那个窗口期间到达的唤醒被错过. 因此, 调用 sleep_on 的代码从不是完全安全的.
当前计划对 sleep_on 和 它的变体的调用(有多个我们尚未展示的超时的类型)在不太远的将来从内核中去掉.
void interruptible_sleep_on(wait_queue_head_t *queue);
如你可能期望的, 这些函数无条件地使当前进程睡眠在给定队列尚. 这些函数强烈不推荐, 但是, 并且你应当从不使用它们. 如果你想想它则问题是明显的: sleep_on 没提供方法来避免竞争条件. 常常有一个窗口在当你的代码决定它必须睡眠时和当 sleep_on 真正影响到睡眠时. 在那个窗口期间到达的唤醒被错过. 因此, 调用 sleep_on 的代码从不是完全安全的.
当前计划对 sleep_on 和 它的变体的调用(有多个我们尚未展示的超时的类型)在不太远的将来从内核中去掉.
|
应该好好补补基础的东西 了。
POLLING和INTERRUPT的不同点。
POLLING会占用CPU,因为CPU一直需要查询状态;中断方式不需要。
cpu_to_be32用于字节序装换, (需要先了解little endian, big endian)
可以参考 http://www.aoc.nrao.edu/~tjuerges/ALMA/Kernel/kernel-hacking/ch06s06.html
不懂的可以用google搜索。
POLLING和INTERRUPT的不同点。
POLLING会占用CPU,因为CPU一直需要查询状态;中断方式不需要。
cpu_to_be32用于字节序装换, (需要先了解little endian, big endian)
可以参考 http://www.aoc.nrao.edu/~tjuerges/ALMA/Kernel/kernel-hacking/ch06s06.html
不懂的可以用google搜索。