91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LiteOS驅動移植方法是什么

發布時間:2021-12-29 10:31:14 來源:億速云 閱讀:177 作者:iii 欄目:互聯網科技

本篇內容主要講解“LiteOS驅動移植方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“LiteOS驅動移植方法是什么”吧!

1. LiteOS裸機驅動移植系列

俗話說的好,光說不練假把式,上一個系列 LiteOS內核實戰教程 中講述了內核中任務如何管理、如何使用信號量同步多個任務的運行,如何用互斥鎖保護共享資源,如何申請分配動態內存空間,但是在嵌入式系統中,如果不能將內核有效的應用在實際場景中控制外圍設備,那么一切都是紙上談兵。在這個系列中,本教程將會帶領大家,手把手添加一些常用的外設驅動到LiteOS系統中,掌握外設驅動的移植方法。

2. 何為裸機驅動

驅動層代碼,簡單通俗的來說就是向上給用戶提供一層可以控制設備的API,向下負責和設備打交道,直接操作硬件。

比如LED的驅動代碼可以給用戶提供一個初始化的 API 和打開/關閉的 API ,按鍵的驅動代碼可以提供初始化的 API 和讀取按鍵狀態的 API,LCD的驅動代碼可以提供初始化的 API 和屏幕上顯示相關內容的API,傳感器的驅動代碼可以提供傳感器初始化的API 和讀取數據的 API,等等。

如果對基于HAL庫的裸機驅動不熟悉,請先閱讀嵌入式基礎教程!

這里以使用 STM32CuebMX 生成的 LED 閃爍的裸機工程為例,其中 Src 目錄下的gpio.c文件就相當于 LED 的驅動層文件,其中提供了 LED 的初始化代碼:

LiteOS驅動移植方法是什么

有了該文件,也就是驅動層代碼,我們可以直接調用MX_GPIO_Init來初始化LED。

那么,驅動層代碼從哪里來呢

如果是比較簡單的外設,比如LED,按鍵這種,只使用了GPIO,可以直接使用STM32CubeMX生成的gpio.c文件和gpio.h文件;

如果是比較復雜的外設,比如LCD的底層是使用SPI驅動的,那么除了 STM32CubeMX 生成的spi.hspi.c文件,還需要自己在此基礎上手寫LCD屏幕的驅動文件,具體的教程可以參考我的裸機教程系列:STM32CubeMX教程。

3. 如何移植驅動到LiteOS

復制裸機驅動文件

LiteOS 工程 target 目錄結構如下:

LiteOS驅動移植方法是什么

其中和設備驅動相關的有三個文件夾:

  • Inc:對應STM32CubeMX生成裸機工程中的Inc

  • Src: 對應STM32CubeMX生成裸機工程中的Src

  • Hardware:存放自己編寫的設備驅動代碼

復制文件的時候按照情況復制到對應的文件夾即可。

這里LED相關的代碼文件只有gpio.hgpio.c,所以復制gpio.h到 Inc 文件夾,復制gpio.c到 Src 文件夾。

使用IoT-Studio創建的HelloWorld工程中已經提供好了這兩個文件,了解這個操作即可,不用再次復制。

添加裸機驅動文件路徑

因為 LiteOS 的整個項目工程使用 make 構建,所以復制驅動文件之后,需要添加驅動文件的路徑到 makefile 中,加入編譯。

project.mk文件指明了工程中所有文件的路徑:

LiteOS驅動移植方法是什么

在該文件中:

  • C文件路徑

    • HARDWARE_SRC:對應Hardware文件夾下的Src文件夾

    • USER_SRC:對應Src文件夾

  • 頭文件路徑

    • HARDWARE_INC:對應Hardware文件夾下的Inc文件夾

    • USER_INC:對應Inc文件夾

如下,LED驅動的gpio.c文件添加到USER_SRC下(工程中默認已添加,無需重復添加):

LiteOS驅動移植方法是什么

LED驅動的gpio.h文件添加到USER_INC下(工程中默認已添加,無需重復添加):

LiteOS驅動移植方法是什么

至此,復制文件到LiteOS工程中,并將新復制的文件路徑添加到makefile中,加入工程編譯,就完成了驅動的移植。

4. 外設驅動文件的使用

初始化外設

在使用外設之前,首先需要初始化外設,在LiteOS中,初始化設備有兩種方式:

  • 在系統啟動調度之前初始化:設備在系統中隨時可被任意任務使用

  • 在任務中初始化:設備一般只在該任務中被使用

舉個例子:

像LED這種的驅動,一般都是任意的任務需要點亮或者關閉LED,沒有專門的LED點亮任務或者關閉任務,在系統啟動調度之前初始化比較好;

像光照強度傳感器這種驅動,一般都是有專門的數據采集任務,專門去讀取傳感器數據,不需要別的線程去調用驅動讀取數據,所以放在該數據采集任務中初始化就可以。

在任務中調用初始化API比較簡單,那么,如何在系統啟動之前調用初始化API呢

其實,答案就在 Src 文件夾下的main.c中,main函數如下:

LiteOS驅動移植方法是什么

可以看到,系統上電后首先調用 HardWare_Init 函數初始化硬件設備,然后初始化內核,初始化shell,最后啟動LOS內核。

同樣在main.c中存放著HardWare_Init函數的實現,來一探究竟:

LiteOS驅動移植方法是什么

怎么樣?有沒有驚喜?是不是和裸機工程的main函數開始部分一模一樣?

我們可以將初始化函數盡情的扔到這個函數里,比如LED的初始化函數MX_GPIO_Init(),在系統上電的時候自動將LED初始化,是不是很爽。

修復gpio.c文件中的小bug

在IoT Studio默認提供的gpio.c文件的MX函數中,沒有對 LED 的引腳 PC13 進行初始化,手動添加如下的初始化代碼:

LiteOS驅動移植方法是什么

操作外設

接下來首先創建一個文件夾,用于存放本系列教程實驗的代碼:

LiteOS驅動移植方法是什么

LiteOS驅動移植方法是什么

在該文件夾中創建一個文件:

LiteOS驅動移植方法是什么

編寫代碼:

#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中,加入編譯:

LiteOS驅動移植方法是什么

最后在.sdkconfig中配置開啟宏定義:

LiteOS驅動移植方法是什么

編譯,燒錄,即可看到LED開始閃爍:

LiteOS驅動移植方法是什么

到此,相信大家對“LiteOS驅動移植方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

册亨县| 岑溪市| 罗定市| 聊城市| 乌兰浩特市| 泊头市| 定南县| 台前县| 华宁县| 洛南县| 乌兰县| 南郑县| 望谟县| 宁化县| 石景山区| 普洱| 北流市| 芮城县| 平远县| 满洲里市| 夏河县| 茌平县| 大兴区| 阿拉善左旗| 海晏县| 栾城县| 郎溪县| 太湖县| 黄陵县| 潢川县| 洪湖市| 阳高县| 墨玉县| 合川市| 鹤岗市| 五寨县| 奉节县| 芮城县| 昭平县| 安吉县| 乌苏市|