小熊派開發實踐丨漫談LiteOS之傳感器移植


摘要:本文基於小熊派開發板簡單介紹了如何在LiteOS中移植傳感器,從而實現對於傳感器的相關控制。

1 hello world

相信大家無論在學習編程語言開始的第一個函數應該是HelloWorld,本文將從hello_world_demo為大家介紹如何實現傳感器的移植工作。

首先我們創建HelloWorld工程,選擇STM32_BearPi → hello_world_demo,工程名稱可以自定義。

創建之后我們點擊編譯,然后燒錄到開發板,打開VSCode-IoTLink的串口,並按照圖中進行設置串口連接參數,之后按鍵Reset,可以看到串口打印如下圖所示。

首先來介紹一下代碼運行的簡單流程,之前在漫談LiteOS系列中介紹過LiteOS 的啟動流程,我們知道在程序下載到開發板之后,首先會按一下Reset按鍵進行開發板的啟動,因此在開發板上電之后執行的第一個函數就是ReSet_Handler函數。

首先找到對應的啟動文件los_startup.S 文件(根據使用的操作系統以及板子MCU系列查找文件目錄),可以看到其由匯編語言編寫,具體啟動流程在漫談LiteOS系列中已經介紹過,這里只看低91行,運行到main函數,接下來程序將從main函數開始執行。

接下來看main函數,在main函數中,從硬件初始化到內核初始化,之后初始化串口,再到link_test()函數,在該函數中創建了一個任務,其入口函數為Link_main函數。

在Link_main函數的最后調用了一個函數為standard_app_demo_main(),根據IDE查找我們可以看到,在項目中存在大量的該同名函數,那么編譯器如何知道具體執行的是哪一個呢,可以看到.config文件中的user_demo宏定義使能的是hello_world_demo,因此執行的是hello_world_demo中的standard_app_demo_main()函數,從而根據其內部創建的任務以及入口函數實現了打印Hello World! This is BearPi!。接下來我們進行傳感器的移植。

2 傳感器移植

首先我們可以看到在該LiteOS代碼中已經包含了大量的傳感器代碼,這里以E53_SC1為例,當然這些傳感器已經和BearPi開發板已經適配好,如果您想使用自己特定的傳感器,可以首先將傳感器與開發板進行一定的移植,包括引腳以及GPIO的綁定等等。

首先需要將傳感器文件路徑添加到編譯路徑中,以使得編譯器可以找到該代碼,在userdemo.mk中配置傳感器文件的相關路徑,在該文件中找到hello_world_demo部分添加文件路徑。具體如下圖83-84行,接着在源文件和頭文件變量中添加自定義的變量,user_sensor_src和user_hardware_inc,當然這里如果您直接定義名稱為編譯路徑中已經存在的user_hardware_src和user_hardware_inc,則無需添加相關代碼。

首先我們需要添加傳感器頭文件到helloworld_demo.c中,以實現后面的相關函數調用。

#include    "E53_SC1.h"

之后調用結構體,以便后續打印數據。

E53_SC1_Data_TypeDef    E53_SC1_Data;

然后在hello_world_demo.c文件中,添加傳感器數據的任務函數。

static int app_sensor_entry()
{
    Init_E53_SC1();
    while (1)
    {
        E53_SC1_Read_Data();
        printf("luminance:%d\n", (int)E53_SC1_Data.Lux);
        osal_task_sleep(2*1000);
    }
    return 0;
 
}

在主函數中創建傳感器任務函數。

osal_task_create("app_sensor_entry", app_sensor_entry, NULL, 0x400,NULL,2);
osal_task_sleep(2*1000);

具體如下圖

之后我們編譯燒錄,通過串口驗證一下傳感器的移植是否正確。

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM