久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Keil C 中的一些ERROR和WARNING

 變幻時(shí) 2010-09-15
1. LAB100.C(12): error C216: subscript on non-array or too many dimensions
原程序如下:
#include <reg51.h> 
#include <intrins.h>
void delay(int);
unsigned char code dis_code[8]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a};
main()     
{ int i,j;
 P2=0xff;
 while(1)
 { P2=0x7f;
  for(i=0;i<8;i++)
     { P0=dis_code[i];
      P2=_crol_[j,1];
   j=P2;
   delay(1);
         }
 }
}
void delay(int x)
{ int i;
 for(i=0;i<x;i++);
}
問題在于P2=_crol_[j,1];
應(yīng)該改為P2=_crol_(j,1);
2. 從網(wǎng)上COPY的程序執(zhí)行類似的功能,有時(shí)候如果現(xiàn)象沒出現(xiàn),,或者不明顯,,可以調(diào)整下延遲函數(shù)。
3. 數(shù)碼管的掃描顯示0—7,,延遲函數(shù)的延遲時(shí)間在1ms左右,,是通過人眼的視覺暫留而產(chǎn)生的現(xiàn)象,
 如果延遲函數(shù)設(shè)置的太大,,則看不到持續(xù)顯示0—7的現(xiàn)象,。
4. 用KEILC51調(diào)試程序時(shí),出現(xiàn)錯(cuò)誤提示為“unprintable character 0XA1 skipped”
用KEILC51調(diào)試程序時(shí),,出現(xiàn)錯(cuò)誤提示為“unprintable character 0XA1 skipped”的問題,。
輸入法的問題。在程序行輸入中文模式下標(biāo)點(diǎn)符號(hào),,不會(huì)顯示,,但是會(huì)出現(xiàn)標(biāo)題這樣的問題。
打上//馬上就能看到?jīng)]有顯示的標(biāo)點(diǎn)符號(hào)
5. *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
 SEGMENT: ?PR?_COMPARE?TESTLCD
說明:程序中有些函數(shù)(或片段)以前(調(diào)試過程中)從未被調(diào)用過,或者根本沒有調(diào)用它的語句,。
這條警告信息前應(yīng)該還有一條信息指示出是哪個(gè)函數(shù)導(dǎo)致了這一問題,。只要做點(diǎn)簡(jiǎn)單的調(diào)整就可以。
不理它也沒什么大不了的,。解決方法:去掉COMPARE()函數(shù)或利用條件編譯#if …..#endif,可保留該函數(shù)并不編譯,。
6. LAB99.C(19): error C141: syntax error near '{', expected 'const'
程序如下:
#include<reg51.h>
#include<intrins.h>
sbit LEDP=P1^0;
unsigned char counter;
main()
{ TMOD=0x01;
 TH0=0x3C;
 TL0=0xB0;
 counter=0x0A;
 EA=1;
      ET0=1;
      TR0=1;
      while(1)
     {};
}
void timer0_int(void) interrupt
{ TH0=0x3C;
 TL0=0xB0;
 counter--;
      if((counter)!=0)
      {     counter=0x0A;
              LEDP=~LEDP;
      }
}
問題在中斷函數(shù)的寫法上,C下面51的中斷函數(shù)要這么寫:
void timer0_int(void) interrupt      N using M
其中的N是不同中斷對(duì)應(yīng)的中斷號(hào),,一般單片機(jī)的書上都有說明的,,M是這個(gè)中斷函數(shù)在存儲(chǔ)空間中所占的bank,一般不要和main函數(shù)的一樣就可以了,,而main函數(shù)的在bank0,,那么針對(duì)51單片機(jī),這個(gè)M可以為1,,2,,3
 
