BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #16071同步于 2016/1/12
Embedded_System机器人发帖

新手来报到二:DPC方式给中断服务程序减负

VxWorks55
2016/1/12镜像同步0 回复
DPC方式,即任务方式,把ISR中大量数据的处理流程搬移到一个高优先级的任务中处理,从而大大减少在ISR中停留的时间,防止ISR阻塞。 DPC实现方法: SEM_ID semISRtoDPC = 0; extern int intNO; STATUS init() { STATUS status = OK; semISRtoDPC = semBCreate (SEM_Q_PRIORITY, SEM_FULL); if(semISRtoDPC == 0) { return ERROR; } intDisable(intNO);/*禁止中断*/ intConnect(intNO,isrFunction,0);/*挂接中断服务程序*/ intEnable(intNO);/*使能中断*/ status = taskSpawn ("tDPC", 50,VX_FP_TASK, 20000, taskDPC, 0,0,0,0,0,0,0,0,0,0); if(status == 0) { return ERROR; } return OK; } void isrFunction()/*中断服务程序。仅在收到中断后,通知DPC去取数*/ { if(TRUE)/*收到正确的中断*/ { semGive(semISRtoDPC); } } void taskDPC()/*在该函数中取数数据、上传*/ { while(1) { semTake(semISRtoDPC,WAIT_FOREVER); /*取数操作*/ buf = ReadMEM(0xadd); /*清中断操作*/ } } 注:DPC方式可极大减轻ISR的负担,加快系统运转速度,但是,如果任务优先级设置不当,可能会造成丢数等异常发生。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。