pic单片机

来源:百度知道 编辑:UC知道 时间:2024/05/22 23:48:27
关于pic单片机实现中断优先响应

pic单片机只有一个中断入口地址(0x0004),要进行中断处理,就得挨个查询挨个处理,把你想优先响应的中断放在前面查询就行了

如果你是用汇编编程那你就看我的帖子
如果你是用c,那就没必要了
我有资料是关于汇编中断的,给我你的邮箱

我的QQ 52245467

这部分需要对处理器的寄存器进行操作,所以必须用汇编语言来编写.包括四个子函数:OSS
tartHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickISR().
OSStartHighRdy()在多任务系统启动函数OSStart()中调用.完成的功能是:设置系统运行标
志位OSRunning = TRUE;将就绪表中最高优先级任务的栈指针Load到SP中,并强制中断返回
.这样就绪的最高优先级任务就如同从中断里返回到运行态一样,使得整个系统得以运转.

OSCtxSw()在任务级任务切换函数中调用的.任务级切换是通过SWI或者TRAP人为制造的中断
来实现的.ISR的向量地址必须指向OSCtxSw().这一中断完成的功能:保存任务的环境变量(
主要是寄存器的值,通过入栈来实现),将当前SP存入任务TCB中,载入就绪最高优先级任务的
SP,恢复就绪最高优先级任务的环境变量,中断返回.这样就完成了任务级的切换.
OSIntCtxSw()在退出中断服务函数OSIntExit()中调用,实现中断级任务切换.由于是在中断
里调用,所以处理器的寄存器入栈工作已经做完,就不用作这部分工作了.具体完成的任务:
调整栈指针(因为调用函数会使任务栈结构与系统任务切换时堆栈标准结构不一致),保存当
前任务SP,载入就绪最高优先级任务的SP,恢复就绪最高优先级任务的环境变量,中断返回.
这样就完成了中断级任务切换.
OSTickISR()系统时钟节拍中断服务函数,这是一个周期性中断,为内核提供时钟节拍.频率
越高系统负荷越重.其周期的大小决定了内核所能给应用系统提供的最小时间间隔服务.一
般只限于ms级(跟MCU有关),对于要求更加苛刻的任务需要用户自己建立中断来解决.该