91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解RK平臺看門狗程序:用mywatchdog.c實現(xiàn)靈活的超時控制與喂狗管理

jf_44130326 ? 來源:Linux1024 ? 2026-02-02 17:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式系統(tǒng)穩(wěn)定性保障中,看門狗程序的靈活性和易用性直接影響開發(fā)效率。今天我們聚焦一份實用的看門狗程序mywatchdog.c,看看它如何通過簡單指令實現(xiàn)超時時間設(shè)置與喂狗開關(guān)控制,以及在實際場景中如何發(fā)揮作用。

一、程序核心功能:從代碼看mywatchdog.c的設(shè)計

先來看mywatchdog.c的核心邏輯,它的設(shè)計目標(biāo)很明確:通過命令行參數(shù)快速配置看門狗超時時間,并控制喂狗行為,代碼如下:

配置:

&wdt{status ="okay";};

測試指令:這種方式不靈活# 寫入任意內(nèi)容(大寫字母‘V’除外),開啟看門狗,每44 秒內(nèi)需要寫入一次(喂狗)echoA > /dev/watchdog# 開啟看門狗,并且內(nèi)核會每隔 22 秒自動喂一次狗echoV > /dev/watchdog

#include#include#include#include#include#include#include#include#include// 定義看門狗超時控制相關(guān)IOCTL命令#defineWDIOC_SETTIMEOUT    _IOWR(WATCHDOG_IOCTL_BASE, 6, int)#defineWDIOC_GETTIMEOUT    _IOR(WATCHDOG_IOCTL_BASE, 7, int)intmain(intargc,char*argv[]){ inttimeout; intfd; intret =0; // 打開看門狗設(shè)備節(jié)點,打開即啟動看門狗(硬件特性)  fd =open("/dev/watchdog", O_WRONLY); if(fd ==-1) {   perror("watchdog");   exit(EXIT_FAILURE);  }  // 從命令行參數(shù)獲取超時時間(第一個參數(shù))  timeout =atoi(argv[1]); printf("輸入的超時參數(shù):%d,實際設(shè)置值:%drn",atoi(argv[1]), timeout); // 設(shè)置看門狗超時時間  ret =ioctl(fd, WDIOC_SETTIMEOUT, &timeout); if(ret 0) {   printf("設(shè)置超時時間失敗n");   gotofail;  } // 驗證并獲取實際生效的超時時間(部分硬件可能限制最小/最大超時值)  ret =ioctl(fd, WDIOC_GETTIMEOUT, &timeout); if(ret 0) {   printf("獲取超時時間失敗n");   gotofail;  }else{   printf("當(dāng)前看門狗超時時間:%d秒n", timeout);  } // 循環(huán)喂狗(根據(jù)第二個參數(shù)控制是否實際執(zhí)行喂狗操作) while(1) {   // 注意:當(dāng)前代碼中喂狗操作被注釋,實際使用時需根據(jù)需求開啟   // 若第二個參數(shù)為1則執(zhí)行喂狗,0則不喂狗(觸發(fā)復(fù)位)   if(argc >=3&&atoi(argv[2]) ==1) {      ret =write(fd,"?",1);// 喂狗核心操作:向設(shè)備寫入1字節(jié)數(shù)據(jù)     if(ret !=1) {        ret =-1;       break;      }    }   printf("喂狗狀態(tài):%sn", (argc>=3&&atoi(argv[2])==1)?"已喂狗":"未喂狗");   sleep(timeout -10);// 間隔小于超時時間,預(yù)留緩沖  }fail: close(fd); returnret;}

代碼核心亮點

1.支持通過命令行參數(shù)動態(tài)設(shè)置超時時間(argv[1]);

2.通過第二個參數(shù)(argv[2])控制喂狗開關(guān)(1 =開啟喂狗,0 =關(guān)閉喂狗);

3.包含超時時間驗證步驟,避免硬件不支持的超時值導(dǎo)致配置失效;

4.循環(huán)喂狗邏輯中預(yù)留10秒緩沖,降低因系統(tǒng)延遲導(dǎo)致的誤復(fù)位風(fēng)險。

二、關(guān)鍵指令解析:/etc/init.d/mywatchdog 300 1 &怎么用?

將編譯后的mywatchdog程序放在/etc/init.d/目錄下,即可通過一條指令完成看門狗配置,這條指令的含義是:

#設(shè)置超時時間為300秒(5分鐘),開啟喂狗功能,并后臺運行

/etc/init.d/mywatchdog 300 1 &

指令參數(shù)拆解:

?300:第一個參數(shù),代表設(shè)置看門狗超時時間為300秒(若硬件支持,實際生效時間會通過WDIOC_GETTIMEOUT返回);

