700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 中断服务程序ISR

中断服务程序ISR

时间:2023-01-15 19:02:54

相关推荐

中断服务程序ISR

转载

中断服务程序ISR

-09-25 15:52:58|分类:C/C++编程|举报|字号订阅

中断服务程序需要满足如下要求: (1) 不能返回值 (2) 不能向ISR传递参数 (3) ISR应该尽可能的短小精悍 (4) printf(char* lpFormatString,...)函数会带来重入和性能问题,不能在ISR中采用。

在某项目的开发中,我们设计了一个队列,在中断服务程序中,只是将中断类型添加入该队列中,在主程序 的死循环中不断的扫描中断队列是否有了中断,有则取出队列中的第一个中断类型,进行相应的处理。 /*存放中断的队列*/ typedef struct tagIntQueue { int intType;/*中断类型*/ struct tagIntQueue *next; }IntQueue;

IntQueue lpIntQueueHead;

__interrupt ISRexample() { int intType; intType = GetSysType(); QueueAddTail(lpIntQueueHead,intType);/*在队列尾加入新的中断*/ }

在主程序循环中判断是否有中断: while(1) { if(! IsIntQueueEmpty()) { intType = GetFirstInt(); switch(intType)/*是不是很像WIN32程序的消息解析函数*/ { /*对,我们的中断类型解析很类似于消息驱动*/ case xxx: /*我们称之为'中断驱动'吧*/ ... break; case xxx: ...break; ... } } }

按上述的方法设计的中断服务程序很小,实际的工作都交由主程序执行了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。