問:我得到一個錯誤:“function * appears in multiple call graphs: rooted at *”,這是什么意思?
答:它意味著有一個函數(shù)既在中斷里調用了又在主函數(shù)中調用了,而編譯器是不支持重入的。因為函數(shù)是不能重入的,所以它基于在兩個地方同時調用的可能性而報這個錯誤。有幾種辦法可以繞開這個問題:
1. 如果ROM空間允許的話,可以把這個函數(shù)復制一份并另取一個不一樣的名稱。一個給中斷調用,另一個給主函數(shù)調用。
2. 重寫這個函數(shù),讓它不帶參數(shù)并且沒有局部變量。如果函數(shù)沒有參數(shù)和局部變量,那么它將可以被中斷和主函數(shù)同時調用。
3. 如果你能夠保證這個函數(shù)一定不會同時被調用,那么你可以使用#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文章
3900瀏覽量
141353 -
MPLAB
+關注
關注
9文章
222瀏覽量
68345
發(fā)布評論請先 登錄
XC8編譯器與8位PIC MCU兼容嗎?
怎么在兼容模式下使用XC8編譯器
XC8編譯器中的eeprom_read/write宏出現(xiàn)問題
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什么意思
評論