?1:第二個參數(shù),控制喂狗開關(guān)(1=開啟喂狗,程序會每隔290秒執(zhí)行一次喂狗;0=關(guān)閉喂狗,系統(tǒng)會在300秒后觸發(fā)復(fù)位);

?&:將程序放入后臺運行,不阻塞當(dāng)前終端,適合作為系統(tǒng)服務(wù)啟動。

三、實際場景用法:從調(diào)試到部署

1.調(diào)試階段:驗證看門狗復(fù)位功能

若要測試看門狗是否正常工作,可關(guān)閉喂狗功能:

#設(shè)置超時10秒,關(guān)閉喂狗,觀察系統(tǒng)是否在10秒后復(fù)位

/etc/init.d/mywatchdog 10 0 &

2.部署階段:作為系統(tǒng)服務(wù)常駐

將程序加入系統(tǒng)啟動腳本(如rc.local),確保系統(tǒng)啟動時自動開啟看門狗:

#rc.local中添加,系統(tǒng)啟動后自動以300秒超時、開啟喂狗的方式運行

/etc/init.d/mywatchdog 300 1 &

3.注意事項:

?代碼中write(fd, "?", 1)是喂狗核心操作,實際使用時需取消注釋(當(dāng)前代碼為注釋狀態(tài),僅作演示);

?超時時間設(shè)置需結(jié)合系統(tǒng)最大響應(yīng)時間(如系統(tǒng)完成一次復(fù)雜任務(wù)最長需200秒,則超時時間建議設(shè)為250-300秒);

?后臺運行時可通過ps命令查看進(jìn)程狀態(tài),通過kill命令終止:

#查看mywatchdog進(jìn)程

ps -ef | grep mywatchdog

#終止進(jìn)程(需先關(guān)閉看門狗,否則進(jìn)程退出后可能觸發(fā)復(fù)位)

kill [進(jìn)程ID]

四、為什么這樣設(shè)計?看門狗程序的靈活性很重要

相較于固定配置的看門狗程序,mywatchdog.c的優(yōu)勢在于:

?參數(shù)化控制:無需修改代碼即可調(diào)整超時時間和喂狗狀態(tài),適合不同場景(如調(diào)試、生產(chǎn)環(huán)境);

?兼容性強:基于Linux標(biāo)準(zhǔn)/dev/watchdog接口,不僅適用于RK平臺,也可移植到其他支持標(biāo)準(zhǔn)看門狗驅(qū)動的嵌入式系統(tǒng);

?易于集成:放入/etc/init.d/目錄后,可通過系統(tǒng)服務(wù)管理工具(如systemctl)統(tǒng)一管理,符合嵌入式系統(tǒng)服務(wù)規(guī)范。

總結(jié):讓看門狗管理更簡單

