摘要:本文基于小熊派開發板簡單介紹了如何在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);
具體如下圖

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

點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/187531.html
標籤:其他
上一篇:5G是什么?5G的關鍵技術簡介
下一篇:CC2530 定時器應用
