<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > C8051Fxxx程序丟失問(wèn)題及預防措施分析

C8051Fxxx程序丟失問(wèn)題及預防措施分析

作者: 時(shí)間:2012-07-29 來(lái)源:網(wǎng)絡(luò ) 收藏

1 單片機簡(jiǎn)單介紹和Flash結構

本文引用地址:http://dyxdggzs.com/article/171115.htm

  系列器件是Silicon Labs推出的一個(gè)高速單片機系列。這款單片機是完全集成的混合信號片上系統型MCU 芯片,具有高速、流水線(xiàn)結構的8051 兼容的CIP51內核;70%的指令的執行時(shí)間為1個(gè)或2個(gè)系統時(shí)鐘周期;片上有豐富的片內外設,根據型號的不同,包括ADC、DAC、UART、捕捉/比較模塊的可編程計數器/定時(shí)器陣列、SPI、SMBus等。

  單片機有大容量的Flash存儲器,用于代碼和非易失性數據存儲,可在系統編程。Flash的結構是以扇區為單位組織的(128 KB系列以1 024字節為1個(gè)扇區,64 KB系列以512字節為1個(gè)扇區)。非易失性Flash可以用來(lái)存儲系統的參數,如軟件版本、生產(chǎn)日期等。Flash可以使用編程器擦寫(xiě),也可以在中使用MOVX指令來(lái)修改,從而使Flash 存儲器具有在系統重新編程能力,允許現場(chǎng)更新8051 固件。Flash的寫(xiě)和擦除操作由硬件自動(dòng)定時(shí),以保證操作正確通過(guò)。C8051Fxxx的Flash保存下載的程序,在系統上電后,單片機從Flash讀出代碼數據到RAM,之后程序開(kāi)始運行。

2 程序的出現和原因

  在一些實(shí)際應用中,系統重新上電后會(huì )出現程序不能正常運行的,常表現為“程序”。通常是由于程序代碼被損壞或被修改造成的。

  造成程序的原因很多,可以歸結到一個(gè)基本原因,即對Flash的訪(fǎng)問(wèn)失敗而造成Flash保存的代碼出現錯誤。對于所有包含有Flash寫(xiě)/擦除子程序的系統,當CPU工作在規定的VDD、溫度、系統時(shí)鐘頻率范圍之外時(shí),對Flash進(jìn)行寫(xiě)/擦除操作,都有可能出現Flash數據錯誤的現象。

2.1 Flash數據錯誤的硬件原因

  C8051Fxxx單片機的Flash操作由硬件控制,所以硬件上的不穩定可能造成Flash操作錯誤。硬件原因主要是能影響CPU正常運行的因素,以及能影響Flash操作環(huán)境的因素。這些因素包括操作電壓、溫度以及外部干擾脈沖等,具體如下:

 ?、?能影響CPU運行可靠性的參數有系統時(shí)鐘源。如果系統時(shí)鐘由外部晶振提供,外部的電磁干擾引起尖脈沖,并耦合到系統時(shí)鐘上,則會(huì )導致不可預知的操作。
 ?、?系統在單片機的工作電壓沒(méi)有穩定(VDD上升時(shí)間低于規定的1 ms)時(shí)就已經(jīng)完成復位,由于系統復位時(shí)需要從Flash讀出代碼數據,Flash電壓不穩定會(huì )出現不可預測的錯誤。
 ?、?在對Flash的操作過(guò)程中,如果溫度、電壓不穩定,也可能造成Flash數據錯誤。

2.2 Flash數據錯誤的軟件原因

  代碼設計的缺陷是程序丟失的主要原因,因為單片機的Flash是由硬件來(lái)控制的,不能由軟件來(lái)控制操作的細節,所以程序的不完善可能造成Flash的訪(fǎng)問(wèn)出錯,從而使Flash數據出現錯誤。 這些操作包括: 在PSWE位(PSCTL.0)置1時(shí)CPU執行中斷服務(wù)程序中的MOVX寫(xiě)操作,該中斷服務(wù)程序要使用xdata 或pdata 的易失性存儲區單元,這樣可能導致向xdata 或pdata存儲區寫(xiě)的數據寫(xiě)到Flash中了,從而出現問(wèn)題。另外,如果使用外部晶振作系統時(shí)鐘,在時(shí)鐘沒(méi)有穩定時(shí)就對Flash進(jìn)行寫(xiě)操作,也可能造成程序丟失。

3 程序丟失問(wèn)題的解決方法

  針對以上可能的原因,可以從軟硬件兩個(gè)方面來(lái)解決程序丟失問(wèn)題。在硬件方面,主要是給系統提供穩定的工作環(huán)境,并避免外部干擾對CPU運行環(huán)境的影響;在軟件方面,主要是規范對Flash的操作。

3.1 從硬件方面預防程序丟失

  注意,以下的方法不是對所有的器件都適用,要根據具體的硬件情況選擇相應的方法:

 ?、?在RST引腳安裝VDD監測電路,并將VDD監視設置為一個(gè)復位源(置RSTSRC.1為1)。這樣如果系統電壓不穩定,系統將自動(dòng)復位,從而避免在電壓不穩時(shí)訪(fǎng)問(wèn)Flash。
 ?、?對外部晶振時(shí)鐘2分頻,更好的方法是使用內部振蕩器,這樣能提高系統時(shí)鐘的抗干擾能力。
 ?、?如果使用外部晶振提供系統時(shí)鐘,信號線(xiàn)應盡量靠近單片機的輸入端,同時(shí)晶振外殼接地。
 ?、?對于使用外部晶振作時(shí)鐘源的系統,應盡量增強晶振的驅動(dòng)能力,這樣也能在一定程度上預防程序丟失。

3.2 從軟件方面預防程序丟失

  程序丟失的主要原因是程序設計的缺陷,所以合理的程序代碼設計能極大地預防該問(wèn)題的出現。在代碼中可以用多種方法來(lái)預防Flash數據丟失:

 ?、?在PSWE=1下禁止中斷,使得程序中的MOVX寫(xiě)指令是對Flash而不是對XRAM。
 ?、?在PSWE=1下盡可能少地訪(fǎng)問(wèn)變量。在PSWE=0下執行地址譯碼操作,并用間接尋址方式執行MOVX寫(xiě)操作。例如,向Flash寫(xiě)多個(gè)字節,間接尋址和寫(xiě)PSWE過(guò)程如下:

  unsigned char xdata * idata pwrite;//使用idata指針指向Flash
  unsigned char *source;
  unsigned char mydata;
  for (addr = 0; addr 100; addr++) {
    //PSWE =0時(shí)獲取要寫(xiě)入的數據
    mydata = *source++;
    //PSWE =0時(shí)修改寫(xiě)入數據的目標地址
    pwrite = (unsigned char xdata *) addr;
    PSCTL = 0x01;//PSWE=1
    //賦值方式寫(xiě)入數據,此時(shí)不執行目標地址的修改操作
    *pwrite = mydata;
    PSCTL = 0x00;//PSWE=0
  }

  以上代碼中,當PSWE = 1時(shí)只執行寫(xiě)Flash操作(*pwrite = mydata);其他操作,如修改addr的值、獲取源數據和目的地址,都是在PSWE = 0時(shí)執行的。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>