chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

Linux驅(qū)動(dòng)開(kāi)發(fā)-內(nèi)核定時(shí)器

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【摘要】 內(nèi)核定時(shí)器是內(nèi)核用來(lái)控制在未來(lái)某個(gè)時(shí)間點(diǎn)(基于jiffies(節(jié)拍總數(shù)))調(diào)度執(zhí)行某個(gè)函數(shù)的一種機(jī)制,相關(guān)函數(shù)位于 和 kernel/timer.c 文件中。 當(dāng)內(nèi)核定時(shí)器定時(shí)時(shí)間到達(dá)時(shí),會(huì)進(jìn)入用戶指定的函數(shù),相當(dāng)于軟中斷。內(nèi)核定時(shí)器注冊(cè)開(kāi)啟后,運(yùn)行一次就不會(huì)再運(yùn)行(相當(dāng)于自動(dòng)注銷),我們可以重新設(shè)置定時(shí)器的超時(shí)時(shí)間,讓定時(shí)器重復(fù)運(yùn)行。

1. 內(nèi)核定時(shí)器介紹

內(nèi)核定時(shí)器是內(nèi)核用來(lái)控制在未來(lái)某個(gè)時(shí)間點(diǎn)(基于jiffies(節(jié)拍總數(shù)))調(diào)度執(zhí)行某個(gè)函數(shù)的一種機(jī)制,相關(guān)函數(shù)位于 和 kernel/timer.c 文件中。

當(dāng)內(nèi)核定時(shí)器定時(shí)時(shí)間到達(dá)時(shí),會(huì)進(jìn)入用戶指定的函數(shù),相當(dāng)于軟中斷。內(nèi)核定時(shí)器注冊(cè)開(kāi)啟后,運(yùn)行一次就不會(huì)再運(yùn)行(相當(dāng)于自動(dòng)注銷),我們可以重新設(shè)置定時(shí)器的超時(shí)時(shí)間,讓定時(shí)器重復(fù)運(yùn)行。

每當(dāng)時(shí)鐘中斷發(fā)生時(shí),全局變量jiffies(一個(gè)32位的unsigned long 變量)就加1,因此jiffies記錄了linux系統(tǒng)啟動(dòng)后時(shí)鐘中斷發(fā)生的次數(shù),驅(qū)動(dòng)程序常利用jiffies來(lái)計(jì)算不同事件間的時(shí)間間隔。內(nèi)核每秒鐘將jiffies變量增加HZ次。因此,對(duì)于HZ值為100的系統(tǒng),jiffy+1等于隔了10ms,而對(duì)于HZ為1000的系統(tǒng),jiffy+1僅為1ms。

內(nèi)核定時(shí)器結(jié)構(gòu)體:
下面列出了需要關(guān)心的成員

struct timer_list {
	unsigned long expires;         //設(shè)置超時(shí)時(shí)間,用jiffies作為基準(zhǔn)值
	void (*function)(unsigned long); //類似中斷服務(wù)函數(shù),設(shè)置定時(shí)器到時(shí)后處理的函數(shù) 
	unsigned long data;           //中斷服務(wù)函數(shù)的參數(shù)
}

expires設(shè)置:以當(dāng)前時(shí)間為基準(zhǔn)加上延時(shí)時(shí)間,時(shí)間基準(zhǔn)用jiffies變量表示,延時(shí)時(shí)間可以使用以下兩個(gè)宏轉(zhuǎn)換成jiffies單位。

2. 內(nèi)核定時(shí)器相關(guān)API函數(shù)

2.1 修改定時(shí)器超時(shí)時(shí)間

函數(shù)原型 *int mod_timer(struct timer_list timer, unsigned long expires)
函數(shù)功能 修改定時(shí)器超時(shí)時(shí)間
函數(shù)參數(shù) timer:對(duì)應(yīng)的定時(shí)器結(jié)構(gòu)體 expires:超時(shí)時(shí)間
函數(shù)返回值 成功返回 :修改成功的時(shí)間值
函數(shù)定義文件 \linux-3.5\kernel\timer.c

