本篇內(nèi)容主要講解“LiteOS驅(qū)動(dòng)移植方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“LiteOS驅(qū)動(dòng)移植方法是什么”吧!
10年積累的做網(wǎng)站、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有瑞麗免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
俗話說的好,光說不練假把式,上一個(gè)系列 LiteOS內(nèi)核實(shí)戰(zhàn)教程 中講述了內(nèi)核中任務(wù)如何管理、如何使用信號(hào)量同步多個(gè)任務(wù)的運(yùn)行,如何用互斥鎖保護(hù)共享資源,如何申請(qǐng)分配動(dòng)態(tài)內(nèi)存空間,但是在嵌入式系統(tǒng)中,如果不能將內(nèi)核有效的應(yīng)用在實(shí)際場(chǎng)景中控制外圍設(shè)備,那么一切都是紙上談兵。在這個(gè)系列中,本教程將會(huì)帶領(lǐng)大家,手把手添加一些常用的外設(shè)驅(qū)動(dòng)到LiteOS系統(tǒng)中,掌握外設(shè)驅(qū)動(dòng)的移植方法。
驅(qū)動(dòng)層代碼,簡(jiǎn)單通俗的來說就是向上給用戶提供一層可以控制設(shè)備的API,向下負(fù)責(zé)和設(shè)備打交道,直接操作硬件。
比如LED的驅(qū)動(dòng)代碼可以給用戶提供一個(gè)初始化的 API 和打開/關(guān)閉的 API ,按鍵的驅(qū)動(dòng)代碼可以提供初始化的 API 和讀取按鍵狀態(tài)的 API,LCD的驅(qū)動(dòng)代碼可以提供初始化的 API 和屏幕上顯示相關(guān)內(nèi)容的API,傳感器的驅(qū)動(dòng)代碼可以提供傳感器初始化的API 和讀取數(shù)據(jù)的 API,等等。
如果對(duì)基于HAL庫的裸機(jī)驅(qū)動(dòng)不熟悉,請(qǐng)先閱讀嵌入式基礎(chǔ)教程!
這里以使用 STM32CuebMX 生成的 LED 閃爍的裸機(jī)工程為例,其中 Src 目錄下的gpio.c
文件就相當(dāng)于 LED 的驅(qū)動(dòng)層文件,其中提供了 LED 的初始化代碼:
有了該文件,也就是驅(qū)動(dòng)層代碼,我們可以直接調(diào)用MX_GPIO_Init
來初始化LED。
那么,驅(qū)動(dòng)層代碼從哪里來呢?
如果是比較簡(jiǎn)單的外設(shè),比如LED,按鍵這種,只使用了GPIO,可以直接使用STM32CubeMX生成的gpio.c
文件和gpio.h
文件;
如果是比較復(fù)雜的外設(shè),比如LCD的底層是使用SPI驅(qū)動(dòng)的,那么除了 STM32CubeMX 生成的spi.h
和spi.c
文件,還需要自己在此基礎(chǔ)上手寫LCD屏幕的驅(qū)動(dòng)文件,具體的教程可以參考我的裸機(jī)教程系列:STM32CubeMX教程。
LiteOS 工程 target 目錄結(jié)構(gòu)如下:
其中和設(shè)備驅(qū)動(dòng)相關(guān)的有三個(gè)文件夾:
Inc:對(duì)應(yīng)STM32CubeMX生成裸機(jī)工程中的Inc
Src: 對(duì)應(yīng)STM32CubeMX生成裸機(jī)工程中的Src
Hardware:存放自己編寫的設(shè)備驅(qū)動(dòng)代碼
復(fù)制文件的時(shí)候按照情況復(fù)制到對(duì)應(yīng)的文件夾即可。
這里L(fēng)ED相關(guān)的代碼文件只有gpio.h
和gpio.c
,所以復(fù)制gpio.h
到 Inc 文件夾,復(fù)制gpio.c
到 Src 文件夾。
使用IoT-Studio創(chuàng)建的HelloWorld工程中已經(jīng)提供好了這兩個(gè)文件,了解這個(gè)操作即可,不用再次復(fù)制。
因?yàn)?LiteOS 的整個(gè)項(xiàng)目工程使用 make 構(gòu)建,所以復(fù)制驅(qū)動(dòng)文件之后,需要添加驅(qū)動(dòng)文件的路徑到 makefile 中,加入編譯。
project.mk
文件指明了工程中所有文件的路徑:
在該文件中:
C文件路徑
HARDWARE_SRC:對(duì)應(yīng)Hardware文件夾下的Src文件夾
USER_SRC:對(duì)應(yīng)Src文件夾
頭文件路徑
HARDWARE_INC:對(duì)應(yīng)Hardware文件夾下的Inc文件夾
USER_INC:對(duì)應(yīng)Inc文件夾
如下,LED驅(qū)動(dòng)的gpio.c
文件添加到USER_SRC下(工程中默認(rèn)已添加,無需重復(fù)添加):
LED驅(qū)動(dòng)的gpio.h
文件添加到USER_INC下(工程中默認(rèn)已添加,無需重復(fù)添加):
至此,復(fù)制文件到LiteOS工程中,并將新復(fù)制的文件路徑添加到makefile中,加入工程編譯,就完成了驅(qū)動(dòng)的移植。
在使用外設(shè)之前,首先需要初始化外設(shè),在LiteOS中,初始化設(shè)備有兩種方式:
在系統(tǒng)啟動(dòng)調(diào)度之前初始化:設(shè)備在系統(tǒng)中隨時(shí)可被任意任務(wù)使用
在任務(wù)中初始化:設(shè)備一般只在該任務(wù)中被使用
舉個(gè)例子:
像LED這種的驅(qū)動(dòng),一般都是任意的任務(wù)需要點(diǎn)亮或者關(guān)閉LED,沒有專門的LED點(diǎn)亮任務(wù)或者關(guān)閉任務(wù),在系統(tǒng)啟動(dòng)調(diào)度之前初始化比較好;
像光照強(qiáng)度傳感器這種驅(qū)動(dòng),一般都是有專門的數(shù)據(jù)采集任務(wù),專門去讀取傳感器數(shù)據(jù),不需要?jiǎng)e的線程去調(diào)用驅(qū)動(dòng)讀取數(shù)據(jù),所以放在該數(shù)據(jù)采集任務(wù)中初始化就可以。
在任務(wù)中調(diào)用初始化API比較簡(jiǎn)單,那么,如何在系統(tǒng)啟動(dòng)之前調(diào)用初始化API呢?
其實(shí),答案就在 Src 文件夾下的main.c
中,main函數(shù)如下:
可以看到,系統(tǒng)上電后首先調(diào)用 HardWare_Init
函數(shù)初始化硬件設(shè)備,然后初始化內(nèi)核,初始化shell,最后啟動(dòng)LOS內(nèi)核。
同樣在main.c
中存放著HardWare_Init
函數(shù)的實(shí)現(xiàn),來一探究竟:
怎么樣?有沒有驚喜?是不是和裸機(jī)工程的main函數(shù)開始部分一模一樣?
我們可以將初始化函數(shù)盡情的扔到這個(gè)函數(shù)里,比如LED的初始化函數(shù)MX_GPIO_Init()
,在系統(tǒng)上電的時(shí)候自動(dòng)將LED初始化,是不是很爽。
在IoT Studio默認(rèn)提供的gpio.c
文件的MX函數(shù)中,沒有對(duì) LED 的引腳 PC13 進(jìn)行初始化,手動(dòng)添加如下的初始化代碼:
接下來首先創(chuàng)建一個(gè)文件夾,用于存放本系列教程實(shí)驗(yàn)的代碼:
在該文件夾中創(chuàng)建一個(gè)文件:
編寫代碼:
#include <osal.h> #include <gpio.h> static int led_blink_entry() { while (1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); osal_task_sleep(1*1000); } } int standard_app_demo_main() { osal_task_create("led_blink",led_blink_entry,NULL,0x400,NULL,2); return 0; }
然后按照之前的方法,在 user_demo.mk 中將led_driver_demo.c
文件添加到makefile中,加入編譯:
最后在.sdkconfig
中配置開啟宏定義:
編譯,燒錄,即可看到LED開始閃爍:
到此,相信大家對(duì)“LiteOS驅(qū)動(dòng)移植方法是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
分享標(biāo)題:LiteOS驅(qū)動(dòng)移植方法是什么
網(wǎng)頁鏈接:http://bm7419.com/article32/pcicsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站排名、營(yíng)銷型網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容