mywatchdog.c通過簡潔的代碼實現(xiàn)了看門狗的核心功能,而/etc/init.d/mywatchdog 300 1 &這條指令則將配置門檻降到了最低。在實際開發(fā)中,只需根據(jù)系統(tǒng)需求調(diào)整超時時間和喂狗開關(guān),就能讓看門狗成為系統(tǒng)穩(wěn)定運行的可靠后衛(wèi)。記?。汉玫目撮T狗程序,不僅要能守得住,更要用得活。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 看門狗
    +關(guān)注

    關(guān)注

    10

    文章

    610

    瀏覽量

    72976
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3749

    瀏覽量

    133667
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3846

    瀏覽量

    85258
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    看門狗多任務(wù)系統(tǒng)及喂狗方法詳解

    看門狗分硬件看門狗和 軟件看門狗。硬件看門狗是利用一個定時器電路,其定時輸出連接到電路的復(fù)位端,程序在一定時間范圍內(nèi)對定時器清零(俗稱“
    的頭像 發(fā)表于 07-05 09:21 ?2w次閱讀
    <b class='flag-5'>看門狗</b>多任務(wù)系統(tǒng)及<b class='flag-5'>喂狗</b>方法<b class='flag-5'>詳解</b>

    窗口看門狗喂狗時間

    0-x內(nèi),x由相關(guān)寄存器決定(X由預(yù)分頻器和重裝載值決定,最大值為0xFFF)。喂狗的時間不能過晚為什么需要看門狗獨立看門狗:在0-重載值之間任意時間都可以喂狗如果
    發(fā)表于 07-30 06:31

    窗口看門狗的定義及窗口看門狗和獨立看門狗區(qū)別是什么

    窗口看門狗一、窗口看門狗的定義及窗口看門狗和獨立看門狗區(qū)別是什么? 總結(jié)一下就是獨立看門狗只有下限,在下限前
    發(fā)表于 08-02 06:56

    看門狗喂狗時間及程序

    什么是看門狗定時器 看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數(shù)器,一般給看門狗一個數(shù)字,程序開始運行后
    發(fā)表于 10-16 09:19 ?1.8w次閱讀

    什么是stm32看門狗?獨立看門狗和窗口看門狗工作原理解析

    stm32有兩個看門狗,獨立看門狗和窗口看門狗,其實兩者的功能是類似的,只是喂狗的限制時間不同。 獨立看門狗
    的頭像 發(fā)表于 11-06 11:48 ?2.8w次閱讀
    什么是stm32<b class='flag-5'>看門狗</b>?獨立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>工作原理解析

    STM32看門狗配置(獨立看門狗IWDG和窗口看門狗WWDG)

    stm32自帶兩個看門狗模塊,獨立看門狗IWDG和窗口看門狗WWDG。看門狗主要作用是可用來檢測和解決由軟件錯誤引起的故障;當(dāng)計數(shù)器達(dá)到給定的超時
    發(fā)表于 11-09 17:17 ?8846次閱讀
    STM32<b class='flag-5'>看門狗</b>配置(獨立<b class='flag-5'>看門狗</b>IWDG和窗口<b class='flag-5'>看門狗</b>WWDG)

    軟件看門狗和硬件看門狗的作用和區(qū)別

    ?! ≤浖?b class='flag-5'>看門狗技術(shù)的原理和這差不多,只不過是軟件的方法實現(xiàn),我們還是以51系列來講,我們知道在51單片機中有兩個定時器,我們就可以這兩個定時器來對主
    的頭像 發(fā)表于 10-15 17:29 ?4.1w次閱讀

    對于MCU看門狗IIWDG WWDG喂狗時間的配置參考

    對于MCU看門狗IIWDG WWDG喂狗時間的配置參考可以參考MCU的datasheet;在每個MCU的datasheet中都有這樣的表格:6.3.25 Timer
    發(fā)表于 10-28 12:06 ?13次下載
    對于MCU<b class='flag-5'>看門狗</b>IIWDG WWDG<b class='flag-5'>喂狗</b>時間的配置參考

    窗口看門狗是什么?與獨立看門狗有啥區(qū)別?

    STM32有兩個看門狗,獨立看門狗和窗口看門狗。其實兩者的功能是類似的,只是喂狗的限制時間不同。
    發(fā)表于 02-09 10:28 ?9次下載
    窗口<b class='flag-5'>看門狗</b>是什么?與獨立<b class='flag-5'>看門狗</b>有啥區(qū)別?

    STM32中的獨立看門狗和窗口看門狗

    和窗口看門狗。 獨立看門狗:使用的是外部時鐘,即使主頻不工作了,看門狗也能正常工作。只要在到達(dá)喂狗時間的上限前喂狗即表示
    的頭像 發(fā)表于 12-22 16:58 ?3199次閱讀

    詳解獨立看門狗實現(xiàn)原理

    這里以大家熟悉的STM32為例給大家講解一下獨立看門狗的配置以及工作過程。STM32F10xxx內(nèi)置兩個看門狗:獨立看門狗和窗口看門狗,提供了更高的安全性、時間的精確性和使用的
    發(fā)表于 12-22 17:01 ?4196次閱讀

    STM32獨立看門狗詳解

    本文將介紹STM32的看門狗中的獨立看門狗,并通過實例來喂狗、體驗喂狗與不喂狗的區(qū)別。
    的頭像 發(fā)表于 05-01 09:06 ?5711次閱讀
    STM32獨立<b class='flag-5'>看門狗</b><b class='flag-5'>詳解</b>

    MCU如何集成看門狗的功能

    和窗口看門狗。 獨立看門狗 :使用的是外部時鐘,即使主頻不工作了,看門狗也能正常工作。只要在到達(dá)喂狗時間的上限前喂狗即表示
    的頭像 發(fā)表于 06-22 09:09 ?3041次閱讀
    MCU如何集成<b class='flag-5'>看門狗</b>的功能

    STM32的看門狗原理和示例代碼

    ):IWDG是一個定時器,其計數(shù)器在啟用后開始遞增。在程序中,你需要定期喂狗(通過向IWDG的寄存器寫入特定的值),以防止看門狗超時。否則,如果超過了預(yù)定的時間,系統(tǒng)
    的頭像 發(fā)表于 12-01 08:00 ?3710次閱讀
    STM32的<b class='flag-5'>看門狗</b>原理和示例代碼

    喂狗”的藝術(shù):看門狗不叫,才是系統(tǒng)好

    程序的?,F(xiàn)實里的會追飛盤,PLC里的看門狗追的是跑飛的程序。 本質(zhì)上是一個計時器,用于監(jiān)控程序的運行狀態(tài)。主
    的頭像 發(fā)表于 11-25 10:50 ?310次閱讀
    “<b class='flag-5'>喂狗</b>”的藝術(shù):<b class='flag-5'>看門狗</b>不叫,才是系統(tǒng)好