7. C51編譯警告“*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL”
 *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?C_START
    MODULE:  .STARTUP.obj (?C_STARTUP)
 *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  ?C_START
    MODULE:  .STARTUP.obj (?C_STARTUP)
    ADDRESS: 000DH
         如果你在用C51編譯器出現(xiàn)上面的警告,,并且找遍了網(wǎng)上也沒能找出個(gè)究竟時(shí),你是否覺得這個(gè)問題很難,,難得以至于沒人能回答呢,?
        其實(shí)這個(gè)只是初學(xué)者和粗心者才會(huì)犯的錯(cuò)誤:沒把C文件添加到項(xiàng)目中!
///另外,,還有可能是因?yàn)榇嬖跊]有被調(diào)用的已經(jīng)定義的函數(shù),。
 
本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/liufei_learning/archive/2010/07/15/5737531.aspx
8. *** WARNING L15: MULTIPLE CALL TO SEGMENT***
原因Warning 15向我們表明了linker發(fā)現(xiàn)了一個(gè)函數(shù),,這個(gè)函數(shù)不僅在main code里被調(diào)用了,,而且在ISR(或者被ISR調(diào)用的函數(shù)中)被調(diào)用了?;蛘呤潜煌瑫r(shí)被多個(gè)ISR同時(shí)調(diào)用了,。

這樣會(huì)產(chǎn)生一個(gè)問題,就是在此函數(shù)不是一個(gè)可重入函數(shù),,而當(dāng)此函數(shù)已經(jīng)在執(zhí)行時(shí)它可能被另一個(gè)ISR所調(diào)用,。這樣就會(huì)導(dǎo)致結(jié)果是可變的而且很可能會(huì)導(dǎo)致一些參數(shù)的錯(cuò)誤。
另一個(gè)問題就是本地變量和參數(shù)所使用的內(nèi)存可能被其他函數(shù)的內(nèi)存覆蓋,。如果函數(shù)是由中斷所調(diào)用的,,則此函數(shù)的內(nèi)存就會(huì)被使用。這會(huì)引起其它函數(shù)的內(nèi)存錯(cuò)誤,。
舉例來說,,對(duì)于你的第一個(gè)警告,WRITE_GMVLX1_REG是會(huì)被多個(gè)root所調(diào)用,。其被定義在D_GMVLX1.C或者D_GMVLX1.A51中,。他不僅會(huì)被ISR(或者被ISR調(diào)用的函數(shù))而且也會(huì)被MAIN.C中的VSYNC_INTERRUPT函數(shù)所調(diào)用。
解決辦法: (1).主程序調(diào)用該函數(shù)時(shí)禁止中斷,,可以在該函數(shù)被調(diào)用時(shí)用#pragma disable語句來實(shí)現(xiàn)禁止中斷的目的,。必須使用OVERLAY指令將該函數(shù)從覆蓋分析中除去。
(2).復(fù)制兩份該函數(shù)的代碼,,一份到主程序中,,另一份復(fù)制到中斷服務(wù)程序中。
(3).將該函數(shù)設(shè)為重入型,。例如:
 void myfunc(void) reentrant {
  ...
 }
   這種設(shè)置將會(huì)產(chǎn)生一個(gè)可重入堆棧,,該堆棧被被用于存儲(chǔ)函數(shù)值和局部變量,用這種方法時(shí)重入堆棧必須在STARTUP.A51文件中配置,。
這種方法消耗更多的RAM并會(huì)降低重入函數(shù)的執(zhí)行速度,。
9. void delay(unsigned char i)
{
  while(i--)
    {
     ;
    }
}
main()
{
  unsigned char i,k;
  while(1)
  {
  i=8;
  delay(i);
  i=7;
  delay(i);
  k=10;
  }
}
編譯器的意思是我那行程序i=7;沒有用,怎么解決這個(gè)問題呢
 實(shí)際上是被編譯了的,,
