女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

時區(qū)陷阱!RT-Thread鬧鐘失效不響應(yīng)?

RT-Thread官方賬號 ? 2025-06-18 12:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言

RT-Thread 的 alarm 是系統(tǒng)提供的鬧鐘設(shè)備接口,提供了一系列用于管理定時事件的 API。然而,在實(shí)際使用過程中,遇到了一些與時間處理相關(guān)的問題。本文將圍繞這些問題展開分析,并提出對應(yīng)的解決方案。

122c8104-4bf9-11f0-986f-92fbcf53809c.png

二、問題點(diǎn)

在使用先楫平臺的 drv_rtc 驅(qū)動時,發(fā)現(xiàn)兩個典型問題:

使用 local_time_r 設(shè)置鬧鐘時間時無法觸發(fā)回調(diào)函數(shù)

使用 gmtime_r 設(shè)置后雖然能觸發(fā)回調(diào),但通過 list_alarm 命令打印出的鬧鐘時間顯示不正確。

例如:設(shè)置為 1719 的本地時間,實(shí)際輸出卻為 919,存在 8 小時的時間差。

12363eb0-4bf9-11f0-986f-92fbcf53809c.png

這不單單在先楫平臺有所體現(xiàn),在其他平臺比如STM32等都有類似現(xiàn)象。

三、原因分析

在解析原因之前,需要了解下rtthread對于ctime的實(shí)現(xiàn)。

(一)ctime相關(guān)接口的區(qū)別

在rtthread的rtc和alarm驅(qū)動中,需要調(diào)用ctime的各類時間函數(shù),其中最主要的是時間接口區(qū)別是:

local_time和local_time_t是將時間戳(time_t)轉(zhuǎn)換本地時間函數(shù),比如設(shè)置時區(qū)為東八區(qū),那么相比UTC時間就會多8個小時。

gmtime和gmtime_r是將時間戳轉(zhuǎn)換為UTC時間。

(二)rtthread的時區(qū)支持

考慮到嵌入式的場景應(yīng)用,rtthread采用的是輕量級的時區(qū)支持,沒有支持完整的時區(qū)數(shù)據(jù)庫。

默認(rèn)的時區(qū)是東八區(qū)(北京時間)

代碼宏是RT_LIBC_USING_LIGHT_TZ_DST,對應(yīng)的kconfig對應(yīng)以下,如果需要支持其他時區(qū)時間,可以改變以下配置。

12452b50-4bf9-11f0-986f-92fbcf53809c.png

(三)rtthread的時間轉(zhuǎn)換支持

在rtthread的時區(qū)支持上,主要影響localtime和mktime的行為,localtime_r和localtime會根據(jù)時區(qū)時間做偏移轉(zhuǎn)換為本地時間。

124db4b4-4bf9-11f0-986f-92fbcf53809c.png

mktime會根據(jù)時區(qū)時間偏移將本地時間轉(zhuǎn)換為UTC的時間戳。

125f8450-4bf9-11f0-986f-92fbcf53809c.png

在rtthread的alarm實(shí)現(xiàn)中,涉及到時間戳轉(zhuǎn)換日歷時間的接口都使用了UTC時間的函數(shù)接口gmtime_r,而當(dāng)觸發(fā)鬧鐘更新的時候,需要使用鬧鐘時間與當(dāng)前時間做判斷以便是否到達(dá)鬧鐘觸發(fā)事件,如果此時鬧鐘時間使用的是local_time,那么判斷將永遠(yuǎn)不成立,也就無法觸發(fā)鬧鐘回調(diào)。而如果同樣使用的是gmtime,那么時間單位是一致的,就會觸發(fā)鬧鐘回調(diào),但打印的鬧鐘列表是基于UTC時間。

由此可知:在 Alarm 模塊的實(shí)現(xiàn)中,時間戳轉(zhuǎn)日歷時間的操作均使用的是 UTC 時間函數(shù)(gmtime_r)。如果用戶傳入的是基于本地時間的結(jié)構(gòu)體,則因未統(tǒng)一轉(zhuǎn)換而造成比較失敗,導(dǎo)致無法觸發(fā)回調(diào)。

