日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TencentOS-Tiny在苹果MacOS初上手

發布時間:2024/1/8 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TencentOS-Tiny在苹果MacOS初上手 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 序言
    • 環境
    • 開始
      • 源碼
      • 工具下載
      • 安裝和使用
      • 配置
        • 生成內核文件夾Tiny
        • 在IDE中添加相關的引用
        • 添加代碼
        • 編譯

序言


即將進入萬物互聯的時代,身邊將會涌現出一大批物聯網設備。低成本+低功耗+聯網將是最重要的需求。作為一名習慣了Linux上開發軟件的程序猿,深感壓力。適逢國產物聯網正大力宣傳,借此東風開始學習物聯網操作系統上的開發工作。
未來將記錄幾篇學習的文章,即為了沉淀知識,也為了給后進場的程序猿們提供一條道路。希望自己能夠堅持下去,實現一點點價值。

環境

如無特別聲明,均是在蘋果MacOS下進行。


開始

源碼

TencentOS-Tiny 是騰訊開發的一款物聯網操作系統,相關基礎知識和介紹就不啰嗦,直接上手源碼。
源碼位置在https://github.com/Tencent/TencentOS-tiny.git
進入自己的工作目錄,git clone https://github.com/Tencent/TencentOS-tiny.git
源碼體積很小,使用命令 du -sh看到,一共635M
源碼結構比較簡潔:

TencentOS-tiny git:(master) ? tree -L 1 . ├── LICENSE ├── README.md ├── arch ├── board ├── components ├── devices ├── doc ├── examples ├── kernel ├── net ├── osal ├── platform ├── test └── tools

首先就進入doc目錄,查看相關的文檔。

doc git:(master) ? ls 1.TencentOS tiny產品簡介.md TencentOS-tiny-porting-gcc.md 2.TencentOS tiny購買指南_免費版.md TencentOS-tiny-porting-iar.md 3.TencentOS tiny快速入門.md TencentOS-tiny-porting-keil.md 4.TencentOS-tiny開發指南.md TencentOS-tiny-代碼目錄說明.md 5.TencentOS-tiny-SDK文檔.md TencentOS-tiny定制開發板入門指南.pdf 6.TencentOS tiny常見問題.md code 7.TencentOS tiny詞匯表.md img 8.TencentOS-tiny對接騰訊云IoTHub開發指南.md picture TencentOS-tiny-porting(MacOS_STM32CubeIDE).md

作為MacOS,我最關心的就是如何快速編譯系統,并在系統中愉快的開發軟件。所以第一步,先查閱《TencentOS-tiny-porting(MacOS_STM32CubeIDE).md》

工具下載

看了內容,發現需要下載工具 STM32CubeIDE 于是到官網進行下載。不過下載前需要注冊帳號,這個沒辦法,先注冊一個。這里我放到百度云盤上了,鏈接:https://pan.baidu.com/s/1js586SiS-n4Vx025TrYuLw 密碼:qs41 這個軟件比較大,我下載的版本是1.0.2,下載好了大約 881.6M。

安裝和使用

下載好了則開始進行安裝,這個很簡單。簡單說一下,這個IDE是基于Eclipse進行開發的,很慶幸我之前使用過Eclipse做過java和C,還用它做過Android開發,算是輕車熟路。
進了界面,會選擇一個工作目錄,未來創建的項目都會存儲到這個文件夾下,這里我選了默認目錄

進入到主界面之后,就可以看到歡迎界面
這里點擊左邊藍色按鈕 開始一個新的STM32項目。這時會出現我第一個坑:它需要更新下載文件。不知道什么情況,我一直沒更新下來,我就點了取消。

然后就需要選擇硬件芯片的型號了,這里我按照官方開發板的指示選擇了L431RC這個型號

先是在左邊搜索芯片型號,右邊選擇具體的型號,點擊下一步。輸入項目名字。繼續點擊下一步,完成。

然后會蹦出來這么一個窗口.我也不知道干啥的,感覺像是更新什么。

