问:我得到一个错误:“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 */
-
编码器
+关注
关注
45文章
3905浏览量
141475 -
MPLAB
+关注
关注
9文章
222浏览量
68365
发布评论请先 登录
怎么在兼容模式下使用XC8编译器
XC8编译器中的eeprom_read/write宏出现问题
MPLAB XC8 C编译器是否可以屏蔽/禁用有关pitch的咨询报告?
MPLAB C18编译器到MPLAB XC8 C编译器的移植过程详细中文资料概述
MPLAB XC8 C编译器的用户指南详细中文资料概述免费下载
如何将C源代码从MPLAB C18编译器移植到MPLAB XC8C编译器的详细概述
MPLAB XC8入门教程之启动指南资料免费下载
MPLAB C18到MPLAB XC8的移植概述
PIC MCC配置与XC8编译器问题
MPLAB XC8 PIC汇编器的简单介绍
适用于AVR MCU的MPLAB XC8 C编译器用户指南
适用于PIC MCU的MPLAB XC8 C编译器用户指南

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