三、修復(fù)

根據(jù)上述原因,問題的根本在于Alarm 模塊未正確支持本地時間的判斷邏輯。針對這一問題,社區(qū)已在最新主線代碼中進(jìn)行了修復(fù)。

126d487e-4bf9-11f0-986f-92fbcf53809c.png

在對應(yīng)的時間戳轉(zhuǎn)換日歷時間上加個宏定義來切換為本地時間計算還是UTC時間計算即可。

12791b2c-4bf9-11f0-986f-92fbcf53809c.png

Kconfig配置上加了RT_ALARM_USING_LOCAL_TIME配置宏,如果打開就是基于本地時間來計算。默認(rèn)不使能。

RT-Thread Components -> Device Drivers -> Using RTC device drivers-> Using RTC alarm -> Using local time for the alarm calculation

128a3394-4bf9-11f0-986f-92fbcf53809c.png

如果使能該配置,那么鬧鐘就是以本地時間local_time為準(zhǔn)

如果禁能該配置,那么鬧鐘就是以UTC時間gmtime為準(zhǔn)。

在使用rt_alarm_create增加鬧鐘時,配置的鬧鐘時間需要區(qū)分來,即可正常工作

129ae572-4bf9-11f0-986f-92fbcf53809c.png

在list_alarm命令中加入了timezone,查找鬧鐘列表更加直觀


1、使用UTC時間的alarm

12a8480c-4bf9-11f0-986f-92fbcf53809c.png

2、使用東八區(qū)的本地時間的alarm

12baebec-4bf9-11f0-986f-92fbcf53809c.png

四、BSP的drv_rtc驅(qū)動注意點(diǎn)

1. 實(shí)現(xiàn) set_timestamp 時注意時間轉(zhuǎn)換

當(dāng)啟用了 RT_ALARM_USING_LOCAL_TIME 宏定義時,必須使用 local_time 進(jìn)行時間轉(zhuǎn)換,否則可能導(dǎo)致時間偏差。

12c54f06-4bf9-11f0-986f-92fbcf53809c.png

2、設(shè)置鬧鐘時必須完整填寫年月日字段

由于 RT_ALARM_ONESHOT 模式下,系統(tǒng)會將鬧鐘時間轉(zhuǎn)換為時間戳進(jìn)行比較,因此必須提供完整的日歷時間結(jié)構(gòu)(包括年、月、日)。否則可能因字段缺失導(dǎo)致匹配失敗。

12d0ca84-4bf9-11f0-986f-92fbcf53809c.png

而先楫只需要從鬧鐘寄存器中獲取即可。

12de36a6-4bf9-11f0-986f-92fbcf53809c.png

五、總結(jié)

本文圍繞 RT-Thread 中的Alarm(鬧鐘)設(shè)備驅(qū)動展開討論,結(jié)合先楫平臺的實(shí)際開發(fā)經(jīng)驗(yàn),深入分析了在使用 rt_alarm_create 設(shè)置本地時間鬧鐘時遇到的問題,并從底層機(jī)制出發(fā),解釋了問題根源,最終提出了有效的解決方案。

核心結(jié)論如下:

Alarm 子系統(tǒng)默認(rèn)使用 UTC 時間函數(shù)(如 gmtime_r)進(jìn)行時間戳與日歷時間的轉(zhuǎn)換;

若傳入本地時間結(jié)構(gòu)體但未統(tǒng)一轉(zhuǎn)換,會導(dǎo)致比較失敗,從而無法觸發(fā)鬧鐘回調(diào);

rtthread社區(qū)已在主線中引入 RT_ALARM_USING_LOCAL_TIME 宏定義,支持基于本地時間的鬧鐘行為;

