嵌入式软件工程师笔试面试题分类汇总——中断服务函数


  今天来学习记录下中断服务函数(ISR)。关于中断,其实大家或多或少都会了解过,那么,在笔试&面试中,关于中断服务子函数,我们又需要知道那些知识点?

1.中断服务函数4大注意点

1. 中断服务函数不能有返回值;
2. 中断服务函数不能传入参数;
3. 中断服务函数要短小精悍;
4. 中断服务函数中不能使用printf等glibc函数,会带来重入性和性能问题;

解析:首先,中断源连接到硬件,由硬件来触发产生中断,即:中断源提出中断申请,而中断申请一般由硬件电路产生,申请提出时间是随机的,因此中断的产生是随机的,也就是说,中断服务函数的调用是硬件级别的。当中断产生时,pc指针强制跳转到相应的中断服务函数入口执行中断服务函数
  1)关于返回值,需要进行入栈出栈操作。由于中断是随机的,且由硬件告知,并不是由某段代码调用,所以,如果有返回值那么返回值将返回给谁?显然,这是毫无意义的!也就是说,如果中断服务函数有返回值,返回时将返回值压入栈中后,那么何时出栈、如何出栈?
  2)关于传入参数,这和返回值类似,也需要入栈出栈,那么什么时候入栈,谁给它传递参数?
  3)至于ISR要短小精悍就更好理解了。假设存在一个中断,其中断产生的次数较为频繁,而它对应ISR耗时较长,那么对于中断的响应就会无限的延迟,从而会错过很多中断请求;
  4)关于printf函数带来的重入性和性能问题,需要了解像printf这样的glibc函数,其采用的是缓冲机制,该缓冲区域是共享的,可以理解为全局变量。当某个中断发生时,向缓冲区中写入某些内容,而恰巧此时来了一个更高级的中断,它同样调用了printf函数,也向缓冲区中写入某些内容,此时,缓冲区中的内容就混乱了。

2.中断和调用子程序的那点破事

中断和子程序的调用有一定的相

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值