共計 1798 個字符,預計需要花費 5 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān)如何在 LiteOS 中移植傳感器,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
1 hello world
相信大家無論在學習編程語言開始的第一個函數(shù)應(yīng)該是 HelloWorld,丸趣 TV 小編將從 hello_world_demo 為大家介紹如何實現(xiàn)傳感器的移植工作。
首先我們創(chuàng)建 HelloWorld 工程,選擇 STM32_BearPi → hello_world_demo,工程名稱可以自定義。
創(chuàng)建之后我們點擊編譯,然后燒錄到開發(fā)板,打開 VSCode-IoTLink 的串口,并按照圖中進行設(shè)置串口連接參數(shù),之后按鍵 Reset,可以看到串口打印如下圖所示。
首先來介紹一下代碼運行的簡單流程,之前在漫談 LiteOS 系列中介紹過 LiteOS 的啟動流程,我們知道在程序下載到開發(fā)板之后,首先會按一下 Reset 按鍵進行開發(fā)板的啟動,因此在開發(fā)板上電之后執(zhí)行的第一個函數(shù)就是 ReSet_Handler 函數(shù)。
首先找到對應(yīng)的啟動文件 los_startup.S 文件(根據(jù)使用的操作系統(tǒng)以及板子 MCU 系列查找文件目錄),可以看到其由匯編語言編寫,具體啟動流程在漫談 LiteOS 系列中已經(jīng)介紹過,這里只看低 91 行,運行到 main 函數(shù),接下來程序?qū)?main 函數(shù)開始執(zhí)行。
接下來看 main 函數(shù),在 main 函數(shù)中,從硬件初始化到內(nèi)核初始化,之后初始化串口,再到 link_test() 函數(shù),在該函數(shù)中創(chuàng)建了一個任務(wù),其入口函數(shù)為 Link_main 函數(shù)。
在 Link_main 函數(shù)的最后調(diào)用了一個函數(shù)為 standard_app_demo_main(),根據(jù) IDE 查找我們可以看到,在項目中存在大量的該同名函數(shù),那么編譯器如何知道具體執(zhí)行的是哪一個呢,可以看到.config 文件中的 user_demo 宏定義使能的是 hello_world_demo, 因此執(zhí)行的是 hello_world_demo 中的 standard_app_demo_main() 函數(shù),從而根據(jù)其內(nèi)部創(chuàng)建的任務(wù)以及入口函數(shù)實現(xiàn)了打印 Hello World! This is BearPi!。接下來我們進行傳感器的移植。
2 傳感器移植
首先我們可以看到在該 LiteOS 代碼中已經(jīng)包含了大量的傳感器代碼,這里以 E53_SC1 為例,當然這些傳感器已經(jīng)和 BearPi 開發(fā)板已經(jīng)適配好,如果您想使用自己特定的傳感器,可以首先將傳感器與開發(fā)板進行一定的移植,包括引腳以及 GPIO 的綁定等等。
首先需要將傳感器文件路徑添加到編譯路徑中,以使得編譯器可以找到該代碼,在 userdemo.mk 中配置傳感器文件的相關(guān)路徑,在該文件中找到 hello_world_demo 部分添加文件路徑。具體如下圖 83-84 行,接著在源文件和頭文件變量中添加自定義的變量,user_sensor_src 和 user_hardware_inc,當然這里如果您直接定義名稱為編譯路徑中已經(jīng)存在的 user_hardware_src 和 user_hardware_inc,則無需添加相關(guān)代碼。
首先我們需要添加傳感器頭文件到 helloworld_demo.c 中,以實現(xiàn)后面的相關(guān)函數(shù)調(diào)用。
#include E53_SC1.h
之后調(diào)用結(jié)構(gòu)體,以便后續(xù)打印數(shù)據(jù)。
E53_SC1_Data_TypeDef E53_SC1_Data;
然后在 hello_world_demo.c 文件中,添加傳感器數(shù)據(jù)的任務(wù)函數(shù)。
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;
}
在主函數(shù)中創(chuàng)建傳感器任務(wù)函數(shù)。
osal_task_create(app_sensor_entry , app_sensor_entry, NULL, 0x400,NULL,2);
osal_task_sleep(2*1000);
具體如下圖
之后我們編譯燒錄,通過串口驗證一下傳感器的移植是否正確。
看完上述內(nèi)容,你們對如何在 LiteOS 中移植傳感器有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。