新聞中心

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

        C8051Fxxx程序丟失問題及預防措施分析

        作者: 時間:2012-07-29 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/171115.htm

        ③ 將Flash寫/擦除指針指向data或idata區。
          ④ 減少將PSWE置1的指令操作。理想的情況是只有兩個操作將PSWE置1,即寫1個Flash字節和擦除1個Flash字節。
          ⑤ 在Flash寫/擦除函數中,使能VDD監視并設置復位源。使能和設置操作必須在實際的寫操作發生之前,置PSWE=1之后完成。
          ⑥ 代碼中所有的對RSTSRC的寫操作均用直接賦值方式完成(如RSTSRC = 0x02),不能用讀/寫指令(如ORL或ANL)來完成。例如,代碼“RSTSRC |= 0x02”是非法的。
          ⑦ 對于能用PORSF位來設置VDD為復位源的器件,保證在寫RSTSRC時置PORSF=1,即先使能VDD為復位源,再使能其他復位源的操作,如時鐘監測(missing clock detector)、比較單元和軟件復位。

        4 一個實際應用方案

          在有的應用場合,由于需要較快的執行速度,不能使用單片機的內部時鐘作系統時鐘源,所以使用外部晶振來提供時鐘。在這種情況下,首先要在硬件上確保系統工作參數正常。

          在軟件上,由于最常見的Flash原因是,所以可以在代碼中用多種方法來預防Flash數據。首先,在初始化單片機時,使能VDD檢測,并設置VDD和時鐘丟失為復位源。如果中有寫/擦除Flash的代碼,則在寫/擦除操作前切換系統時鐘,將系統時鐘切到內部時鐘或對外部時鐘2分頻;寫/擦除操作完成之后,再恢復系統時鐘,通過增加Flash修改操作時的時間開銷來實現系統的穩定[2]。以下以C8051F126為例,給出了系統時鐘切換的清單:

          void SYSCLKAdjust(unsigned char select) {
            EA_Save=EA;
            SFRPAGE=0x0f;
            switch(select) {
              case 0x01:
                OSCICN_Save = OSCICN;
                CLKSEL_Save = CLKSEL;
                OSCICN = 0xc3;//內部時鐘,不分頻
                CLKSEL = 0x00;
                break;
              case 0x02:
                OSCXCN_Save = OSCXCN;
                OSCXCN |= 0x70;//外部時鐘2分頻
                break;
              default://選擇內部時鐘
                OSCICN_Save = OSCICN;
                CLKSEL_Save = CLKSEL;
                OSCICN = 0xc3;
                CLKSEL = 0x00;
                break;
            }
          }

          要恢復系統時鐘到Flash操作前的狀態,只需將CLKSEL_Save、OSCICN_Save、OSCXCN_Save重新寫回到CLKSEL、OSCIN、OSCXCN。

          C8051F126的系統時鐘(SYSCLK)可以在內部時鐘和外部時鐘之間自由切換,切換時的操作要求如下:

          ① 在切換過程中,先設置所選時鐘的屬性,再用CLKSEL將其設置為SYSCLK。
          ② 在還原過程中,先用CLKSEL選擇時鐘源,再設置其屬性。
          ③ 如果切換過程中關閉外部晶振,要再恢復外部時鐘,啟動后至少要等1 ms,再去讀XTLVLD(OSCXCN.7)來判斷晶振時鐘是否穩定。否則,可能讀到錯誤值。
          ④ 在外部時鐘穩定運行后,再對其分頻,不必插入等待周期。
          ⑤ 在切換過程中,可以保持外部時鐘繼續運行,這樣在還原過程中就不必等待外部時鐘穩定,從而節省時間開銷,代價是系統功耗有所增加。

        5 總結

          程序丟失會帶來各種不良的后果,最嚴重時致使程序無法正常運行,從而造成整個系統崩潰,給產品的應用帶來麻煩。在系統的硬件設計和代碼編寫過程中,通過對以上的注意,可以有效地防止程序丟失的出現。另外,由于系統時鐘的切換只發生在Flash的寫/擦除過程中,操作結束后又恢復成原來的設置,因而對系統運行速度的影響很小,從而保證了系統其他功能的實現。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 蓝田县| 望谟县| 兰溪市| 广东省| 长阳| 通辽市| 东兴市| 江门市| 水城县| 南木林县| 绍兴县| 青浦区| 昌平区| 论坛| 靖州| 天峨县| 祥云县| 左贡县| 陆河县| 遂昌县| 阿拉尔市| 星子县| 澎湖县| 五河县| 区。| 苍南县| 北辰区| 禹州市| 伊宁县| 信阳市| 乌兰浩特市| 昌平区| 宁波市| 甘德县| 藁城市| 海城市| 交城县| 旌德县| 陆丰市| 峨眉山市| 青冈县|