2.2 初始化定時(shí)器

函數(shù)原型 #define init_timer(timer)\
函數(shù)功能 初始化定時(shí)器結(jié)構(gòu)
函數(shù)參數(shù) timer:對(duì)應(yīng)的定時(shí)器結(jié)構(gòu)體
函數(shù)定義文件 \linux-3.5\include\linux\timer.h

2.3 關(guān)閉定時(shí)器

函數(shù)原型 int del_timer(struct timer_list *timer)
函數(shù)功能 關(guān)閉定時(shí)器,停用一個(gè)定時(shí)器。
函數(shù)參數(shù) timer:對(duì)應(yīng)的定 時(shí)器結(jié)構(gòu)體
函數(shù)返回值 返回0:成功
函數(shù)定義文件 \linux-3.5\include\linux\timer.h

2.4 關(guān)閉定時(shí)器

函數(shù)原型 int del_timer_sync(struct timer_list *timer)
函數(shù)功能 關(guān)閉定時(shí)器,停用一個(gè)定時(shí)器,多處理器使用。如果編內(nèi)核時(shí)不支持 SMP(多處理器), del_timer_sync()和 del_timer()等價(jià)
函數(shù)參數(shù) timer:對(duì)應(yīng)的定時(shí)器結(jié)構(gòu)體
函數(shù)返回值 返回0:成功
函數(shù)定義文件 \linux-3.5\include\linux\timer.h

2.5 轉(zhuǎn)換時(shí)間(微妙單位)

函數(shù)原型 unsigned long usecs_to_jiffies(const unsigned int m)
函數(shù)功能 轉(zhuǎn)換時(shí)間(微妙單位),用于填充定時(shí)器結(jié)構(gòu)體,設(shè)置超時(shí)時(shí)間
函數(shù)參數(shù) m:要轉(zhuǎn)換的時(shí)間值(微妙為單位)
函數(shù)返回值 成功返回轉(zhuǎn)換成功的時(shí)間。用于填充定時(shí)器結(jié)構(gòu)體,設(shè)置超時(shí)時(shí)間
函數(shù)定義文件 \linux-3.5\kernel\timer.c

2.6 轉(zhuǎn)換時(shí)間(毫秒為單位)

函數(shù)原型 unsigned long msecs_to_jiffies(const unsigned int m)
函數(shù)功能 轉(zhuǎn)換時(shí)間(毫秒為單位),用于填充定時(shí)器結(jié)構(gòu)體,設(shè)置超時(shí)時(shí)間
函數(shù)參數(shù) m:要轉(zhuǎn)換的時(shí)間值(毫秒為單位)
函數(shù)返回值 成功返回轉(zhuǎn)換成功的時(shí)間。用于填充定時(shí)器結(jié)構(gòu)體,設(shè)置超時(shí)時(shí)間
函數(shù)定義文件 \linux-3.5\kernel\timer.c

將jiffies單位轉(zhuǎn)為struct timespec結(jié)構(gòu)體表示:

Void jiffies_to_timespec(const unsigned long jiffies, struct timespec *value);

示例:
jiffies_to_timespec(jiffies,&value);
printk("value.ts_sec=%d\n",value.tv_sec);
printk("value.tv_nsec=%d\n",value.tv_nsec);

2.7 初始化定時(shí)器的結(jié)構(gòu)體成員

TIMER_INITIALIZER( _function, _expires, _data) 宏用于賦值定時(shí)器結(jié)構(gòu)體的function、 expires、 data 和 base 成員, 這個(gè)宏的定義如下所示:(被DEFINE_TIMER宏調(diào)用)

#define TIMER_INITIALIZER(_function, _expires, _data) {		\
		.entry = { .prev = TIMER_ENTRY_STATIC },	\
		.function = (_function),			\
		.expires = (_expires),				\
		.data = (_data),				\
		.base = &boot_tvec_bases,			\
		.slack = -1,					\
		__TIMER_LOCKDEP_MAP_INITIALIZER(		\
			__FILE__ ":" __stringify(__LINE__))	\
	}

