中断处理函数的注意事项
2013-03-20 23:33
253 查看
中断又叫异步中断,由硬件触发。而异常又称为同步中断,由软件触发。
中断服务程序(中断处理函数)是一种处理中断响应的函数,它是一种遵循特定原型声明的C函数,它运行在中断上下文中,也称为原子上下文,代码运行在此上下文中是不能被阻塞的。中断服务程序必须运行非常快,它最基本的工作就是告诉硬件已经收到了它发出的中断,但通常还执行大量其他的工作。为此,一般中断服务程序分为两半,一半是中数据恢复处理函数,称为上半部,它只执行那些可以很快执行的代码,如向硬件确认已经收到中断号等,其他的工作要延迟到下半部去执行。
执行在中断上下文中的代码需要注意的一些事项:
中断上下文中的代码不能进入休眠。
不能使用mutex,只能使用自旋锁,且仅当必须时。
中断处理函数不能直接与用户空间进行数据交换。
中断处理程序应该尽快结束。
中断处理程序不需要是可重入的,因为相同的中断处理函数不能同时在多个处理器上运行。
中断处理程序可能被一个优先级更高的中断处理程序所中断。为了避免这种情况,可以要求内核将中断处理程序标记为一个快速中断处理程序(将本地CPU上的所有中断禁用),不过在采取这个动作前要慎重考虑对系统的影响。
中断服务程序(中断处理函数)是一种处理中断响应的函数,它是一种遵循特定原型声明的C函数,它运行在中断上下文中,也称为原子上下文,代码运行在此上下文中是不能被阻塞的。中断服务程序必须运行非常快,它最基本的工作就是告诉硬件已经收到了它发出的中断,但通常还执行大量其他的工作。为此,一般中断服务程序分为两半,一半是中数据恢复处理函数,称为上半部,它只执行那些可以很快执行的代码,如向硬件确认已经收到中断号等,其他的工作要延迟到下半部去执行。
执行在中断上下文中的代码需要注意的一些事项:
中断上下文中的代码不能进入休眠。
不能使用mutex,只能使用自旋锁,且仅当必须时。
中断处理函数不能直接与用户空间进行数据交换。
中断处理程序应该尽快结束。
中断处理程序不需要是可重入的,因为相同的中断处理函数不能同时在多个处理器上运行。
中断处理程序可能被一个优先级更高的中断处理程序所中断。为了避免这种情况,可以要求内核将中断处理程序标记为一个快速中断处理程序(将本地CPU上的所有中断禁用),不过在采取这个动作前要慎重考虑对系统的影响。
相关文章推荐
- 中断处理函数的注意事项
- 中断处理函数的注意事项
- mysql 编程注意事项及常用字符串处理函数
- 字符串处理函数的实现及注意事项
- SDCC中中断函数的注意事项
- STM32外部中断处理流程及注意事项
- GCC-AVR 编写中断服务函数的注意事项
- 51中断函数编写注意事项
- 中断处理函数用spinlock注意点
- C语言中字符串系列的函数实现以及注意事项
- 黑马程序员:__函数参数、声明、定义等注意事项__
- strtok()函数的使用以及注意事项
- 一个SoapExcept异常的处理以及.NET平台下WebService应用的一点注意事项
- Oracle 中常用函数注意事项
- ajax中get和post的提交、却别、错误处理以及注意事项
- 使用JQuery 将DataTable 转化成JSON数据,前端无法处理JSON数据的注意事项
- LLVM IR和C/C++函数相互调用时的注意事项
- 函数hook注意事项
- C函数参数传递之指针传递要注意的事项
- Java自学笔记(第十天)-异常-异常的处理-throws-throw-多异常处理-自定义异常-throwable类-RunTimeException类-finally-异常在方法继承中的注意事项-