會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





有關dsPIC33fj64mc802的watchdog timer溢位
資深會員
註冊日期:
2004/07/12 13:55
所屬群組:
註冊會員
文章: 250
等級: 14; EXP: 78
HP : 0 / 344
MP : 83 / 13457
離線
有問題請教,dsPIC33fj64mc802晶片,若watchdog timer reset後,在RAM中的變數是會被重置為0,或任意亂數,或保持重置前的值?
個人在系統中若想要知道重置前(watchdog reset)的變數值,有沒方法保留下來?於重置後取出使用.

7月21日 19:54:21
轉換PDF檔 列印


Re: 有關dsPIC33fj64mc802的watchdog timer溢位
資深會員
註冊日期:
2009/04/07 13:30
所屬群組:
註冊會員
文章: 159
等級: 11; EXP: 66
HP : 0 / 266
MP : 53 / 6721
離線
實際的構造上,
當 VDD 並未低落於 RAM 的保持電壓以下,
而只有發生 reset 情形時,
(包括 WDT, MCLR...)
使用者區域的 RAM 內容值是不被清除的.
只有 SFR 標註受影響的部分才有 reset 的動作.

但是編譯工具程式為 XC16 時,
受到了工具程式會加入啟動處理程式區塊的影響,
全域變數會重新載入預設值,
全域變數未有預設值的則會被清除為零.
這是目前 XC16 的實際狀況.

解決變數值重新載入預設值的想法就是:
全域變數以外的區域,
不會有受 啟動處理程式區塊 的影響.

又或者考慮 內部EEPROM / 外部EEPROM 先代為儲存,
再次啟動後重新讀回的方式.

以下為一個以結構指標直接指向堆疊區尾端,
(堆疊區尾端一般為 XC16 程式,
最為不受其他動作變更影響的區域)
(如果一定要確保不受任何影響, 請自行去修改設定檔)


typedef struct
{
                 
unsigned int   holding_check1;
                 
unsigned int   holding_check2;
                 
unsigned int   holding_check3;
                 
unsigned int   var1;
                 
unsigned int   var2;
                 
unsigned int   var3;
                 
unsigned int   var4;
                 
unsigned int   var5;
               }
Holding_Var;
Holding_Var    *Holding_area;


#define   Holding_check1   Holding_area->holding_check1
#define   Holding_check2   Holding_area->holding_check2
#define   Holding_check3   Holding_area->holding_check3
#define   WDT_over_cnt     Holding_area->var1

int main(coid)
{
  
ClrWdt();
  
IO_SETUP();
  
UART1_SETUP(UART_9600, UART_8_N_1);

   
/*   Set Holding_area pointer to the Stack endding   */
   
*(unsigned int *)&Holding_area = SPLIM - ((sizeof(Holding_Var)+1) & 0xFFFE);
   
/*   Initial at the power ON    */
   
if(Holding_check1 != 0xA123 || Holding_check2 != 0xB456 || Holding_check3 != 0xC789)
     {
       
Holding_check1 = 0xA123;
       
Holding_check2 = 0xB456;
       
Holding_check3 = 0xC789;
       
WDT_over_cnt = 0;
     }

   
WDT_over_cnt++;

   
ClrWdt();
   
U1TXREG = WDT_over_cnt;
   while(
1);

  return
0;
}

7月22日 23:47:01
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2017 Summer Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project