音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | 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

復(fù)位后ram數(shù)據(jù)丟不丟失探討

作者:blueboyjf 欄目:單片機(jī)
復(fù)位后ram數(shù)據(jù)丟不丟失探討
有人說復(fù)位后不丟失,俺就寫個(gè)小程序測試一下:
void main(void)
{
     static unsigned CHAR data=0;
     sys_init();
     putstr("\rSys is running");
     data++;
     while(1)
     {
         WDR();       
             SWITCH(tmprecv)
             {
                 case 'a':putint(data);tmprecv=0;break;
                 case 'b':putstr("\rbbbb");tmprecv=0;break;
                 case 's':while(1);break;
                 case 'e':return;
                 default:break;
             }
      }
}
說明:tmprecv是串口中斷里接收的數(shù)據(jù),全局變量
程序運(yùn)行以后打印data是1,手動(dòng)外部復(fù)位以后還是1,串口輸入‘s’,看門狗復(fù)位動(dòng)作,打印data還是1。串口輸入‘e’,程序從main開始重新執(zhí)行,data還是1。
如果說ram數(shù)據(jù)沒丟失的話,程序重新運(yùn)行,變量地址改變了,對(duì)我們來說還是變了。是不是可以直接用指針訪問ram的絕對(duì)地址,這樣數(shù)據(jù)就可以找回來了?

2樓: >>參與討論
hotpower
+55aa
 
3樓: >>參與討論
51avr
注意啟動(dòng)代碼的存在!!!
將data定義為局部變量,不初始化,第一次顯示的是一隨機(jī)數(shù),以后每次應(yīng)該是有規(guī)律的。

說明,我沒有測試,只是從理論上分析的。

void main(void)
{
     unsigned CHAR data;    // 不要用靜態(tài)變量。
     sys_init();
     putstr("\rSys is running");
     data++;
     while(1)
     {
         WDR();       
             SWITCH(tmprecv)
             {
                 case 'a':putint(data);tmprecv=0;break;
                 case 'b':putstr("\rbbbb");tmprecv=0;break;
                 case 's':while(1);break;
                 case 'e':return;
                 default:break;
             }
      }
}


* - 本貼最后修改時(shí)間:2005-6-28 15:47:24 修改者:51avr

4樓: >>參與討論
blueboyjf
to 51avr
老兄,您說對(duì)了。我試驗(yàn)了一下,確實(shí)是這樣的:)
能否理論上解釋一下?
非靜態(tài)變量不賦初值我能理解,但是靜態(tài)變量賦初值為什么不可以?

* - 本貼最后修改時(shí)間:2005-6-28 17:26:50 修改者:blueboyjf

5樓: >>參與討論
lb0021
我這個(gè)問題在實(shí)際應(yīng)用中就是用“直接用指針訪問ram的絕對(duì)地址”
來解決,但是有點(diǎn)擔(dān)驚受怕的感覺,不過把“硬件堆棧的空間”設(shè)大,默認(rèn)是16級(jí),應(yīng)該會(huì)有部分空間空出來用來絕對(duì)尋址。(有待專家考究隱患)

關(guān)注本主題。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
CVAVR中有關(guān)ds18b20函數(shù)的使用問題
avr-g++編譯extern const int map的疑問
怎樣將跑飛的程序拉回來
請(qǐng)教:GCCAVR中PGM_P的疑問
問一下AVR Studio里怎么看外部SRAM的內(nèi)容?
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)