在单片机或者ARM的使用过程中,必会遇到使用片上中断资源的时候,中断单片机的灵魂和精髓所在,像定时计数器一样有很重要的作用。设置中
在单片机或许ARM的运用过程中,必会遇到运用片上中止资源的时分,中止单片机的魂灵和精华地点,像守时/计数器相同有很重要的效果。设置中止的效果是能及时呼应重要的程序呼应,以进步MCU和MPU的对重要资源的呼应速度。在呼应中止的过程中,体系会主动保存断点(C言语编程中),比及中止呼应完毕之后,程序会再次回到断点处持续履行main函数。这就呈现了问题:有或许在中止函数中调用的子函数和main函数中调用的子函数重复,比方,在main函数履行到display()显现函数的时分,产生了ESUART中止,这是程序需求保存现场和断点,将现在的main正在履行的一些资源压入仓库。如果在interrupt()函数中也调用display()函数的话,会导致中止中的函数履行不正常,即显现乱码或许不显现,在回来main函数时,也有或许导致之前压入仓库的资源产生改动,导致main()显现反常,产生不行意料的成果。可是若main函数中没有履行display函数时产生中止,则中止函数中的display函数则能正常显现。
处理这一问题的一个方法是仿制一套需求调用的子函数,给这些子函数重新命名,包含子函数中调用的子函数。这样,主函数和中止函数调用的子函数就不会产生冲突,两头都可正常履行。
如
void display(void)//供main函数调用
{
write_com(0x01);
……
……;
}
void display_interrupt(void)//供interrupt函数调用
{
write_com_interrupt(0x01);//一切被调用的子函数都应备份
……;
……;
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/259098.html