調(diào)用函數(shù)時(shí)傳遞的的確是7,。沒有寫回到i倒是事實(shí),因?yàn)榫幾g器認(rèn)為后面不再用i了,,所以就沒有回寫,。
如果你將下面的k=10改成k=i,那么就會(huì)將7寫回到i,,并且keil編譯器不會(huì)直接使用立即數(shù)7,,而用一條減1指令,從前面的8減1變成7,。
10.  單片機(jī)中_crol_函數(shù)的的意思: 
_crol_(a,m) 將a循環(huán)左移,,步進(jìn)為m
_cror_(a,n) 將a循環(huán)右移,步進(jìn)為n
11. if(temp-ret>min_value)
 { min_value=temp-ret;
  min_id=i; 
 
 }
LAB06.C(72): error C193: '-': illegal op-type(s)
此處需要強(qiáng)制類型轉(zhuǎn)換,,因?yàn)樯厦嬗幸欢x unsigned int  ret[50]. unsigned int temp = 0
temp和ret不是同一類型數(shù)據(jù),。
12. 用KEILC51調(diào)試程序時(shí),出現(xiàn)錯(cuò)誤提示為“unprintable character 0XA1 skipped”的問題,。
輸入法的問題,在程序行輸入中文模式下標(biāo)點(diǎn)符號(hào),,不會(huì)顯示,但是會(huì)出現(xiàn)標(biāo)題這樣的問題,打上//馬上就能看到?jīng)]有顯示的標(biāo)點(diǎn)符號(hào)
13.  #include "stdafx.h"
#include"stdio.h"
#include"conio.h"
int main(int argc, char* argv[])
{char a[9][9]={{"","","","*"},{"","","*","*","*"},{"","*","*","*","*","*"},{"*","*","*","*","*","*","*"},{"","*","*","*","*","*"},{"","","*","*","*"},{"","","","*"}};
int i,j;
printf("%c",a[i][j]);
return 0;
}
 error C242: 'a[][]': too many initializers
如果要使用缺省賦值,則前面的每行不能缺省賦值,只能在最后缺省,也就是你可以對(duì)前7行進(jìn)行完全賦值,后兩行缺省,卻不能每行中缺一些,還缺行. initializer 初始化
14.       Warning 280:’i?unreferenced local variable
說明局部變量i 在函數(shù)中未作任何的存取操作解決方法消除函數(shù)中i 變量的宣呿

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

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

