【XR806開發板試用】全網首發,對接騰訊云平臺的血淚史

1.前面的話

在上次連夜肝出了華為云平臺的帖子:https://aijishu.com/a/1060000000287434
之后,論壇里的反響平平,好評沒有,點贊更無,抱著已完成任務成功白嫖一塊板子的心態,把板子收在了盒子里,第二天,助手小姐姐跟我說為何不把騰訊云的做了,對于這個要求我其實是拒絕的,但是小助手姐姐說寫的好的話,會有獎勵,當時我就笑了,把我當什么人了,我缺你的獎勵嗎,我現在就想問一句:什么時候能發貨?

之所以要對接騰訊云其實是覺得騰訊云真的蠻好的(這句話不要寫,包括括號),雖然本人跟騰訊沒有一毛錢的關系,甚至曾找大佬內推簡歷后面換來一句已經招到了的回答,但是依然不能因此就否定它,他那清晰的文檔,優雅的sdk代碼,使我不能抗拒.
好了,說一點小笑話,調節一下氣氛,進入正題

2.好戲開場了

按照上一篇對接華為云的套路,我們首先來找官方sdk,茫茫文檔中給我看到了那熟悉的身影:
7855bce1-bbdc-48ab-906a-255bfae5a361-image.png
文檔地址在這,拿走不謝:
https://cloud.tencent.com/document/product/1081/48356
把sdk下載之后,熟練的放進thirdparty文件夾,這個時候依然要看文檔,因為有些函數需要自己實現,具體是哪些呢,在這里:
https://cloud.tencent.com/document/product/1081/48389
這篇文檔寫了,我們要實現里面的這些接口,此處列舉一二:
5b560673-4c25-4f3a-8bc3-ed84c53d9e0c-image.png
1675985a-cdb1-4135-aa34-15def710b44f-image.png
仔細一看,霍,好家伙還不少呢,但是不怕,都是打工人,誰怕誰啊,二話不說我就寫,結果就給我給寫出來了:
c01105d8-7cda-4bae-9879-28d40a7d73fd-image.png
,寫出來這些后就可以準備編譯了嗎?
nonono,我們還沒做BUILD.gn文件呢,話不多說,直接教你寫:

# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.import("//build/lite/config/component/lite_component.gni")
import("//build/lite/ndk/ndk.gni")config("qcloud_sdk_config") {include_dirs = ["sdk_src/internal_inc","sdk_src/library","include","include/exports","//kernel/liteos_m/kernel/include",# "//third_party/cmsis","//third_party/mbedtls/include","//third_party/mbedtls/include/mbedtls",]}cflags = [ "-Wno-unused-variable" ]cflags += [ "-Wno-unused-but-set-variable" ]cflags += [ "-Wno-unused-parameter" ]cflags += [ "-Wno-sign-compare" ]cflags += [ "-Wno-unused-function" ]cflags += [ "-Wno-return-type" ]qcloud_sdk_sources = ["sdk_src/network/socket/network_socket.c","sdk_src/network/tls/network_tls.c","sdk_src/network/network_interface.c","sdk_src/utils/utils_list.c","sdk_src/utils/utils_base64.c","sdk_src/utils/qcloud_iot_ca.c","sdk_src/utils/utils_aes.c","sdk_src/utils/utils_getopt.c","sdk_src/utils/utils_hmac.c","sdk_src/utils/utils_md5.c","sdk_src/utils/utils_sha1.c","sdk_src/utils/json_parser.c","sdk_src/utils/json_token.c","sdk_src/utils/string_utils.c","sdk_src/utils/utils_ringbuff.c","sdk_src/utils/qcloud_iot_log.c","sdk_src/utils/qcloud_iot_device.c","sdk_src/utils/utils_timer.c","sdk_src/protocol/mqtt/mqtt_client_common.c","sdk_src/protocol/mqtt/mqtt_client_connect.c","sdk_src/protocol/mqtt/mqtt_client_net.c","sdk_src/protocol/mqtt/mqtt_client_publish.c","sdk_src/protocol/mqtt/mqtt_client_subscribe.c","sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c","sdk_src/protocol/mqtt/mqtt_client_yield.c","sdk_src/protocol/mqtt/mqtt_client.c","sdk_src/services/data_template/data_template_action.c","sdk_src/services/data_template/data_template_client.c","sdk_src/services/data_template/data_template_client_common.c","sdk_src/services/data_template/data_template_client_json.c","sdk_src/services/data_template/data_template_client_manager.c","sdk_src/services/data_template/data_template_event.c","platform/os/liteos_m/HAL_Device_liteos_m.c","platform/os/liteos_m/HAL_OS_liteos_m.c","platform/os/liteos_m/HAL_TCP_liteos_m.c","platform/os/liteos_m/HAL_Timer_liteos_m.c",# "./os/liteos_m/HAL_TLS_mbedtls_liteos_m.c",# "./tls/mbedtls/HAL_DTLS_mbedtls.c","platform/tls/mbedtls/HAL_TLS_mbedtls.c",]lite_library("qcloud_sdk_static") {target_type = "static_library"sources = qcloud_sdk_sourcespublic_configs = [ ":qcloud_sdk_config" ]
}lite_library("qcloud_sdk_shared") {target_type = "shared_library"sources = qcloud_sdk_sourcespublic_configs = [ ":qcloud_sdk_config" ]
}ndk_lib("qcloud_ndk") {if (board_name != "hi3861v100") {lib_extension = ".so"deps = [":qcloud_sdk_shared"]} else {deps = [":qcloud_sdk_static"]}head_files = ["//third_party/iot_link/network/mqtt/paho_mqtt/paho"]
}

整完之后就可以嘗試一下有沒有錯誤了.

3.在main里面寫邏輯,處理事情

我們把官方sdk里面的點燈demo拿過來,直接新建一個demo文件夾,把文件放進去:
b0f9937d-178d-4280-adb9-2953e36dcb34-image.png
自己寫好BUILD.gn,跟之前華為云對接一個套路噻,大家這么聰明,不用我多說了
然后在sample里面的sdk把這個文件夾開啟編譯:
c6dbed4c-947e-4205-8733-aa30733e4033-image.png
這樣就完成了代碼的編寫了,是不是很快樂呀

4.開始編譯(血與淚的旅程)

4.1首先出場的是UTILS_LIST

這個utils_list.h不能被系統識別的問題還真是頭疼,經過兩小時+的奮戰,被我發現系統也有一個utils_list.h錯誤(忘了截圖了),這就有點不講武德了,竟然與代碼的友好協商,我這樣改:
ee10077f-034c-476e-992e-287f5088c9c1-image.png
終于把這個小家伙趕走了

4.2 緊跟著MBEDTILS當然不讓,是迎頭痛擊

編譯出來有個mbedtls的錯誤(依然忘了截圖),后面分析出來是某些編譯宏沒搞對吧,然后我一番查找,就把qcloud里面帶的mbedtls里面的config.h拷貝出去,放到系統自帶的mbedtls里面:
937f8f71-a57a-4a91-9804-05dc2bf39d39-image.png
結果,當然是沒用了,這我就納悶了,難道系統的mbedtls庫是提前編好的,不能更改了,帶著這個疑問,我就翻遍了系統自帶的文件,結果被我找到一個東西:
e4237a11-eb20-459f-9891-913f9a1dfd04-image.png
device/xradio/xr806/xr_skylark/src/net/mbedtls-2.16.8這里有一個mbedtls的源碼,這下我就坐不住了,趕緊看看這個源碼有沒有參與編譯,結果終于被我發現端倪,
9a456d13-44d6-4a2b-953b-5dd3f430d2d6-image.png
這里指定了一個變量叫做MBEDTLS_CONFIG_FILE,我就說我怎么老看到mbedtls有這種代碼:
74e08fc1-e2df-4177-83b4-25fb33f7a000-image.png
yes, 就說他了,說明他把config文件定向到了一個叫做<config-xr-mini-cliserv.h>這個文件了, 那可就方便了,我改吧device/xradio/xr806/xr_skylark/include/net/mbedtls-2.16.8/mbedtls/configs/config-xr-mini-cliserv.h
終于是把mbedtls的錯誤給整好了,花了我又是2h+,我只想問人的一生有幾個2h不說了,繼續編譯,這里需要注意的是,因為我們改的是系統的lib,所以需要在device/xradio/xr806/xr_skylark$,目錄執行 make lib -j,讓系統重新生成庫

4.3 內存不足讓我心如死灰

終于是把兩個大的攔路虎給搞定了,真開心,雖然時間已經晚上10點多了我可一點都不困喲,想著馬上就可以大功告成贏取助手小姐姐
咳咳,呃,親手發送的禮品了,迫不及待得編譯,運行,結果剛上來就是悶頭一棍,
執行wifi掃描都內存不:
,28880051-4d07-416b-97fb-b14e086b73c3-image.png 雖然我知道這mbedtls費內存但也不至于到這步田地吧,連wifi掃描都不讓那板子不廢了嘛,苦于對芯片不熟,內存方面的資料是一點沒有,于是我當機立斷在論壇里面發帖控訴為什么只有這么一點內存:
https://bbs.aw-ol.com/topic/854/wifi掃描提示內存不足-288kb可用的有多少?_=1640440348789
想著第二天應該有人解答吧,結果等今天下午一看,沒人理我,想了一下,小姐姐這么熱情的邀請我把騰訊云對接出來,我得兌現我的承諾呀,繼續磕吧.
突然我想到了我這個工程是官方的一個叫wlan_ble的proect上面弄個,會不會是ble藍牙占了內存呀,因為是sram運行,會把code也給拷過來嘛
想到這里,我的毛孔全部都舒張起來了,一股頭皮發麻的感覺涌上腳心,這就弄.于是我不慌不忙的就把ble給禁了,在device/xradio/xr806/xr_skylark$目錄執行make menuconfig:
2b7d7660-4f5d-4a8e-9389-15d0efe1f57e-image.png
小子還想陰我老人家,昨天是我大意了,沒有閃,這招就送你下去.
弄起來一跑,爽歪歪

5.就這樣,騰訊云就對接成功了

就這樣,一小時之前我終于成功把demo跑了起來:
看個動圖一睹為快吧:
對接騰訊云-00_00_02-2021_12_25_22_49_50.gif
這是網頁調試的效果,其實如果就這些還不足以我說騰訊云多好,還有一個東西就是騰訊連連,這個東西很有用,大家可以了解一下

6.總結

對接云平臺其實說起來一點不復雜,難的在于各種細節,跟系統,編譯器,sdk斗智斗勇,其樂無窮.
其實說起結果來,那是很開心了,但是過程那是相當曲折,其實我本人已經對接過很多次騰訊云了,這次之所以能在短時間內把騰訊云這個整明白也得益于以前的經驗,所以積累很重要.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711239.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙開發之組件間方法傳遞(方法回調)

目前使用的方式有兩種&#xff0c;一種是父子組件方法傳遞&#xff0c;一種是系統提供的emitter。 一、父子組件方法傳遞 1.1 使用場景 當我們父組件中有一個方法&#xff0c;需要子組件在修改完數據后回調父組件的方法時候。有點抽象&#xff1a;這樣解釋一下&#xff0c;父…

深度學習-Pytorch運算的基本數據類型

深度學習-Pytorch模型運算的基本數據類型 用pytorch構建模型&#xff0c;并訓練模型&#xff0c;得到一個優化的模型&#xff0c;那么模型構造的數據類型怎樣的&#xff1f; 數據分析 數據分析-Pandas如何轉換產生新列 數據分析-Pandas如何統計數據概況 數據分析-Pandas如…

Three.js-04軌道控制器

1.導入 說明&#xff1a;相機圍繞目標進行軌道運動。也就是可以通過鼠標拖拽進行移動視角。 import { OrbitControls } from three/addons/controls/OrbitControls.js; 2.使用 說明&#xff1a;構造controls對象&#xff0c;再調用update方法&#xff1b;為了使效果更為明顯…

十二、Qt自定義Widget組件、靜態庫與動態庫

一、自定義Widget組件 1、自定義Widget組件 使用步驟采用提升法&#xff08;promotion&#xff09;重新定義paintEvent事件 2、實現程序 &#xff08;1&#xff09;創建項目&#xff0c;基于QWidget &#xff08;2&#xff09;添加類&#xff0c;為Widget組件提升類 #inclu…

Spring Boot 集成 Quartz 實現定時任務

Spring Boot 集成 Quartz 實現定時任務 在Spring Boot應用中&#xff0c;我們經常需要執行一些定時任務&#xff0c;如每天發送報表、定時更新數據庫等。雖然Spring Framework自帶了一個簡單的定時任務功能&#xff08;Scheduled&#xff09;&#xff0c;但在一些復雜場景下&a…

Vue3 在SCSS中使用v-bind

template 先創建一個通用的頁面結構 <template><div class"v-bubble-bg"></div> </template>js 在JS中先對需要用的數據進行定義&#xff1a; 可以是參數&#xff0c;也可以是data <script setup>const props defineProps({bgCol…

cURL 命令中有$的問題

最近學會使用cURL來快速訪問網絡資源&#xff0c;確實很好用&#xff0c;但在使用過程中遇到一個奇怪的問題&#xff0c;多方查詢也沒有找到現成答案&#xff0c;最后經摸索終于解決&#xff0c;特記錄如下。 我們一般訪問網站使用Chrome瀏覽器獲取的cURL命令大概是這個樣子&am…

gpt批量原創文章生成器,不限制內容的生成器

在當今的數字化時代&#xff0c;內容創作是網站持續發展的重要組成部分。然而&#xff0c;對于擁有大量內容需求的網站來說&#xff0c;手動創作文章可能會耗費大量時間和精力。為了解決這一問題&#xff0c;許多GPT&#xff08;生成式預訓練模型&#xff09;文章生成軟件應運而…

【重溫設計模式】外觀模式及其Java示例

設計模式及外觀模式介紹 在編程世界中&#xff0c;設計模式就如同自然界的法則&#xff0c;是一種反復出現在各種情況下的通用解決方案。設計模式可以分為創建型、結構型和行為型三大類&#xff0c;每一類都有其獨特的應用場景和解決問題的方式。今天&#xff0c;我們要重點解…

【HbuilderX】 uniapp實現 android申請權限 和 退出app返回桌面

目錄 android申請權限&#xff1a; 監聽用戶是否開啟權限或關閉權限&#xff1a; 退出app返回桌面&#xff1a; android申請權限&#xff1a; 首先在 manifest.json 內添加你所需要用到權限 添加權限插件 permission.js 一次就好1/權限插件 - Gitee.comhttps://gitee.co…

數據庫分庫分表中間件選擇

目前分庫分表的中間件有三種設計思路&#xff0c;分別是&#xff1a; 采用分散式架構&#xff0c;適用于用Java開發的高性能輕量級OLTP應用程序&#xff0c;以Sharding-JDBC為代表。采用中間層Proxy架構&#xff0c;提供了靜態輸入和所有語言支持&#xff0c;適用于OLAP應用程…

MATLAB環境下基于小波和濾波器組的音頻信號處理

音頻分類研究的重點&#xff0c;一方面在于音頻特征的提取和選擇&#xff0c;通常來說數據集和特征集在分類系統中有著極為重要的作用&#xff0c;離開了對數據集的處理、對特征集中特征的提取和選擇&#xff0c;分類結果必將產生巨大誤差。對于提高音頻分類系統的分類準確度和…

vulnhub-----Hackademic靶機

文章目錄 1.C段掃描2.端口掃描3.服務掃描4.web分析5.sql注入6.目錄掃描7.寫馬php反彈shell木馬 8.反彈shell9.內核提權 1.C段掃描 kali:192.168.9.27 靶機&#xff1a;192.168.9.25 ┌──(root?kali)-[~] └─# arp-scan -l Interface: eth0,…

Docker容器(3)單容器管理

一、單容器 1.1概念簡介 Docker三個重要概念: 倉庫(Repository); 鏡像(Image); 容器(Container). *Docker的三個重要概念是倉庫(Repository)、鏡像(Image)和容器(Container)**。具體如下&#xff1a; **鏡像(Image)**&#xff1a;Docker鏡像是創建容器的基礎&#xff0c;它類似…

『NLP學習筆記』圖解Word2vec(The Illustrated Word2vec)

圖解Word2vec(The Illustrated Word2vec) 文章目錄 一. 詞嵌入(word embedding)1.1. 個性嵌入:你是什么樣的人?1.2. 詞嵌入1.3. 類比1.4. 語言模型1.5. 語言模型訓練1.6. 顧及兩頭(上下文)1.7. Skip-gram模型1.8. 重新審視訓練過程1.9. 負例采樣1.10. 基于負例采樣的Skip…

Maven面試題

以下是一些關于Maven的經典面試題以及它們的答案&#xff1a; 1、什么是Maven&#xff1f; Maven是一個項目管理工具&#xff0c;用于構建、管理、發布Java項目。 2、為什么要使用Maven而不是手動管理項目依賴&#xff1f; Maven提供了依賴管理、統一的構建、打包、文檔生…

Linux DKMS

DKMS&#xff08;Dynamic Kernel Module Support&#xff09;是一個框架&#xff0c;用于構建和安裝內核模塊。它允許第三方內核模塊在系統內核升級時自動重新構建和安裝&#xff0c;從而確保這些模塊與新內核版本兼容。 DKMS的工作原理是將內核模塊的源代碼和安裝腳本存儲在一…

Google索引腳本:快速索引你的網站

公眾號&#xff1a;【可樂前端】&#xff0c;每天3分鐘學習一個優秀的開源項目&#xff0c;分享web面試與實戰知識。 每天3分鐘開源 hi&#xff0c;這里是每天3分鐘開源&#xff0c;很高興又跟大家見面了&#xff0c;今天介紹的開源項目簡介如下&#xff1a; 倉庫名&#xff1…

園區停車管理系統的設計與實現

** &#x1f345;點贊收藏關注 → 私信領取本源代碼、數據庫&#x1f345; 本人在Java畢業設計領域有多年的經驗&#xff0c;陸續會更新更多優質的Java實戰項目希望你能有所收獲&#xff0c;少走一些彎路。&#x1f345;關注我不迷路&#x1f345;** 一 、設計說明 1.1 選題…

【前端素材】推薦優質在線通用果蔬商城電商網頁eStore平臺模板(附源碼)

一、需求分析 1、系統定義 通用果蔬網站是指專門提供各類果蔬產品展示和銷售的在線平臺。它將不同種類的新鮮水果、蔬菜、干果、堅果等聚集在一起&#xff0c;為消費者提供方便、快捷的購物渠道。 2、功能需求 通用果蔬網站是指專門提供各類果蔬產品展示和銷售的在線平臺。…