最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

XBYTE[0x30000]=0x00;會(huì)出錯(cuò)么?

作者:zoupeng139 欄目:單片機(jī)
XBYTE[0x30000]=0x00;會(huì)出錯(cuò)么?
XBYTE[0x30000]=0x00;會(huì)出錯(cuò)么?往大于64K的數(shù)據(jù)存儲(chǔ)器寫(xiě)東西
其實(shí)我的分頁(yè)已經(jīng)由其他程序執(zhí)行好,現(xiàn)在的希望實(shí)現(xiàn)的功能就是在當(dāng)前頁(yè)(03頁(yè))下,寫(xiě)到當(dāng)前頁(yè)的0x0000地址內(nèi),不知道這樣寫(xiě)合適不合適?

2樓: >>參與討論
xwj
當(dāng)然是:
錯(cuò)!

3樓: >>參與討論
computer00
對(duì)于keil c51來(lái)說(shuō),是不會(huì)錯(cuò)的。
 
4樓: >>參與討論
80572892
會(huì)錯(cuò)吧
0X30000已經(jīng)大于64K了啊,XBYTE對(duì)KEIL來(lái)說(shuō)其實(shí)編譯出來(lái)是MOVX,你把0X30000送到DPTR中程序會(huì)把高位截?cái),你送的?X30000可是匯編代碼是

C:0x000F    900000   MOV      DPTR,#0x0000
C:0x0012    E4       CLR      A
C:0x0013    F0       MOVX     @DPTR,A


這樣會(huì)寫(xiě)進(jìn)0x0000中,

如果你把0X30000換成0X40000  結(jié)果是一樣的。
我是這樣認(rèn)為的,如果不對(duì)請(qǐng)指點(diǎn)。


5樓: >>參與討論
computer00
呵呵,其實(shí)樓主要的就是這個(gè)功能:寫(xiě)到地址0去。
 
6樓: >>參與討論
zoupeng139
對(duì)阿,呵呵
0X30000已經(jīng)大于64K了啊,XBYTE對(duì)KEIL來(lái)說(shuō)其實(shí)編譯出來(lái)是MOVX,你把0X30000送到DPTR中程序會(huì)把高位截?cái),你送的?X30000可是匯編代碼是

C:0x000F    900000   MOV      DPTR,#0x0000
C:0x0012    E4       CLR      A
C:0x0013    F0       MOVX     @DPTR,A


這樣會(huì)寫(xiě)進(jìn)0x0000中,

如果你把0X30000換成0X40000  結(jié)果是一樣的。
我是這樣認(rèn)為的,如果不對(duì)請(qǐng)指點(diǎn)。

要是就是這樣的就太好了!請(qǐng)大蝦們?cè)賻兔Υ_定一下!
可是我的程序怎么會(huì)出現(xiàn)這種問(wèn)題:
else
   {
    XBYTE[Current_Address]=AddH;
    Current_Address++;
    M512CS=1;
    M512ADDH++;
    CS138=1;
    M512Latch=M512ADDH;
    CS138=0;
    _nop_();
    M512CS=0;
    _nop_();
    XBYTE[Current_Address]=AddL;//1 此時(shí)Current_Address為0x30000
    Current_Address++;
    M512CS=1;
   }
  }
  else   
  {
   XBYTE[Current_Address]=AddH;
   Current_Address++;
   XBYTE[Current_Address]=AddL;  //2
   Current_Address++;
   M512CS=1;

程序執(zhí)行過(guò)程中直接由1跳到了2
不知道為什么?  


7樓: >>參與討論
zgl7903
回復(fù)主題:[0x30000]=0x00;會(huì)出錯(cuò)么?
XBYTE支持到64K空間,超過(guò)的當(dāng)然是被截去了
如果訪問(wèn)大于64K的空間,keil推薦是分頁(yè),32K空間為一頁(yè),使用far修飾符,使用A15線區(qū)分XDATA和HDATA空間,詳細(xì)的看keil的幫助.

8樓: >>參與討論
computer00
也許編譯器認(rèn)為這兩段代碼一樣的,所以就優(yōu)化掉了
 

* - 本貼最后修改時(shí)間:2006-10-26 10:43:34 修改者:computer00

9樓: >>參與討論
zoupeng139
可是 我 得 程序 出錯(cuò) 得 原因是什么 呢 ?
?

10樓: >>參與討論
computer00
哪里錯(cuò)了啊?
 
11樓: >>參與討論
zoupeng139
錯(cuò)誤如下,執(zhí)行結(jié)果倒是對(duì)的,但過(guò)程不對(duì)勁
else
   {
    XBYTE[Current_Address]=AddH;
    Current_Address++;
    M512CS=1;
    M512ADDH++;
    CS138=1;
    M512Latch=M512ADDH;
    CS138=0;
    _nop_();
    M512CS=0;
    _nop_();
    XBYTE[Current_Address]=AddL;//1 此時(shí)Current_Address為0x30000
    Current_Address++;
    M512CS=1;
   }
  }
  else   
  {
   XBYTE[Current_Address]=AddH;
   Current_Address++;
   XBYTE[Current_Address]=AddL;  //2
   Current_Address++;
   M512CS=1;

程序執(zhí)行過(guò)程中直接由1處直接跳到了2處執(zhí)行
不知道為什么? 

12樓: >>參與討論
wnch
編譯器把相同的C代碼優(yōu)化了,只編譯成一組匯編代碼,
當(dāng)要執(zhí)行相同的C操作時(shí),在匯編里會(huì)直接跳轉(zhuǎn)到那組匯編代碼處,所以執(zhí)行的結(jié)果應(yīng)該是對(duì)的。而在C里面看時(shí),只會(huì)是相同操作C代碼的最后一組。所以看起來(lái)好像過(guò)程不對(duì)的感覺(jué)。調(diào)試時(shí)看一下匯編代碼就明白了。

13樓: >>參與討論
computer00
樓上正解.
else
   {
    XBYTE[Current_Address]=AddH;
    Current_Address++;
    M512CS=1;
    M512ADDH++;
    CS138=1;
    M512Latch=M512ADDH;
    CS138=0;
    _nop_();
    M512CS=0;
    _nop_();
    XBYTE[Current_Address]=AddL;//1 此時(shí)Current_Address為0x30000
    Current_Address++;
    M512CS=1;

   }
  }
  else   
  {
   XBYTE[Current_Address]=AddH;
   Current_Address++;
   XBYTE[Current_Address]=AddL;  //2
   Current_Address++;
   M512CS=1;


你看紅色代碼跟蘭色代碼不是完全一樣么?既然一樣,那運(yùn)行上面的跟運(yùn)行下面的有什么區(qū)別么?
既然沒(méi)啥區(qū)別,哪又何必編譯出兩段完全一樣的代碼,浪費(fèi)ROM?

并且偶還可以推測(cè)出,你這個(gè)else語(yǔ)句就到這里結(jié)束了,即下面就是一個(gè)}.