17.      Compling:C:\8051\LED.C
Error 237:’LedOn? already has a body
說明LedOn( )函數(shù)名稱重復(fù)定義即有兩個(gè)以上一樣的函數(shù)名稱
解決方法修正其中的一個(gè)函數(shù)名稱使得函數(shù)名稱都是獨(dú)立的
18.  ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_DELAYX1MS?DELAY
說明DelayX1ms( )函數(shù)未被其它函數(shù)調(diào)用也會(huì)占用程序記憶體空間解決方法去掉DelayX1ms( )函數(shù)或利用條件編諉if ?.#endif,可保留該函數(shù)并不編譯
19.  ***WARNING 6 :XDATA SPACE MEMORY OVERLAP
FROM : 0025H
TO: 0025H
說明外部資料ROM 皿025H 重復(fù)定義地址
解決方法外部資料ROM 的定義如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 變量的名稱為0x25,請(qǐng)檢查是否有其它的變量名稱也是定義在0x25 處并修正宿br>
20.  WARNING 206:’DelayX1ms? missing -prototype
C:\8051\INPUT.C
Error 267 :’DelayX1ms ?requires ANSI-style prototype C:\8051\INPUT.C
說明程序中有調(diào)用DelayX1ms 函數(shù)但該函數(shù)沒定義即未編寫程序內(nèi)容或函數(shù)已定義但未作宣告
解決方法編寫DelayX1ms 的內(nèi)容編寫完后也要作宣告或作外部宣告可在delay.h 的包含檔宣告成外部以便其它函數(shù)調(diào)甿br>
21.  ***WARNING 1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL:MUSIC3
MODULE:C:\8051\MUSIC.OBJ(MUSIC)
***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL:MUSIC3
MODULE:C:\8051\MUSIC.OBJ(MUSIC)
ADDRESS:0018H
說明程序中有調(diào)用MUSIC 函數(shù)但未將該函數(shù)的含擴(kuò)檔C 加入到工程檔Prj 作編譯和連接
解決方法設(shè)MUSIC3 函數(shù)在MUSIC C 里將MUSIC C 添加到工程文件中縣br>
22.  ***ERROR 107:ADDESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: _DATA_GOUP_
LENGTH: 0018H
***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNAL
SYMBOL: VOLUME
MODULE: C:\8051\OSDM.OBJ (OSDM)
ADDRESS: 4036H
說明data 存儲(chǔ)空間的地址范圍丿~0x7f,當(dāng)公用變量數(shù)目和函數(shù)里的局部變量如果存
儲(chǔ)模式設(shè)為SMALL 則局部變量先使用工作寄存器R2~R7 作暫存當(dāng)存儲(chǔ)器不夠用時(shí)則伿br> 以data 型別的空間作暫存的個(gè)數(shù)超迿x7f 時(shí)就會(huì)出現(xiàn)地址不夠的現(xiàn)豿br> 解決方法將以data 型別定義的公共變量修改為idata 型別的定乿br> 說明如對(duì)編譯出錯(cuò)感興趣的網(wǎng)友能否把你們常遇到皿strong style="COLOR: black; BACKGROUND-COLOR: #99ff99">錯(cuò)誤信息收集起來并提出最終的
解決辦法加以歸納以期共享(轉(zhuǎn)自:http://blog.sina.com.cn/s/blog_5f0bed160100cmu9.html)
23.      keilc51 的編程:
 (1),、  注意程序的輸入方法,,使用簡(jiǎn)體中文-美式鍵盤
 (2)、  拷貝程序是要注意,,防止看不到的亂碼產(chǎn)生
 (3),、  F11、step:以單步執(zhí)行程序
        F10,、step over:以過程單步執(zhí)行程序
 (4),、  error :invalid instruction operand
        錯(cuò)誤原因?yàn)檎Z句不符合語法
   
    error: illegal factor
    error: undefined symbol
    拼寫錯(cuò)誤,需要仔細(xì)檢查
   
    error:syntax error near'void'
    語法句法錯(cuò)誤
    我的錯(cuò)誤是void main()前面的一個(gè)函數(shù)缺少結(jié)束的大括號(hào)
 (5),、  memory window:C,、D、I,、X,,分別代表代碼存儲(chǔ)空間、
直接尋址的片內(nèi)存儲(chǔ)空間,、間接尋址的片內(nèi)存儲(chǔ)空間,、擴(kuò)展的外部RAM 空間;
數(shù)字代表想要查看的地址。例如輸入D:0 即可觀察到地址0 開始的片內(nèi)RAM 單元值,、鍵入C:0 即
可顯示從0 開始的ROM 單元中的值,,即查看程序的二進(jìn)制代碼。

本文來自CSDN博客,,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/lixiaohuprogram/archive/2009/09/09/4534786.aspx
24. P1是在頭文件中定義的
sfr P1=0x90;
這里就是把P1指向?qū)嶋H地址0x90(寄存器地址),,這個(gè)應(yīng)該可以理解,。
而P1^0的意思就是指P1端口的0位,“^”是個(gè)說明符,。但是,,在C語言的代碼里面,不能直接用P1^0,,因?yàn)?#8220;^”這個(gè)符號(hào)在代碼中是運(yùn)算符,,編譯器不能識(shí)別了。
所以,,一般需要重新定義
sbit P1_0=P1^0;
那么,,P1_0就可以在代碼中代表P1端口的0位了。這里P1_0也可以用其他字符表示,,例如
sbit BUSY=P1^0;
還有一個(gè)方法直接定義位變量,,注意,這里的0x90是位地址
sbit P1_0 = 0x90;
 
 
          
 
 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多