然后就是配置芯片了。

這里開始,就進入了我的知識盲區……這都是啥……看官方文檔……各種配置,也不管那么多,都不配置唄,默認就好了吧,想點擊下一步,可是找來找去,沒有找到啊?!跟官方說明不一樣啊?!什么情況,后來在工具欄上找到了這么一個選項:

點擊!注意,又一個我踏了坑:又要更新!居然是700多M

驚呆我。網絡也不知道怎么回事,幾kb的下載,這要下載到猴年馬月?醉了。

經過幾次不斷的嘗試,我發現了有這么一個配置,也不知道對不對,有沒有影響,反正我就是這么改了,然后好了!

終于可以愉快的下載了,下載好的文件,默認放在家目錄下:

? Repository pwd /Users/lee/STM32Cube/Repository ? Repository ls PRSTM32MP10219-01-med.jpg bd_stm32l431xx.jpg STM32Cube_FW_L4_V1.14.0_bk stm32cube_fw_l4_v1140_bk.zip

原本想在這里復現一下原來的情況,抓個圖,把下載好的包改了名字,可是等我重新打開IDE發現仍然能夠加載,也是奇怪了。

這里我把下載包stm32cube_fw_l4_v1140.zip也共享出來吧,提供給一些下載異常的朋友 鏈接:https://pan.baidu.com/s/1J6yxZmLOKhn-gg1wgQgHfQ 密碼:liry

下載完成后,重新點擊Generate code生成代碼,則順利看到需要的代碼都已經生成:

配置

然后,就是根據文檔,修改、添加里面的文件。

生成內核文件夾Tiny

這里有個坑:

官方文檔中提供的一個shell文件:TencentOS-tiny/tools/make_mac_stm32cubeide_code.sh,執行之后會把當前文件夾給刪除掉!

我在源碼目錄中全局搜索這個關鍵名,grep "make_mac_stm32cubeide" . -rn沒有找到相關介紹,也很詫異,不知道具體什么情況,也不知道啥用法,可能是我沒找對位置吧。這里只是提醒朋友們別失誤執行了這個文件導致文件丟失。

20190929更新
根據官方的 issue #23 原來是由內網轉換到外網出現了部分代碼提交異常,所以相關的文檔并沒有提交上去,具體情況可以點鏈接進去看一下,中文交流。
并且也知曉了錯誤原因:內網項目命名為TencentOS_tiny 提交到github時更名為了TencentOS-tiny. 導致部分文件有這樣的問題。
我提交了PR已經更改了此文件,現版本已經可以直接在tools目錄下直接使用。

這里呢,參考官方文檔《TencentOS-tiny-porting(MacOS_STM32CubeIDE).md》 將對應的文件拷貝到新的文件夾,文件夾目錄為:

? tiny tree -d . ├── arch │ └── arm │ └── arm-v7m │ ├── common │ │ └── include │ └── cortex-m4 │ └── gcc ├── kernel │ ├── core │ │ └── include │ ├── evtdrv │ │ └── include │ ├── hal │ │ └── include │ └── pm │ └── include └── osal└── cmsis_os18 directories

然后,將這個目錄,拷貝到之前創建的項目文件夾中。項目文件夾默認目錄為:/Users/用戶名/STM32CubeIDE/workspace_1.0.2/項目名/

在IDE中添加相關的引用

這里首先F5刷新一下項目,然后,添加頭文件包含關系:

點擊項目名稱,右鍵,選擇屬性,

進入了屬性配置頁,這里我們首先導入新添加的內核源碼:

然后我們將頭文件都包含進去:

這里我們都是使用的相對路徑。具體需要包含的文件有:

tiny/arch/arm/arm-v7m/common/include/tiny/arch/arm/arm-v7m/cortex-m4/gcc/tiny/kernel/core/include/tiny/kernel/pm/include/tiny/osal/cmsis_os/tiny/kernel/evtdrv/include/ #注意,這個官方文檔中沒有

