當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]今天寫把自己的一個(gè)程序改成多文件后出現(xiàn)了下面的一個(gè)報(bào)警:not in formal parameter list找了半天也沒(méi)有解決問(wèn)題,后來(lái)在網(wǎng)上找到別人解決同樣問(wèn)題的方法.他是頭文件一個(gè)函數(shù)聲明時(shí)落了個(gè)分號(hào)造成的,我立刻檢查自己的

今天寫把自己的一個(gè)程序改成多文件后出現(xiàn)了下面的一個(gè)報(bào)警:not in formal parameter list
找了半天也沒(méi)有解決問(wèn)題,后來(lái)在網(wǎng)上找到別人解決同樣問(wèn)題的方法.他是頭文件一個(gè)函數(shù)聲明時(shí)落了個(gè)分號(hào)造成的,我立刻檢查自己的程序,發(fā)現(xiàn)同樣少了一個(gè)分號(hào).分號(hào)添上后編譯鏈接通過(guò).
下面是我轉(zhuǎn)載的別人解決問(wèn)題的文章:
error C132 :“****”not in formal parameter list
花了偶將近半個(gè)小時(shí)來(lái)查找錯(cuò)誤,最終發(fā)現(xiàn)原來(lái)是在頭文件里的一個(gè)函數(shù)聲明時(shí)露了一個(gè)分號(hào)造成緊挨著在它下面聲明的參數(shù)not in formal parameter list。記在在這里,免得以后忘記了,同時(shí)也供大家分享。錯(cuò)誤代碼如下:
之前我在函數(shù)聲明出列出函數(shù)聲明如下:
void Display_Normal();
void Display_Reset()
void Display_Year();
void Display_Month();
void Display_Day();
void Display_Week();
void Display_Hour();
void Display_Minute();
void Display_Second();

下面是另外一些常見的錯(cuò)誤提示 :
1.第一種錯(cuò)誤信息
***WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1 CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP
***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_SPI_SEND_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP
***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP ­
該警告表示連接器發(fā)現(xiàn)有一個(gè)函數(shù)可能會(huì)被主函數(shù)和一個(gè)中斷服務(wù)程序(或者調(diào)用中斷服務(wù)程序的函數(shù))同時(shí)調(diào)用, 或者同時(shí)被多個(gè)中斷服務(wù)程序調(diào)用。
出現(xiàn)這種問(wèn)題的原因之一是這個(gè)函數(shù)是不可重入性函數(shù),當(dāng)該函數(shù)運(yùn)行時(shí)它可能會(huì)被一個(gè)中斷打斷,從而使得結(jié)果發(fā)生變化 并可能會(huì)引起一些變量形式的沖突(即引起函數(shù)內(nèi)一些數(shù)據(jù)的丟失,可重入性函數(shù)在任何時(shí)候都可以被ISR打斷,一段時(shí)間后又可以 運(yùn)行,但是相應(yīng)數(shù)據(jù)不會(huì)丟失)。 原因之二是用于局部變量和變量(暫且這樣翻譯,arguments,[自變量,變?cè)粩?shù)值,用于確定程序或子程序的值])的內(nèi)存區(qū)被其他函數(shù)的內(nèi)存區(qū)所覆蓋,如果該函數(shù)被中斷,則它的內(nèi)存區(qū)就會(huì) 被使用,這將導(dǎo)致其他函數(shù)的內(nèi)存沖突。 例如,第一個(gè)警告中函數(shù)WRITE_GMVLX1_REG 在D_GMVLX1.C 或者D_GMVLX1.A51被定義,它被一個(gè)中斷服務(wù)程序或者一個(gè)調(diào)用了中斷 服務(wù)程序的函數(shù)調(diào)用了,調(diào)用它的函數(shù)是VSYNC_INTERRUPT,在MAIN.C中。 解決方法: 如果你確定兩個(gè)函數(shù)決不會(huì)在同一時(shí)間執(zhí)行(該函數(shù)被主程序調(diào)用并且中斷被禁止),并且該函數(shù)不占用內(nèi)存(假設(shè)只使用寄存器), 則你可以完全忽略這種警告。 如果該函數(shù)占用了內(nèi)存,則應(yīng)該使用連接器(linker)OVERLAY指令將函數(shù)從覆蓋分析(overlay analysis)中除去,例如: OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *)
上面的指令防止了該函數(shù)使用的內(nèi)存區(qū)被其他函數(shù)覆蓋。如果該函數(shù)中調(diào)用了其他函數(shù),而這些被調(diào)用在程序中其他地方也被調(diào)用, 你可能會(huì)需要也將這些函數(shù)排除在覆蓋分析(overlay analysis)之外。這種OVERLAY指令能使編譯器除去上述警告信息。 如果函數(shù)可以在其執(zhí)行時(shí)被調(diào)用,則情況會(huì)變得更復(fù)雜一些。
這時(shí)可以采用以下幾種方法:
A.主程序調(diào)用該函數(shù)時(shí)禁止中斷,可以在該函數(shù)被調(diào)用時(shí)用#pragma disable語(yǔ)句來(lái)實(shí)現(xiàn)禁止中斷的目的。必須使用OVERLAY指令將該函數(shù) 從覆蓋分析中除去。
B.復(fù)制兩份該函數(shù)的代碼,一份到主程序中,另一份復(fù)制到中斷服務(wù)程序中。
C.將該函數(shù)設(shè)為重入型。例如: void myfunc(void) reentrant { ... } 這種設(shè)置將會(huì)產(chǎn)生一個(gè)可重入堆棧,該堆棧被被用于存儲(chǔ)函數(shù)值和局部變量,用這種方法時(shí)重入堆棧必須在STARTUP.A51文件中配置。 這種方法消耗更多的RAM并會(huì)降低重入函數(shù)的執(zhí)行速度。