在使用 Alarm 功能時,開發(fā)者需關(guān)注系統(tǒng)時區(qū)設(shè)置以及是否啟用本地時間模式,以確保鬧鐘行為符合預(yù)期。

通過本文的分析與實(shí)踐,希望可以幫助開發(fā)者更好地理解和使用 RT-Thread 的 Alarm 子系統(tǒng),提升嵌入式設(shè)備中定時任務(wù)管理的靈活性與準(zhǔn)確性。

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

    關(guān)注

    2

    文章

    1568

    瀏覽量

    63726
  • 設(shè)備
    +關(guān)注

    關(guān)注

    2

    文章

    4657

    瀏覽量

    71605
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1387

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    RT-Thread記錄(二、RT-Thread內(nèi)核啟動流程)

    在前面我們RT-Thread Studio工程基礎(chǔ)之上講一講RT-Thread內(nèi)核啟動流程.
    的頭像 發(fā)表于 06-20 00:30 ?5606次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(二、<b class='flag-5'>RT-Thread</b>內(nèi)核啟動流程)

    RT-Thread系統(tǒng)上開啟RTC驅(qū)動模塊

    : 1654000441timezone: UTC+8小結(jié)STM32 平臺RTC 的功能,因?yàn)?b class='flag-5'>RT-Thread 適配的很好,所以基本上配置好就可以正常使用了后面再開啟RTC Alarm 鬧鐘框架,實(shí)現(xiàn)定時鬧鐘功能這里需要了解一
    發(fā)表于 06-01 15:31

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發(fā)組(2015-03-31)。RT-Thread做為國內(nèi)有較大影響力的開源實(shí)時操作系統(tǒng),本文是RT-Thread實(shí)時操作系統(tǒng)的編程指南
    發(fā)表于 11-26 16:06 ?0次下載

    RT-Thread用戶手冊

    RT-Thread用戶手冊——本書是RT-Thread的編程手冊,用于指導(dǎo)在RT-Thread實(shí)時操作系統(tǒng)環(huán)境下如何進(jìn)行編 程。
    發(fā)表于 11-26 16:16 ?0次下載

    RT-Thread全球技術(shù)大會:螢石研發(fā)團(tuán)隊(duì)使用RT-Thread的技術(shù)挑戰(zhàn)

    RT-Thread全球技術(shù)大會:研發(fā)團(tuán)隊(duì)使用RT-Thread的技術(shù)挑戰(zhàn) ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 11:36 ?1543次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:螢石研發(fā)團(tuán)隊(duì)使用<b class='flag-5'>RT-Thread</b>的技術(shù)挑戰(zhàn)

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread中的工作機(jī)制

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread中的工作機(jī)制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?1822次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:Kconfig在<b class='flag-5'>RT-Thread</b>中的工作機(jī)制

    RT-Thread全球技術(shù)大會:在RT-Thread上編寫測試用例

    RT-Thread全球技術(shù)大會:在RT-Thread上編寫測試用例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:28 ?1733次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:在<b class='flag-5'>RT-Thread</b>上編寫測試用例

    RT-Thread全球技術(shù)大會:RT-Thread測試用例集合案例

    RT-Thread全球技術(shù)大會:RT-Thread測試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:34 ?2369次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:<b class='flag-5'>RT-Thread</b>測試用例集合案例

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

    RT-Thread 簡介 作為一名 RTOS 的初學(xué)者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發(fā)現(xiàn) RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發(fā)表于 07-09 11:27 ?4975次閱讀
    <b class='flag-5'>RT-Thread</b>學(xué)習(xí)筆記 <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?10次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_workqueue

    RT-Thread文檔_workqueue
    發(fā)表于 02-22 18:40 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_workqueue

    基于RT-Thread Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?5162次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學(xué)習(xí)

    RT-Thread v5.0.2 發(fā)布

    RT-Thread 代碼倉庫地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發(fā)布日志詳情: ●? htt
    的頭像 發(fā)表于 10-10 18:45 ?1903次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發(fā)布