rt-thread 是通過(guò) I/O 設(shè)備模型來(lái)管理 soc 上的外設(shè),從上到下分為三層:I/O 設(shè)備管理層、設(shè)備驅(qū)動(dòng)框架層和設(shè)備驅(qū)動(dòng)層。stm32 的 HAL 庫(kù)就屬于設(shè)備驅(qū)動(dòng)層,比如熟知的 i2c、spi 的外設(shè)驅(qū)動(dòng)在用 cubemx 生成代碼的時(shí)候就已經(jīng)準(zhǔn)備好。中科藍(lán)訊的 ab32vg1 的設(shè)備驅(qū)動(dòng)已經(jīng)在sdk 中由藍(lán)訊的工程師實(shí)現(xiàn)。而在設(shè)備驅(qū)動(dòng)層之上的設(shè)備驅(qū)動(dòng)框架層和設(shè)備 I/O 管理層要說(shuō)明一下:設(shè)備驅(qū)動(dòng)框架層提供了一些接口留給設(shè)備驅(qū)動(dòng)開(kāi)發(fā)者去實(shí)現(xiàn),只在做驅(qū)動(dòng)移植的時(shí)候需要,作為普通用戶,只需要關(guān)心 I/O 管理層即可,rt-thread 的 I/O 管理層提供了類似于 linux中文件 IO 的 ap,常用的有 rt_device_find、rt_device_open、rt_device_read、rt_device_close等。下面列舉了 hwtimer 的 api,結(jié)合示例去理解如何將這些 api 用起來(lái)實(shí)現(xiàn)定時(shí)器的功能。
//查找設(shè)備
/*
name:設(shè)備名稱
*/
rt_device_t rt_device_find(const char* name)
//打開(kāi)定時(shí)器設(shè)備
/*
dev:定時(shí)器設(shè)備句柄
oflags:打開(kāi)模式,一般取 RT_DEVICE_OFLAG_RDWR
*/
rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflags);
//設(shè)置超時(shí)回調(diào)
/*
dev:定時(shí)器設(shè)備句柄
rx_ind:超時(shí)回調(diào)函數(shù)
*/
rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device_t dev,rt_size_t size))
//控制定時(shí)器
/*
dev:定時(shí)器設(shè)備句柄
cmd:控制命令,可取
HWTIMER_CTRL_FREQ_SET 設(shè)置計(jì)數(shù)頻率
HWTIMER_CTRL_STOP 停止定時(shí)器
HWTIMER_CTRL_INFO_GET 獲取定時(shí)器特征信息
HWTIMER_CTRL_MODE_SET 設(shè)置定時(shí)器模式
arg:控制命令參數(shù)
設(shè)置定時(shí)器模式時(shí),可取
HWTIMER_MODE_ONESHOT 單 次 定 時(shí)
HWTIMER_MODE_PERIOD 周 期 性 定 時(shí)
*/
rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg);
//設(shè)置定時(shí)器超時(shí)值
/*
dev:定時(shí)器設(shè)備句柄
pos:偏移值,未使用,可取 0 值
buffer:指向超時(shí)時(shí)間結(jié)構(gòu)體
size:超時(shí)時(shí)間結(jié)構(gòu)體大小
*/
rt_size_t rt_device_write(rt_device_t dev,
rt_off_t pos,
const void* buffer,
rt_size_t size);
//獲取定時(shí)器當(dāng)前值
/*
dev:定時(shí)器句柄
pos:偏移值,未使用,可取 0 值
buffer:超時(shí)時(shí)間結(jié)構(gòu)體
size:超時(shí)時(shí)間結(jié)構(gòu)體大小
*/
rt_size_t rt_device_read(rt_device_t dev,
rt_off_t pos,
void* buffer,
rt_size_t size
);
//關(guān)閉定時(shí)器
/*
dev:定時(shí)器句柄
*/
rt_err_t rt_device_close(rt_device_t dev);
![poYBAGMEcJ-Abg84AAE6fM31FEg525.png](https://file.elecfans.com/web2/M00/63/B9/poYBAGMEcJ-Abg84AAE6fM31FEg525.png)
使用 rt-thread studio 進(jìn)行 sdk 的開(kāi)發(fā)是一件非常有效率的事情,新建 bsp 工程后只需要在rt-thread setting 配置需要的硬件功能就可以使用 rt-thread 提供的設(shè)備 I/O 管理接口對(duì)底層的 soc 的外設(shè)進(jìn)行控制。從示例中可以定時(shí)器的流程:先用 rt_device_find 根據(jù)設(shè)備名稱查找到定時(shí)器句柄、使用定時(shí)器句柄打開(kāi)定時(shí)器、接著設(shè)置定時(shí)器的回調(diào)函數(shù)、配置完定時(shí)器后設(shè)置定時(shí)器的定時(shí)值后定時(shí)器啟動(dòng),之后每當(dāng)定時(shí)器的計(jì)數(shù)器溢出就會(huì)執(zhí)行一次定時(shí)器的回調(diào)函數(shù)。
審核編輯:湯梓紅
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6901瀏覽量
123823 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3256瀏覽量
115469 -
Timer
+關(guān)注
關(guān)注
1文章
64瀏覽量
12836 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1306瀏覽量
40437
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STm32與RT-thread操作系統(tǒng)的配合使用
RT-Thread Studio操作系統(tǒng)
基于RT-Thread操作系統(tǒng)衍生rt-smart實(shí)時(shí)操作系統(tǒng)簡(jiǎn)介
RT-Thread編程指南
RT-Thread用戶手冊(cè)
RT Thread操作系統(tǒng)教程及資料
RT-Thread Smart微內(nèi)核操作系統(tǒng)發(fā)布!
國(guó)民技術(shù)攜手RT-Thread共同推進(jìn)MCU與RT-Thread操作系統(tǒng)廣泛適配
RT-Thread實(shí)時(shí)操作系統(tǒng)安裝向?qū)?/a>
RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述
![<b class='flag-5'>RT-Thread</b>學(xué)習(xí)筆記 <b class='flag-5'>RT-Thread</b>的架構(gòu)概述](https://file.elecfans.com/web2/M00/52/31/pYYBAGLKk5WAA__jAADjdAdXhIs410.jpg)
RT-Thread操作系統(tǒng)已經(jīng)成功部署至芯馳E3
RT-Thread操作系統(tǒng)的FreeRTOS兼容層
RT-Thread榮獲“最具影響力IoT操作系統(tǒng)獎(jiǎng)”
![<b class='flag-5'>RT-Thread</b>榮獲“最具影響力IoT<b class='flag-5'>操作系統(tǒng)</b>獎(jiǎng)”](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
新書(shū)發(fā)布——《實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù):RT-Thread與ARM編程實(shí)踐》
![新書(shū)發(fā)布——《實(shí)時(shí)<b class='flag-5'>操作系統(tǒng)</b>應(yīng)用技術(shù):<b class='flag-5'>RT-Thread</b>與ARM編程實(shí)踐》](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
RT-Thread操作系統(tǒng)應(yīng)用開(kāi)發(fā)寒假師資培訓(xùn)
![<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系統(tǒng)</b>應(yīng)用開(kāi)發(fā)寒假師資培訓(xùn)](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
評(píng)論