2.第二種錯(cuò)誤信息 *** WARNING L16:UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS ­SEGMENT: ?PR?_COMPARE?TESTLCD 說(shuō)明:程序中有些函數(shù)(或片段)以前(調(diào)試過(guò)程中)從未被調(diào)用過(guò),或者根本沒(méi)有調(diào)用它的語(yǔ)句。 這條警告信息前應(yīng)該還有一條信息指示出是哪個(gè)函數(shù)導(dǎo)致了這一問(wèn)題。只要做點(diǎn)簡(jiǎn)單的調(diào)整就可以。不理它也沒(méi)什么大不了的。 解決方法:去掉COMPARE()函數(shù)或利用條件編譯#if …..#endif,可保留該函數(shù)并不編譯。

3. Warning 280:’i’:unreferenced local variable
說(shuō)明局部變量i 在函數(shù)中未作任何的存取操作
解決方法消除函數(shù)中i 變量的宣告

4 Warning 206:’Music3’:missing function-prototype
說(shuō)明Music3( )函數(shù)未作宣告或未作外部宣告所以無(wú)法給其他函數(shù)調(diào)用
解決方法將敘述void Music3(void)寫在程序的最前端作宣告如果是其他文件的函數(shù)
則要寫成extern void Music3(void),即作外部宣告

5 Compling :C:8051MANN.C
Error:318:can’t open file ‘beep.h’
說(shuō)明在編譯C:8051MANN.C 程序過(guò)程中由于main.c 用了指令#include “beep.h”,但
卻找不到所致
解決方法編寫一個(gè)beep.h 的包含檔并存入到c:8051 的工作目錄中

6 Compling:C:8051LED.C
Error 237:’LedOn’:function already has a body
說(shuō)明LedOn( )函數(shù)名稱重復(fù)定義即有兩個(gè)以上一樣的函數(shù)名稱
解決方法修正其中的一個(gè)函數(shù)名稱使得函數(shù)名稱都是獨(dú)立的

7 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_DELAYX1MS?DELAY
說(shuō)明DelayX1ms( )函數(shù)未被其它函數(shù)調(diào)用也會(huì)占用程序記憶體空間
解決方法去掉DelayX1ms( )函數(shù)或利用條件編譯#if …..#endif,可保留該函數(shù)并不編

8 ***WARNING 6 :XDATA SPACE MEMORY OVERLAP
FROM : 0025H
TO: 0025H
說(shuō)明外部資料ROM 的0025H 重復(fù)定義地址
解決方法外部資料ROM 的定義如下
Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 變量的名稱為0x25,請(qǐng)檢查是否有其它的變量名稱也是定義在0x25 處并修正它

9 WARNING 206:’DelayX1ms’: missing function-prototype
C:8051INPUT.C
Error 267 :’DelayX1ms ‘:requires ANSI-style prototype C:8051INPUT.C
說(shuō)明程序中有調(diào)用DelayX1ms 函數(shù)但該函數(shù)沒(méi)定義即未編寫程序內(nèi)容或函數(shù)
已定義但未作宣告
解決方法編寫DelayX1ms 的內(nèi)容編寫完后也要作宣告或作外部宣告可在delay.h
的包含檔宣告成外部以便其它函數(shù)調(diào)用

10 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL:MUSIC3
MODULE:C:8051MUSIC.OBJ(MUSIC)
***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:MUSIC3
MODULE:C:8051MUSIC.OBJ(MUSIC)
ADDRESS:0018H
說(shuō)明程序中有調(diào)用MUSIC 函數(shù)但未將該函數(shù)的含擴(kuò)檔C 加入到工程檔
Prj 作編譯和連接
解決方法設(shè)MUSIC3 函數(shù)在MUSIC C 里將MUSIC C 添加到工程文件中去

11 ***ERROR 107:ADDESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: _DATA_GOUP_
LENGTH: 0018H
***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNAL
SYMBOL: VOLUME
MODULE: C:8051OSDM.OBJ (OSDM)
ADDRESS: 4036H
說(shuō)明data 存儲(chǔ)空間的地址范圍為0~0x7f,當(dāng)公用變量數(shù)目和函數(shù)里的局部變量如果存
儲(chǔ)模式設(shè)為SMALL 則局部變量先使用工作寄存器R2~R7 作暫存當(dāng)存儲(chǔ)器不夠用時(shí)則會(huì)
以data 型別的空間作暫存的個(gè)數(shù)超過(guò)0x7f 時(shí)就會(huì)出現(xiàn)地址不夠的現(xiàn)象
解決方法將以data 型別定義的公共變量修改為idata 型別的定義


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