MPLAB XC8编译器得到错误function什么意思

描述

问:我得到一个错误:“function * appears in multiple call graphs: rooted at *”,这是什么意思?

答:它意味着有一个函数既在中断里调用了又在主函数中调用了,而编译器是不支持重入的。因为函数是不能重入的,所以它基于在两个地方同时调用的可能性而报这个错误。有几种办法可以绕开这个问题:

1. 如果ROM空间允许的话,可以把这个函数复制一份并另取一个不一样的名称。一个给中断调用,另一个给主函数调用。

2. 重写这个函数,让它不带参数并且没有局部变量。如果函数没有参数和局部变量,那么它将可以被中断和主函数同时调用。

3. 如果你能够保证这个函数一定不会同时被调用,那么你可以使用#pragma interrupt_level 伪指令。这个指令在使用说明书里已经详细说明了,这里简单介绍如下:

#pragma interrupt_level 1
void common_func(void)
{
   /* local variable definitions */

/* code */
}

#pragma interrupt_level 1
void interrupt isr(void)
{
    common_func();
    /* more code */
}


void main(void)
{
   common_func();  /* 在中断使能之前被调用 */
   EI();    /* 使能中断 */
   /* more code */

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分