問:我得到一個(gè)錯(cuò)誤:“function * appears in multiple call graphs: rooted at *”,這是什么意思?
答:它意味著有一個(gè)函數(shù)既在中斷里調(diào)用了又在主函數(shù)中調(diào)用了,而編譯器是不支持重入的。因?yàn)楹瘮?shù)是不能重入的,所以它基于在兩個(gè)地方同時(shí)調(diào)用的可能性而報(bào)這個(gè)錯(cuò)誤。有幾種辦法可以繞開這個(gè)問題:
1. 如果ROM空間允許的話,可以把這個(gè)函數(shù)復(fù)制一份并另取一個(gè)不一樣的名稱。一個(gè)給中斷調(diào)用,另一個(gè)給主函數(shù)調(diào)用。
2. 重寫這個(gè)函數(shù),讓它不帶參數(shù)并且沒有局部變量。如果函數(shù)沒有參數(shù)和局部變量,那么它將可以被中斷和主函數(shù)同時(shí)調(diào)用。
3. 如果你能夠保證這個(gè)函數(shù)一定不會(huì)同時(shí)被調(diào)用,那么你可以使用#pragma interrupt_level 偽指令。這個(gè)指令在使用說(shuō)明書里已經(jīng)詳細(xì)說(shuō)明了,這里簡(jiǎn)單介紹如下:
#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(); /* 在中斷使能之前被調(diào)用 */
EI(); /* 使能中斷 */
/* more code */
-
編碼器
+關(guān)注
關(guān)注
45文章
3667瀏覽量
135235 -
MPLAB
+關(guān)注
關(guān)注
9文章
217瀏覽量
67019
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
XC8編譯器與8位PIC MCU兼容嗎?
怎么在兼容模式下使用XC8編譯器
XC8編譯器中的eeprom_read/write宏出現(xiàn)問題
MPLAB XC8 C編譯器是否可以屏蔽/禁用有關(guān)pitch的咨詢報(bào)告?
MPLAB C18編譯器到MPLAB XC8 C編譯器的移植過程詳細(xì)中文資料概述
MPLAB XC8 C編譯器的用戶指南詳細(xì)中文資料概述免費(fèi)下載
![<b class='flag-5'>MPLAB</b> <b class='flag-5'>XC8</b> C<b class='flag-5'>編譯器</b>的用戶指南詳細(xì)中文資料概述免費(fèi)下載](https://file.elecfans.com/web1/M00/53/30/pIYBAFseQWeAOjkqAACZOYfuw-s369.png)
如何將C源代碼從MPLAB C18編譯器移植到MPLAB XC8C編譯器的詳細(xì)概述
![如何將C源代碼從<b class='flag-5'>MPLAB</b> C18<b class='flag-5'>編譯器</b>移植到<b class='flag-5'>MPLAB</b> <b class='flag-5'>XC8</b>C<b class='flag-5'>編譯器</b>的詳細(xì)概述](https://file.elecfans.com/web1/M00/52/F1/pIYBAFsYqfmAJIh9AACRTaIAtmw014.png)
MPLAB XC8入門教程之啟動(dòng)指南資料免費(fèi)下載
MPLAB C18到MPLAB XC8的移植概述
PIC MCC配置與XC8編譯器問題
![PIC MCC配置與<b class='flag-5'>XC8</b><b class='flag-5'>編譯器</b>問題](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
MPLAB XC8 PIC匯編器的簡(jiǎn)單介紹
適用于AVR MCU的MPLAB XC8 C編譯器用戶指南
![適用于AVR MCU的<b class='flag-5'>MPLAB</b> <b class='flag-5'>XC8</b> C<b class='flag-5'>編譯器</b>用戶指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
適用于PIC MCU的MPLAB XC8 C編譯器用戶指南
![適用于PIC MCU的<b class='flag-5'>MPLAB</b> <b class='flag-5'>XC8</b> C<b class='flag-5'>編譯器</b>用戶指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論