STM32L431使用TencentOS?tiny操作系統(tǒng)連接騰訊物聯(lián)網(wǎng)開發(fā)平臺
去年騰訊為了宣傳自己針對物聯(lián)網(wǎng)的開源操作系統(tǒng)TencentOS tiny,舉辦了一場試用活動,當(dāng)時幸運獲得一塊,但是當(dāng)時公司任務(wù)較重,一直吃灰。
板子實物就這樣,沒啥好介紹的,都是基礎(chǔ)的外設(shè),如今閑來無事,再加上眾多大神完善了git庫,使開發(fā)變得容易,所以索性掏出來玩一下。這次主要實現(xiàn)以下幾個功能:
在騰訊物聯(lián)網(wǎng)平臺創(chuàng)建項目和產(chǎn)品(此處為智能燈)
通過平臺控制燈
使用騰訊連連微信小程序控制燈
一.上手體驗helloworld
騰訊物聯(lián)網(wǎng)終端操作系統(tǒng) TencentOS tiny 簡介
騰訊物聯(lián)網(wǎng)終端操作系統(tǒng)(TencentOS tiny)是騰訊面向物聯(lián)網(wǎng)領(lǐng)域開發(fā)的實時操作系統(tǒng),具有低功耗,低資源占用,模塊化,安全可靠等特點,可有效提升物聯(lián)網(wǎng)終端產(chǎn)品開發(fā)效率。TencentOS tiny 提供精簡的 RTOS 內(nèi)核,內(nèi)核組件可裁剪可配置,可快速移植到多種主流 MCU 及模組芯片上。而且,基于RTOS內(nèi)核提供了豐富的物聯(lián)網(wǎng)組件,內(nèi)部集成主流物聯(lián)網(wǎng)協(xié)議棧(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物聯(lián)網(wǎng)終端設(shè)備及業(yè)務(wù)快速接入騰訊云物聯(lián)網(wǎng)平臺。
這是來源于官網(wǎng)的介紹,到底好不好還得看使用,對于我們新手,直接從源碼開始,方便體驗上手:TencentOS_ting源碼倉庫。
從倉庫拉取下來后文件夾目錄如下:
這里簡單介紹幾個主要的文件夾:
board文件夾這個文件夾中包含了目前為止TencentOS tiny 適配的開發(fā)板合集,在測試學(xué)習(xí)的時候非常好用,基本上熱門的開發(fā)板均有適配。如果自己適配了新的開發(fā)板可以在開發(fā)完成后提交合并上去,為后續(xù)的開發(fā)者提供便利,到手即用。目前已適配很多。
device文件夾
該文件夾為TencentOS tiny支持的通信模組,包括了NB-IOT,wifi,2G,4G,lora?;緷M足開發(fā)需求,使用很方便。
components文件夾
組件文件夾,包括上云組件,文件系統(tǒng),安全組件,其中上云組件集合了各種常用的上云方式:
測試第一個代碼:
根據(jù)自己的開發(fā)板在encentOS-tiny\board文件夾下尋找相對應(yīng)的開發(fā)板,我這里選擇TencentOS_tiny_EVB_MX_Plus,進(jìn)入文件夾,打開KEIL文件,打開hello_world工程。
工程結(jié)構(gòu):
主函數(shù)中初始化了開發(fā)板的外設(shè)和任務(wù)的創(chuàng)建啟動
board_init();初始化了系統(tǒng)的時鐘,UART,定時器和OLED的顯示,所以編譯燒錄后可以在屏幕上顯示相關(guān)信息。
hello_world.c文件主要是創(chuàng)建任務(wù),以及任務(wù)之間的調(diào)用。可以在串口觀察任務(wù)運行情況
#define?TASK1_STK_SIZE??????????1024void task1(void *arg);osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);#define TASK2_STK_SIZE 1024void task2(void *arg);osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE);#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u#define TASK3_STK_SIZE 512void task3(void *arg);#endifvoid task1(void *arg){#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0u osThreadId task_dyn_created; osThreadDynamicDef(task3, osPriorityNormal, 1, TASK3_STK_SIZE); task_dyn_created = osThreadCreate(osThread(task3), NULL);int count = 0;#endifwhile (1) {printf("###I am task1\r\n"); osDelay(2000);#if TOS_CFG_TASK_DYNAMIC_CREATE_EN > 0uif (count == 3) {printf("###I am task1, kill the task3(dynamic created)\r\n"); osThreadTerminate(task_dyn_created); }#endif }}void task2(void *arg){while (1) {#if TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN > 0uk_err_t rc;int depth; rc = tos_task_stack_draught_depth(K_NULL,