這樣,相關的基礎文件就算是配置好了。

添加代碼

文件都配置好了之后,我們開始添加文件。

在Inc目錄下新建一個頭文件tos_config.h

#ifndef _TOS_CONFIG_H_ #define _TOS_CONFIG_H_#include "stm32l431xx.h" // 目標芯片頭文件,視特定芯片而定#include "stddef.h"#define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默認支持的最大優先級數量#define TOS_CFG_ROUND_ROBIN_EN 1u // 配置TencentOS tiny的內核是否開啟時間片輪轉#define TOS_CFG_OBJECT_VERIFY 0u // 配置TencentOS tiny是否校驗指針合法#define TOS_CFG_EVENT_EN 1u // TencentOS tiny 事件模塊功能宏#define TOS_CFG_MMHEAP_EN 1u // 配置TencentOS tiny是否開啟動態內存模塊#define TOS_CFG_MMHEAP_POOL_SIZE 0x100 // 配置TencentOS tiny動態內存池大小#define TOS_CFG_MUTEX_EN 1u // 配置TencentOS tiny是否開啟互斥鎖模塊#define TOS_CFG_QUEUE_EN 1u // 配置TencentOS tiny是否開啟隊列模塊#define TOS_CFG_TIMER_EN 1u // 配置TencentOS tiny是否開啟軟件定時器模塊#define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否開啟信號量模塊#if (TOS_CFG_QUEUE_EN > 0u) #define TOS_CFG_MSG_EN 1u #else#define TOS_CFG_MSG_EN 0u #endif#define TOS_CFG_MSG_POOL_SIZE 10u // 配置TencentOS tiny消息隊列大小#define TOS_CFG_IDLE_TASK_STK_SIZE 256u // 配置TencentOS tiny空閑任務棧大小#define TOS_CFG_CPU_TICK_PER_SECOND 1000u // 配置TencentOS tiny的tick頻率#define TOS_CFG_CPU_CLOCK (SystemCoreClock) // 配置TencentOS tiny CPU頻率#define TOS_CFG_TIMER_AS_PROC 1u // 配置是否將TIMER配置成函數模式#endif

修改Src/stm32l4xx_it.c里的代碼:

將void PendSV_Handler(void)修改為__weak void PendSV_Handler(void)

在SysTick_Handler函數中HAL_IncTick();之后添加代碼

if(tos_knl_is_running()) {tos_knl_irq_enter();tos_tick_handler();tos_knl_irq_leave();}

修改Src/main.c

添加代碼:

#include "cmsis_os.h"//task1#define TASK1_STK_SIZE 512void task1(void *pdata);osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);//task2#define TASK2_STK_SIZE 512void task2(void *pdata);osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE);void task1(void *pdata){while(1){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);osDelay(200);}}void task2(void *pdata) {while(1) {osDelay(1000);}}

注意:因為之前我沒有配置硬件具體的接口,這里需要配置一下,具體的位置在Inc/main.h里添加:

#define LED_Pin GPIO_PIN_13 #define LED_GPIO_Port GPIOC

在Src/main.c文件中添加:

static void MX_GPIO_Init(void); /*** @brief GPIO Initialization Function* @param None* @retval None*/ static void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOC_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);/*Configure GPIO pin : LED_Pin */GPIO_InitStruct.Pin = LED_Pin;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); }

主函數代碼:

int main(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 */osKernelInitialize(); //TOS Tiny kernel initializeosThreadCreate(osThread(task1), NULL); // Create task1osThreadCreate(osThread(task2), NULL); // Create task2osKernelStart(); //Start TOS Tiny/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}

至此,文件添加修改完成。

編譯

直接點擊工具欄上的錘子:

稍等一下,我們就順利編譯完成了!

由于當前沒有板子,所以沒辦法嘗試自己到底做的對不對,所以現在記錄一下,等待有板子了之后繼續下一步試驗。

總結

以上是生活随笔為你收集整理的TencentOS-Tiny在苹果MacOS初上手的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。