你自己跟著代碼走一遍,想想看這樣優(yōu)化后結(jié)果還對(duì)否.

* - 本貼最后修改時(shí)間:2006-10-28 8:39:17 修改者:computer00

14樓: >>參與討論
zoupeng139
大家誤會(huì)了,原來(lái)那個(gè)程序我只截取一部分,下面是全的
  if(((Current_Address&0xF0000)!=7)&&((0xFFFF-(Current_Address&0xFFFF))<2))   //未到存儲(chǔ)器極限或不夠存儲(chǔ)一次數(shù)據(jù)
  {
   if((Current_Address&0xFFFF)==0xFFFE)
   {
    XBYTE[Current_Address]=AddH;
    Current_Address++;
    XBYTE[Current_Address]=AddL;
    Current_Address++;
    M512CS=1;
    M512ADDH++;   //最高位地址加一
    CS138=1;
    M512Latch=M512ADDH;
    CS138=0;
    _nop_();
   }
   else
   {
    XBYTE[Current_Address]=AddH;
    Current_Address++;
    M512CS=1;
    M512ADDH++;
    CS138=1;
    M512Latch=M512ADDH;
    CS138=0;
    _nop_();
    M512CS=0;
    _nop_();
    XBYTE[Current_Address]=AddL;
    Current_Address++;
    M512CS=1;
   }
  }
  else   
  {
   XBYTE[Current_Address]=AddH;
   Current_Address++;
   XBYTE[Current_Address]=AddL;
   Current_Address++;
   M512CS=1;
  }
}
 

15樓: >>參與討論
zoupeng139
up
up

16樓: >>參與討論
computer00
暈暈暈。。。樓主還沒(méi)想明白??
    _nop_(); //假設(shè)程序運(yùn)行到這里了,本來(lái)應(yīng)該往下 運(yùn)行的,即要執(zhí)行11那一句,對(duì)吧?
              //11那句跟21那句是否完全一樣呢?我想除了注釋不一樣之外,其它的好象都一樣吧?
             //那既然是一模一樣的,不管是執(zhí)行11還是執(zhí)行12,結(jié)果都一樣吧?
             //同理,下面的12跟22,13跟23都是一樣的,并且最后的結(jié)果都是去執(zhí)行31。
             //按你的理解,應(yīng)該是執(zhí)行11→12→13→31才對(duì),但現(xiàn)在執(zhí)行的是
             //21→22→23→31,你比較一下,這兩個(gè)執(zhí)行過(guò)程,所執(zhí)行的代碼不是
              //完全相同么?所以編譯器就給你做了優(yōu)化,將前面那段11→12→13給刪掉了,
            //用了后面的21→22→23來(lái)代替!這樣就節(jié)省了空間,運(yùn)行結(jié)果又不會(huì)出錯(cuò)。
            //因此你在調(diào)試的時(shí)候,就看不到前面的代碼了(實(shí)際上它已經(jīng)不存在了,被編譯器給刪除了,
             //并且插入了一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到下面去了。)

//前面已經(jīng)說(shuō)過(guò)很多次了,請(qǐng)仔細(xì)比較11→12→13和21→22→23三條語(yǔ)句,它們是完全一樣的。

    XBYTE[Current_Address]=AddL;     //11
    Current_Address++;               //12
    M512CS=1;                        //13
   }
  }
  else   
  {
   XBYTE[Current_Address]=AddH;
   Current_Address++;
   XBYTE[Current_Address]=AddL;  //21
   Current_Address++;            //22
   M512CS=1;                     //23
  }
                              //31

17樓: >>參與討論
zoupeng139
恩 ,謝謝
我再好好理解一下
要是編譯優(yōu)化的 結(jié)果就成了
呵呵,我是怕程序有什么錯(cuò)誤

18樓: >>參與討論
jkljl

我用keil c51編譯C語(yǔ)言程序使用XBYTE命令怎么會(huì)出現(xiàn)未定義的錯(cuò)誤?

出現(xiàn) 'XBYTE'  :  undefined identifier 的錯(cuò)誤!

19樓: >>參與討論
好好看

0x30000

這里的‘3’只是類型編號(hào),從0到5好像都有固定的類型

3好像是byte,4代表code

你的0x30000實(shí)際上等于0x0000

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)KEIL高手釋疑?
關(guān)于雙DPTR的51單片機(jī)
怎么提高AD的精度?
請(qǐng)問(wèn)和at89S8252完全兼容的單片機(jī)是什么
問(wèn)個(gè)小問(wèn)題
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào)