日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

配置:

&wdt{status ="okay";};

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

#include#include#include#include#include#include#include#include#include// 定義看門狗超時(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; // 打開看門狗設(shè)備節(jié)點(diǎn),打開即啟動(dòng)看門狗(硬件特性)  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è)置看門狗超時(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)前看門狗超時(shí)時(shí)間:%d秒n", timeout);  } // 循環(huán)喂狗(根據(jù)第二個(gè)參數(shù)控制是否實(shí)際執(zhí)行喂狗操作) while(1) {   // 注意:當(dāng)前代碼中喂狗操作被注釋,實(shí)際使用時(shí)需根據(jù)需求開啟   // 若第二個(gè)參數(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);// 間隔小于超時(shí)時(shí)間,預(yù)留緩沖  }fail: close(fd); returnret;}

代碼核心亮點(diǎn)

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

2.通過第二個(gè)參數(shù)(argv[2])控制喂狗開關(guān)(1 =開啟喂狗,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/目錄下,即可通過一條指令完成看門狗配置,這條指令的含義是:

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

/etc/init.d/mywatchdog 300 1 &

指令參數(shù)拆解:

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

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

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

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

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

若要測試看門狗是否正常工作,可關(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)開啟看門狗:

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

/etc/init.d/mywatchdog 300 1 &

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

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

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

?后臺運(yùn)行時(shí)可通過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è)計(jì)?看門狗程序的靈活性很重要

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

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

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

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

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

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


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

    關(guān)注

    10

    文章

    611

    瀏覽量

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

    關(guān)注

    41

    文章

    3831

    瀏覽量

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

    關(guān)注

    117

    文章

    3849

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    對于MCU看門狗IIWDG WWDG喂狗時(shí)間的配置參考可以參考MCU的datasheet;在每個(gè)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>時(shí)間的配置參考

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

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

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

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

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

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

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

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

    MCU如何集成看門狗的功能

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

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

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

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

    程序的?,F(xiàn)實(shí)里的會(huì)追飛盤,PLC里的看門狗追的是跑飛的程序。 本質(zhì)上是一個(gè)計(jì)時(shí)器,用于監(jiān)控程序的運(yùn)行狀態(tài)。主
    的頭像 發(fā)表于 11-25 10:50 ?453次閱讀
    “<b class='flag-5'>喂狗</b>”的藝術(shù):<b class='flag-5'>看門狗</b>不叫,才是系統(tǒng)好
    施甸县| 陵川县| 九江县| 阿克苏市| 拉孜县| 黄龙县| 和林格尔县| 醴陵市| 盐城市| 吉林市| 淮阳县| 辉县市| 靖州| 台安县| 湟源县| 稷山县| 华安县| 安新县| 临澧县| 阳西县| 怀化市| 崇左市| 保靖县| 开封县| 怀化市| 平湖市| 柞水县| 哈巴河县| 吴忠市| 平果县| 锡林郭勒盟| 长兴县| 郓城县| 唐海县| 双辽市| 灯塔市| 门头沟区| 财经| 上思县| 苏尼特右旗| 湘乡市|