日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于代碼抽取時的移植說明

本文介紹以獲取MQTT上云OTA固件升級能力為例,描述在Windows開發(fā)主機(jī)上的SDK移植過程。

背景信息

對于使用KEIL、IAR進(jìn)行設(shè)備開發(fā)的用戶,不能使用Make的方式編譯SDK。此時用戶可以配置需要的SDK功能,使用SDK提供的抽取工具將相應(yīng)的代碼抽取出來,然后將源文件添加到開發(fā)工具中的項目后進(jìn)行編譯。

對于使用Linux作為開發(fā)環(huán)境的用戶,也可以使用本方式將代碼抽取出來之后進(jìn)行交叉編譯。

設(shè)備端的整體開發(fā)過程如下所示。

image..png

SDK功能配置

在本示例主要介紹MQTT上云和OTA固件下載功能。

在SDK的根目錄雙擊config.bat腳本運行,彈出如下功能選擇界面(相當(dāng)于Ubuntu16.04 64位主機(jī)上的make menuconfig命令)。

  • 按下空格鍵可以選中或者失效相關(guān)功能,使用鍵盤的上下鍵來在不同功能之間切換。

  • 您可使用方向鍵將高亮光條移到選項上,再按鍵盤上的h按鍵,將出現(xiàn)幫助文本,對選項進(jìn)行詳細(xì)說明。

例如:

  • 如果編譯環(huán)境有自帶標(biāo)準(zhǔn)頭文件<stdint.h>,請使能選項PLATFORM_HAS_STDINT

  • 如果目標(biāo)系統(tǒng)上運行有嵌入式操作系統(tǒng),請使能選項PLATFORM_HAS_OS

  • 如果目標(biāo)系統(tǒng)上支持mallocfree。的動態(tài)內(nèi)存管理能力,請使能選項 PLATFORM_HAS_DYNMEM

在本例中,我們需要MQTT上云和OTA固件下載的功能,所以需要如下選擇:

  • FEATURE_MQTT_COMM_ENABLED:對應(yīng)MQTT上云功能。

  • FEATURE_OTA_ENABLED:對應(yīng)OTA固件下載功能。

將光標(biāo)移動到窗口底部的<Exit>上,在彈出的保存對話框中選擇<Yes>存盤退出配置界面。

SDK代碼抽取

通過以上步驟,SDK根目錄下的make.settings功能配置文件的內(nèi)容發(fā)生變化,對應(yīng)到用戶所選擇的功能,如下所示:

FEATURE_MQTT_COMM_ENABLED=y
FEATURE_MQTT_DEFAULT_IMPL=y
# FEATURE_MQTT_PRE_AUTH is not set
FEATURE_MQTT_DIRECT=y
...
FEATURE_OTA_ENABLED=y
            

其中對應(yīng)所選功能點的開關(guān)FEATURE_MQTT_COMM_ENABLEDFEATURE_OTA_ENABLED都已被設(shè)置為y,表示已打開。

運行代碼抽取工具 extract.bat,該腳本運行之后的界面如下所示:

抽取后的代碼說明

如同config.bat腳本的輸出是make.settings文件,extract.bat腳本的輸入是make.settings,輸出是output文件。

單擊output文件,查看其詳細(xì)內(nèi)容。output目錄結(jié)構(gòu)如下:

output/
+-- eng
|   +-- certs
|   +-- dev_model
|   +-- dev_sign
|   +-- infra
|   +-- mqtt
|   +-- ota
|   +-- wrappers
|       +-- external_libs
+-- examples
            

其中output/eng目錄就對應(yīng)SDK相關(guān)功能抽取出的代碼,output/example對應(yīng)使用SDK中API接口的示例程序。

文件或目錄

說明

output/eng

對應(yīng)SDK和支撐SDK的HAL接口。

output/eng/infra

內(nèi)容會隨著被選擇的功能而變化。

output/eng/certs

存放驗證阿里云IoT服務(wù)端的根證書,使能TLS傳輸時出現(xiàn)。

output/eng/xxx

對應(yīng)當(dāng)前被選中的xxx功能的實現(xiàn)源碼,其中output/eng/xxx/xxx_api.h列出了這個功能的API。

output/example/xxx

對應(yīng)當(dāng)前被選中的xxx功能的示例程序,演示了如何用這個功能的API編寫業(yè)務(wù)邏輯。

在本例中,eng下面的目錄如下所示:

這些功能點的例子程序都在output/examples文件中

對接HAL接口或者wrapper接口

SDK運行時對外界所需要的依賴都以HAL_XXX或者wrapper_xxx進(jìn)行定義,并放于文件output\eng\wrappers\wrapper.c中,用戶需要對其中的函數(shù)進(jìn)行實現(xiàn)。

對每個HAL_XXX接口都有詳細(xì)的注釋和文檔,您可參考SDK根目錄下的wrappers子目錄中的wrapper參考實現(xiàn)。

抽取出來的代碼使用Make進(jìn)行編譯

用戶也可能使用GNU Make對抽取出來的代碼進(jìn)行編譯,因此在抽取出來的目錄下仍然提供了一個示例的makefile,make之后將會生成以下內(nèi)容:

二進(jìn)制文件

說明

產(chǎn)生方式

libiot_sdk.a

SDK主庫文件,提供所有形如IOT_XXX的用戶API。

output/eng下除了output/wrapper/*的目錄產(chǎn)生。

libiot_hal.a

支撐SDK的HAL庫,提供形如HAL_XXX的底層接口。

output/eng/wrappers下源文件產(chǎn)生,其中output/eng/wrappers/wrapper.c需要用戶填寫。

xxx-example

功能點的例子程序。

output/examples/xxx下源文件產(chǎn)生,需要通過output目錄下運行make prog命令編譯。

使用C++編譯器編譯時錯誤的處理

C++編譯器在編譯的時候判斷比gcc判斷更加嚴(yán)格,如果編譯出錯,請進(jìn)行如下編譯。

增加 -fpermissive -w, 去掉 -ansi -Wdeclaration-after-statement
            

總結(jié)

圖中紅色文字表示用戶執(zhí)行動作,綠色文字表示用戶得到的產(chǎn)物,過程如下圖所示。

圖中左上角是移植過程的開始,到右下角是移植過程的結(jié)束,以獲得目標(biāo)設(shè)備架構(gòu)的二進(jìn)制庫libiot_sdk.alibiot_hal.a為標(biāo)志。

整個SDK的抽取都已經(jīng)完畢,您可以將output/eng下的所有目錄加入自己的工程中編譯和集成,并參考output/examples下的例程開始調(diào)用SDK提供的API。