2.8 初始化定時(shí)器并且賦值

DEFINE_TIMER( _na me , _functi o n, _e x pires, _data) 宏是定義并初始化定時(shí)器成員的“快捷方式”, 這個(gè)宏定義如下所示:

/*初始化定時(shí)器,并進(jìn)行賦值*/
#define DEFINE_TIMER(_name, _function, _expires, _data)		\
	struct timer_list _name =				\
		TIMER_INITIALIZER(_function, _expires, _data)

2.9 定時(shí)器初始化賦值

setup_timer()也可用于初始化定時(shí)器并賦值其成員, 其源代碼如下:

//初始化定時(shí)器并進(jìn)行賦值
#define setup_timer(timer, fn, data)					\
	do {								\
		static struct lock_class_key __key;			\
		setup_timer_key((timer), #timer, &__key, (fn), (data));\
	} while (0)

static inline void setup_timer_key(struct timer_list * timer,
				const char *name,
				struct lock_class_key *key,
				void (*function)(unsigned long),
				unsigned long data)
{
	timer->function = function;
	timer->data = data;
	init_timer_key(timer, name, key);
}

3. 使用定時(shí)器的步驟

(1) 定義定時(shí)器結(jié)構(gòu)體timer_list。

/*定義一個(gè)內(nèi)核定時(shí)器配置結(jié)構(gòu)體*/
static struct timer_list mytimer ; 

(2) 設(shè)置超時(shí)時(shí)間,定義定時(shí)器處理函數(shù)和傳參。

mytimer.expires=jiffies+ msecs_to_jiffies(1000); /*設(shè)置定時(shí)器的超時(shí)時(shí)間,1000毫秒*/
//或者
//mytimer.expires=jiffies+HZ; /*設(shè)置定時(shí)器的超時(shí)時(shí)間,1000毫秒*/

mytimer.function = time_fun;	              /*定時(shí)器超時(shí)的回調(diào)函數(shù),類似中斷服務(wù)函數(shù)*/
mytimer.data = 12;                       /*傳給定時(shí)器服務(wù)函數(shù)的參數(shù)*/

(3) 開(kāi)啟定時(shí)器。

init_timer(&mytimer);          /*初始化定時(shí)器*/
add_timer(&mytimer);	        /*啟動(dòng)定時(shí)器*/

完整示例代碼:

#include 
#include 
#include 

static struct timer_list timer;

static void timer_function(unsigned long data)
{
	printk("data=%ld\n",data);
	mod_timer(&timer,msecs_to_jiffies(3000)+jiffies);
}

static int __init tiny4412_linux_timer_init(void)
{
	timer.expires=HZ*3+jiffies; /*單位是節(jié)拍*/
	timer.function=timer_function;
	timer.data=666;
	
	/*1. 初始化定時(shí)器*/
	init_timer(&timer);
	/*2. 添加定時(shí)器到內(nèi)核*/
	add_timer(&timer);
    printk("驅(qū)動(dòng)測(cè)試: 驅(qū)動(dòng)安裝成功\n");
    return 0;
}

static void __exit tiny4412_linux_timer_cleanup(void)
{
	/*3. 刪除定時(shí)器*/
	del_timer_sync(&timer);
    printk("驅(qū)動(dòng)測(cè)試: 驅(qū)動(dòng)卸載成功\n");
}

module_init(tiny4412_linux_timer_init);    /*驅(qū)動(dòng)入口--安裝驅(qū)動(dòng)的時(shí)候執(zhí)行*/
module_exit(tiny4412_linux_timer_cleanup); /*驅(qū)動(dòng)出口--卸載驅(qū)動(dòng)的時(shí)候執(zhí)行*/

MODULE_LICENSE("GPL");  /*設(shè)置模塊的許可證--GPL*/

4. 內(nèi)核提供的延時(shí)函數(shù)

Linux 內(nèi)核中提供了進(jìn)行納秒、微秒和毫秒延遲。
void ndelay(unsigned long nsecs) ;
void udelay(unsigned long usecs) ;
void mdelay(unsigned long msecs) ;
上述延遲的實(shí)現(xiàn)原理本質(zhì)上是忙等待,根據(jù) CPU 頻率進(jìn)行一定次數(shù)的循環(huán)。在內(nèi)核中,最好不要直接使用mdelay()函數(shù), 這將無(wú)謂地耗費(fèi)CPU資源。
void msleep(unsigned int millisecs) ;
unsigned long msleep_interruptible(unsigned int millisecs) ;
void ssleep(unsigned int seconds) ;
上述函數(shù)將使得調(diào)用它的進(jìn)程睡眠參數(shù)指定的時(shí)間, msleep()、 ssleep()不能被打斷,而 msleep_interruptible()則可以被打斷。

5. 精度較高的時(shí)間獲取方式

高精度定時(shí)器通常用ktime作為計(jì)時(shí)單位。
獲取內(nèi)核高精度時(shí)間單位: ktime_t ktime_get(void)

下面是一些時(shí)間輔助函數(shù)用于計(jì)算和轉(zhuǎn)換:

ktime_t ktime_set(const long secs, const unsigned long nsecs);   
ktime_t ktime_sub(const ktime_t lhs, const ktime_t rhs);   
ktime_t ktime_add(const ktime_t add1, const ktime_t add2);   
ktime_t ktime_add_ns(const ktime_t kt, u64 nsec);   
ktime_t ktime_sub_ns(const ktime_t kt, u64 nsec);   
ktime_t timespec_to_ktime(const struct timespec ts);   
ktime_t timeval_to_ktime(const struct timeval tv);   
struct timespec ktime_to_timespec(const ktime_t kt);   //轉(zhuǎn)換的時(shí)間通過(guò)timespec結(jié)構(gòu)體保存
struct timeval ktime_to_timeval(const ktime_t kt);     //轉(zhuǎn)換的時(shí)間通過(guò)timeval結(jié)構(gòu)體保存
s64 ktime_to_ns(const ktime_t kt);     //轉(zhuǎn)換為ns單位
int ktime_equal(const ktime_t cmp1, const ktime_t cmp2);   
s64 ktime_to_us(const ktime_t kt);    //轉(zhuǎn)換為us單位
s64 ktime_to_ms(const ktime_t kt);    //轉(zhuǎn)換為ms單位
ktime_t ns_to_ktime(u64 ns);

示例: 計(jì)算經(jīng)過(guò)的一段時(shí)間

static int hello_init(void)
{
	ktime_t my_time,my_time2;
	unsigned int i,j;
	unsigned int time_cnt=0;
	my_time=ktime_get();    		//獲取當(dāng)前時(shí)間
	i=ktime_to_us(my_time); 		//轉(zhuǎn)us
	
	udelay(600);  				//延時(shí)一段時(shí)間
	
	my_time2=ktime_get();  	  	//獲取當(dāng)前時(shí)間
	j=ktime_to_us(my_time2);  		//轉(zhuǎn)us
	
	printk("time_cnt=%ld\n",j-i); 	//得出之間差值,正確值為: 600
	return 0;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    4

    文章

    1436

    瀏覽量

    42470
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3359

    瀏覽量

    121659
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4405

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開(kāi)發(fā)Linux驅(qū)動(dòng)開(kāi)發(fā)實(shí)戰(zhàn):RK3568內(nèi)核模塊符號(hào)導(dǎo)出詳解

    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開(kāi)發(fā)Linux驅(qū)動(dòng)開(kāi)發(fā)實(shí)戰(zhàn):RK3568內(nèi)核模塊符號(hào)導(dǎo)出詳解
    的頭像 發(fā)表于 11-21 13:25 ?598次閱讀
    【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568<b class='flag-5'>開(kāi)發(fā)</b>板<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>實(shí)戰(zhàn):RK3568<b class='flag-5'>內(nèi)核</b>模塊符號(hào)導(dǎo)出詳解

    使用系統(tǒng)定時(shí)器SysTick來(lái)實(shí)現(xiàn)精確延時(shí)微秒和毫秒函數(shù)

    Cortex-M內(nèi)核MCU都有的一個(gè)定時(shí)器,所以以上延時(shí)微秒和延時(shí)毫秒的函數(shù)適用于任何 Cortex-M內(nèi)核的MCU。有了精確延時(shí)函數(shù),那么使用通用GPIO軟件模擬一些通信協(xié)議,如IIC、SPI等串行協(xié)議,就可以
    發(fā)表于 11-20 07:12

    【免費(fèi)送書】成為硬核Linux開(kāi)發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(第 2 版)》

    Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)開(kāi)發(fā),一直給人門檻較高的印象,主要因內(nèi)核機(jī)制抽象、需深度理解硬件原理、開(kāi)發(fā)調(diào)試難度大所致。2021年,一本講解
    的頭像 發(fā)表于 11-18 08:06 ?392次閱讀
    【免費(fèi)送書】成為硬核<b class='flag-5'>Linux</b><b class='flag-5'>開(kāi)發(fā)</b>者:《<b class='flag-5'>Linux</b> 設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>(第 2 版)》

    【書籍評(píng)測(cè)活動(dòng)NO.67】成為硬核Linux開(kāi)發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(第 2 版)》

    )。成為硬核Linux開(kāi)發(fā)Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)開(kāi)發(fā),一直給人門檻較高的印象,主要因內(nèi)核機(jī)制
    發(fā)表于 11-17 17:52

    PWM、定時(shí)器、SysTick 區(qū)別及應(yīng)用場(chǎng)景

    在單片機(jī)和嵌入式開(kāi)發(fā)中,經(jīng)常會(huì)遇到PWM(脈寬調(diào)制)、定時(shí)器、SysTick(系統(tǒng)滴答定時(shí)器)這幾個(gè)詞。很多初學(xué)者容易把它們混為一談,以為都是“定時(shí)相關(guān)的東西”。其實(shí),它們?cè)诒举|(zhì)和應(yīng)用
    的頭像 發(fā)表于 11-17 10:53 ?196次閱讀
    PWM、<b class='flag-5'>定時(shí)器</b>、SysTick 區(qū)別及應(yīng)用場(chǎng)景

    看門狗定時(shí)器、復(fù)位源、異常處理機(jī)制科普

    的作用、原理與應(yīng)用。一、看門狗定時(shí)器(WatchdogTimer)1.原理看門狗定時(shí)器本質(zhì)上是一個(gè)獨(dú)立定時(shí)器,持續(xù)倒計(jì)時(shí):軟件在規(guī)定時(shí)間內(nèi)“喂狗”(重置看門狗計(jì)數(shù)
    的頭像 發(fā)表于 11-17 10:53 ?649次閱讀
    看門狗<b class='flag-5'>定時(shí)器</b>、復(fù)位源、異常處理機(jī)制科普

    SysTick系統(tǒng)滴答定時(shí)器簡(jiǎn)介

    SysTick—系統(tǒng)定時(shí)器是屬于CM33內(nèi)核中的一個(gè)外設(shè),內(nèi)嵌在NVIC中。系統(tǒng)定時(shí)器是一個(gè)24bit的向下遞減的計(jì)數(shù),計(jì)數(shù)每計(jì)數(shù)一次的
    的頭像 發(fā)表于 09-23 09:50 ?1295次閱讀
    SysTick系統(tǒng)滴答<b class='flag-5'>定時(shí)器</b>簡(jiǎn)介

    大彩講堂:VisualHMI-LUA教程-定時(shí)器的使用指南

    定時(shí)器的使用
    的頭像 發(fā)表于 08-31 16:59 ?827次閱讀
    大彩講堂:VisualHMI-LUA教程-<b class='flag-5'>定時(shí)器</b>的使用指南

    TPS3435 Nano IQ精密超時(shí)看門狗定時(shí)器技術(shù)解析與應(yīng)用指南

    WSON和8引腳SOT23封裝。TPS3435/TPS3435-Q1定時(shí)器的工作溫度范圍為-40°C至125°C。這款超時(shí)看門狗定時(shí)器非常適合機(jī)器人伺服驅(qū)動(dòng)器、混合模塊信號(hào)、HVAC控制
    的頭像 發(fā)表于 08-26 16:20 ?697次閱讀
    TPS3435 Nano IQ精密超時(shí)看門狗<b class='flag-5'>定時(shí)器</b>技術(shù)解析與應(yīng)用指南

    【HZ-RK3568開(kāi)發(fā)板免費(fèi)體驗(yàn)】3、開(kāi)啟Linux Kernel RT功能

    事件。 內(nèi)核定時(shí)器: Preempt-RT提供了更精確和可配置的內(nèi)核定時(shí)器,使得可以實(shí)現(xiàn)微秒級(jí)的定時(shí)精度,適用于對(duì)時(shí)間要求極高的應(yīng)用場(chǎng)景。 實(shí)時(shí)擴(kuò)展: Preempt-RT提供了一些實(shí)時(shí)擴(kuò)展機(jī)制,使得
    發(fā)表于 07-22 14:03

    MCU定時(shí)器/計(jì)數(shù)

    架構(gòu)與功能特性? 定時(shí)器類型與配置? 高級(jí)控制定時(shí)器?:支持互補(bǔ)PWM輸出與剎車功能,適用于電機(jī)驅(qū)動(dòng)等高精度控制場(chǎng)景。通用定時(shí)器?:集成輸入捕獲、輸出比較、單脈沖模式等基礎(chǔ)功能?。 系
    的頭像 發(fā)表于 04-27 13:54 ?580次閱讀

    基于OpenSBI的linux nommu實(shí)現(xiàn)

    :SupervisorSoftwareBinaryInterface軟件二進(jìn)制接口Linux內(nèi)核工作在S模式下時(shí),不能直接訪問(wèn)機(jī)器定時(shí)器。而系統(tǒng)的運(yùn)行依賴于定時(shí)器,為了解決這個(gè)問(wèn)
    的頭像 發(fā)表于 02-08 13:43 ?1046次閱讀
    基于OpenSBI的<b class='flag-5'>linux</b> nommu實(shí)現(xiàn)

    EE-345:SHARC處理的啟動(dòng)內(nèi)核定制和固件可升級(jí)性

    電子發(fā)燒友網(wǎng)站提供《EE-345:SHARC處理的啟動(dòng)內(nèi)核定制和固件可升級(jí)性.pdf》資料免費(fèi)下載
    發(fā)表于 01-07 14:14 ?0次下載
    EE-345:SHARC處理<b class='flag-5'>器</b>的啟動(dòng)<b class='flag-5'>內(nèi)核定</b>制和固件可升級(jí)性

    定時(shí)器已安排!開(kāi)發(fā)小白看過(guò)來(lái)~

    本文將為您詳細(xì)介紹Air201定時(shí)器的基本操作與設(shè)置,確保您輕松上手,包教包會(huì)! 在Air201模組搭載的LuatOS系統(tǒng)中,定時(shí)器(timer)是一項(xiàng)基礎(chǔ)且關(guān)鍵的服務(wù)。 它允許開(kāi)發(fā)者在特定的時(shí)間點(diǎn)
    的頭像 發(fā)表于 12-31 14:30 ?764次閱讀
    <b class='flag-5'>定時(shí)器</b>已安排!<b class='flag-5'>開(kāi)發(fā)</b>小白看過(guò)來(lái)~