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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

配置:

&wdt{status ="okay";};

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

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

代碼核心亮點(diǎn)

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

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

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

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

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

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

#設(shè)置超時(shí)時(shí)間為300秒(5分鐘),開(kāi)啟喂狗功能,并后臺(tái)運(yùn)行

/etc/init.d/mywatchdog 300 1 &

指令參數(shù)拆解:

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

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

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

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

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

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

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

/etc/init.d/mywatchdog 10 0 &

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

將程序加入系統(tǒng)啟動(dòng)腳本(如rc.local),確保系統(tǒng)啟動(dòng)時(shí)自動(dòng)開(kāi)啟看門(mén)狗:

#rc.local中添加,系統(tǒng)啟動(dòng)后自動(dòng)以300秒超時(shí)、開(kāi)啟喂狗的方式運(yùn)行

/etc/init.d/mywatchdog 300 1 &

3.注意事項(xiàng):

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

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

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

#查看mywatchdog進(jìn)程

ps -ef | grep mywatchdog

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

kill [進(jìn)程ID]

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

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

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

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

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

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

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


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

    關(guān)注

    10

    文章

    610

    瀏覽量

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

    關(guān)注

    41

    文章

    3753

    瀏覽量

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

    關(guān)注

    117

    文章

    3846

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

    窗口看門(mén)狗喂狗時(shí)間

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

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

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

    看門(mén)狗喂狗時(shí)間及程序

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

    什么是stm32看門(mén)狗?獨(dú)立看門(mén)狗和窗口看門(mén)狗工作原理解析

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

    STM32看門(mén)狗配置(獨(dú)立看門(mén)狗IWDG和窗口看門(mén)狗WWDG)

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

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

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

    對(duì)于MCU看門(mén)狗IIWDG WWDG喂狗時(shí)間的配置參考

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

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

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

    STM32中的獨(dú)立看門(mén)狗和窗口看門(mén)狗

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

    詳解獨(dú)立看門(mén)狗實(shí)現(xiàn)原理

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

    STM32獨(dú)立看門(mén)狗詳解

    本文將介紹STM32的看門(mén)狗中的獨(dú)立看門(mén)狗,并通過(guò)實(shí)例來(lái)喂狗、體驗(yàn)喂狗與不喂狗的區(qū)別。
    的頭像 發(fā)表于 05-01 09:06 ?5731次閱讀
    STM32獨(dú)立<b class='flag-5'>看門(mén)狗</b><b class='flag-5'>詳解</b>

    MCU如何集成看門(mén)狗的功能

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

    STM32的看門(mén)狗原理和示例代碼

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

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

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