討論區快速選單
知識庫快速選單
網路投保旅行平安險 軟體開發過程中有哪些資安漏洞? 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
watchdog thread- 系統初始到執行狗的GAP怎麼辦?
更改我的閱讀文章字型大小
作者 : sirims(sirims)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/3/26 下午 10:14:25
我在FreeRTOS上做個watchdog thread
用意是希望萬一不幸有個hardfault, 系統可以自己reset

大概程序像這樣:
main()
{
     //setup hw and others...
    create_thread(watchdog_task);//create watchdog threa
}

watchdog_task()
{
     watchdog_Setup();//setup watchdog
     watchdof_Enable() //enable watchdog
     while(1)
     {
     //do other things or sleep
     kick_dog();
     }
}

不過這樣萬一hardfault 發生在程式開始main() --到watchdog_enable()之間,
我的狗還沒設好也還沒開始,自然也沒辦法自己reset.

請問有比較好的方式嗎??
作者 : ccl0504(手動程式產生器) 貼文超過200則
[ 貼文 450 | 人氣 211 | 評價 930 | 評價/貼文 2.07 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/3/29 下午 03:53:22

或是 Timer Interrupt routine

參考這篇看看
http://www.freertos.org/FreeRTOS_Support_Forum_Archive/May_2010/freertos_FreeRTOS_amp_watchdog_3709321.html
作者 : kennytsai(Kenny) C++卓越專家貼文超過500則
[ 貼文 720 | 人氣 2903 | 評價 2840 | 評價/貼文 3.94 | 送出評價 140 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/4/6 上午 01:21:18
其實Watchdog的重要核心是硬體(通常就是Timer),你列出來的程式碼只是輔助而已,簡單來說,如果你的硬體(MCU/SOC)並沒有WD的功能時,試問你怎麼實作?當然、你的問題很好,但我相信答案早就寫在規格書裡面了,而且每一家的晶片不會完全一樣,即使我們知道他們"應該"大同小異。底下是我根據經驗列出來的特點(綜合了我用過的各類晶片),供你參考。
1. 一個晶片的重置(Reset)通常分為3大類:POR(Power On Reset), Cold Reset, Warm Reset,WD通常歸類為最後一種。
2. MCU/SOC在重置後,其內部的控制暫存器通常會回歸預設值(Default Value),但有一些特殊的暫存器(通常非常少數的)仍會維持Reset前的狀態,而WD通常就是成員之一,此舉可以讓軟體知道系統是如何起來的(例如檢查到WD的狀態旗標可以提醒你、系統因為重大錯誤而重置了)。
3. 有部分系統的WD_ENABLE在設定後,即使重置、其控制旗標仍不會改變(沒有所謂的default value),這類系統如果沒有好好處理,可能就一直不斷的重置(當你WD時間設的很短時),如果以這個例子來看,板主提問的GAP是不存在的,反過來說,其實你"必須"在系統一起來的地方,就先將WD Disable(你看、哪裡擔心有GAP、這時煩惱的是WD可能跑的太快),等系統開始運作時,我們才啟動WD。
4. 如果接續上面的例子,板主可能舉手說:對阿、我說的就是這段:重置後、到 "系統開始運作" 前的這個區段,萬一有問題怎麼辦?首先、你得先能夠回答這段程式在哪裡,接下來,其實我想告訴你,這段程式通常不會有錯誤,但我不打算細談。
5. 我想再次回歸主題:WatchDog的運作,你必須查看硬體的SPEC,當你明白相關幾個暫存器的運作後,你可能得再花些時間明白Timer的設定,然後,你應該就能自己回答自己的提問。因為這裡是embedded的論壇,所以我假設你是相關的從業人員,雖然Watchdog的理論很簡單,但在嵌入式領域裡,你不能再以黑箱的方式來看待它,換句換說,如果WD的控制對你而言、只是一些個函式呼叫,那你仍只是在嵌入式的門外罷了。
Good Luck!
作者 : sirims(sirims)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/4/14 上午 09:40:02

>其實Watchdog的重要核心是硬體(通常就是Timer),你列出來的程式碼只是輔助而已,簡單來說,如果你的硬體(MCU/SOC)並沒有WD的功能時,試問你怎麼實作?當然、你的問題很好,但我相信答案早就寫在規格書裡面了,而且每一家的晶片不會完全一樣,即使我們知道他們'應該'大同小異。底下是我根據經驗列出來的特點(綜合了我用過的各類晶片),供你參考。

>4. 如果接續上面的例子,板主可能舉手說:對阿、我說的就是這段:重置後、到 '系統開始運作' 前的這個區段,萬一有問題怎麼辦?首先、你得先能夠回答這段程式在哪裡,接下來,其實我想告訴你,這段程式通常不會有錯誤,但我不打算細談。

>

謝謝你的指導! 我的確剛剛接觸嵌入式的設計所以這部分不太懂
我其實想到COVER到的狀況就是4的狀況. 在想是不是有些已有的特殊的DESIGN可以好好的COVER住從程式RESET到WDG ENABLE 間的部分.
謝謝你的詳細回答!
 板主 : yuan
 > 嵌入式系統(Embedded System) - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 嵌入式系統(Embedded System) - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
嵌入式系統(Embedded System)
1 kting 770 
2 Lingb 400 
3 sazabi 400 
4 Huah 390 
5 hawkeye 380 
6 H 360 
7 yuan 350 
8 Kenny 310 
9 ozzy 290 
10 富伯 280 
嵌入式系統(Embedded System)
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
9.399414E-02