国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

騰訊物聯網系統TOS內核移植起來比你想象的要簡單

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 作者:黃工的嵌入式技術 ? 2020-02-05 12:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

可能很多人都聽說了,就在前幾天,騰訊公布了面向物聯網領域開發的實時操作系統:TencentOS tiny.

一、介紹

TencentOS tiny的內核就是一個RTOS內核,與我們常見的RTOS有很多類似之處。比如:任務管理、實時調度、時間管理、消息隊列、信號量、互斥鎖、事件標志等。

其實,更重要的是上層的Iot SDK,這一套協議棧主要用于快速接入騰訊云,同時,結合上層的安全、組件等框架實現物聯網。 IoT生態:

更多關于TOS的介紹,請參看官方文檔: https://github.com/Tencent/TencentOS-tiny

(公眾號不支持外部鏈接,請復制鏈接到瀏覽器打開)

二、內核移植

對于TencentOS tiny內核移植,和大多數RTOS可能類似,官方提供有相關文檔。

基于STM32Keil的移植教程,參考地址:

https://github.com/Tencent/TencentOS-tiny/blob/master/doc/TencentOS-tiny-porting-keil.md

移植前的準備

1. 準備目標硬件(開發板/芯片/模組)

TencentOS tiny目前主要支持ARM Cortex M核芯片的移植,比如STM32 基于Cortex M核全系列、NXP 基于Cortex M核全系列等。本教程將使用STM32官方Demo開發板 NUCLEO-L073RZ進行示例移植,其他 ARM Cortex M系列開發板和芯片移植方法類似。

調試ARM Cortex M核還需要仿真器, NUCLEO-L073RZ自帶ST-Link調試器,如果您的開發板或者芯片模組沒有板載仿真器,就需要連接外置的仿真器,如J-Link、U-Link之類的。

2.準備編譯器環境

本移植指南針對的是Keil MDK,最新版本5.28a

下載地址為:

https://www.keil.com/demo/eval/arm.htm

安裝完成后,還需要安裝對應芯片的器件支持包Keil.STM32L0xx_DFP.2.0.1.pack,下載地址為:

http://www.keil.com/dd2/Pack

參考文章:Keil系列教程

3. 準備芯片對應的裸機工程

移植TencentOS tiny基礎內核需要您提前準備一個芯片對應的裸機工程,裸機工程包含基本的芯片啟動文件、基礎配置(時鐘、主頻等)、以及串口、基本GPIO驅動用于RTOS測試。

本教程使用ST官方的STM32CubeMX軟件來自動化生成MDK裸機工程,STM32CubeMX的下載地址為:

https://www.st.com/en/development-tools/stm32cubemx.html

安裝STM32CubeMx還需要事先安裝好JDK環境,您可以在互聯網上查找如何安裝和配置JDK環境,此處不再贅述。

參看文章:STM32CubeMX系列教程

4. 準備TencentOS tiny的源碼TencentOS tiny的源碼已經開源,github下載地址為:

https://github.com/Tencent/TencentOS-tiny.git

一級目錄 二級目錄 說明
arch arm TencentOS tiny適配的IP核架構(含M核中斷、調度、tick相關代碼)
board NUCLEO_L073RZ 移植目標芯片的工程文件
kernel core TencentOS tiny內核源碼
pm TencentOS tiny低功耗模塊源碼
osal cmsis_os TencentOS tiny提供的cmsis os 適配

由于本教程只介紹TencentOS tiny的內核移植,所以這里只需要用到 arch、board、kernel、osal四個目錄下的源碼。

內核移植

1. 代碼目錄規劃

如圖所示,新建TencentOS_tiny主目錄,并在主目錄下添加四個子目錄,其中arch、kernel、osal從代碼倉直接拷貝過來即可,而board目錄下則放入我們前面生成的裸機工程代碼,我們移植的開發板取名叫NUCLEO_L073RZ,裸機代碼全部拷貝到下面即可,如下圖所示:

接下來進入TencentOS_tinyoardNUCLEO_L073RZMDK-ARM目錄,打開keil工程,我們開始添加TencentOS tiny的內核代碼。

2. 添加arch平臺代碼

tos_cpu.c是TencentOS tiny 的CPU適配文件,包括堆棧初始化,中斷適配等,如果您的芯片是ARM Cortex M核,該文件可以不做改動,M0、M3 、M4、M7是通用的,其他IP核需要重新適配;

port_s.S 文件是TencentOS tiny的任務調度匯編代碼,主要做彈棧壓棧等處理的,port_c.c適配systick等,這兩個文件 每個IP核和編譯器都是不一樣的,如果您的芯片是ARM Cortex M核,我們都已經適配好,比如現在我們移植的芯片是STM32L073RZ,是ARM Cortex M0+核,使用的編譯器是KEIL,所以我們選擇archarmarm-v7mcortex-m0+armcc下的適配代碼,如果你的開發板是STM32F429IG,M4核,編譯器是GCC,則可以選擇archarmarm-v7mcortex-m4gcc目錄下的適配文件。

3. 添加內核源碼

內核源碼kerne目錄下包含core和pm兩個目錄,其中core下為基礎內核,pm是內核中的低功耗組件;基礎移植的時候可以不添加pm目錄下的代碼,如下圖所示,添加基本內核源碼:

4. 添加cmsis os源碼

cmsis os是TencentOS tiny為了兼容cmsis標準而適配的OS抽象層,可以簡化大家將業務從其他RTOS遷移到TencentOS tiny的工作量。

5. 添加TencentOS tiny頭文件目錄

添加頭文件目錄前,我們在要移植的工程目錄下新增一個 TOS_CONFIG文件夾,用于存放TencentOS tiny的配置頭文件,也就是接下來要新建的tos_config.h文件;

TencentOS tiny所有要添加的頭文件目錄如下:

6. 新建TencentOS tiny系統配置文件 tos_config.h

```#ifndef TOS_CONFIG_H#define TOS_CONFIG_H #include "stm32l0xx.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_MMBLK_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是否開啟信號量模塊 #define TOS_CFG_TICKLESS_EN 0u // 配置Tickless 低功耗模塊開關 #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 128u // 配置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```

按照上面的模板配置好TencentOS tiny的各項功能后,將tos_config.h 文件放入要移植的board工程目錄下即可,例如本教程是放到boardNUCLEO_L073RZTOS_CONFIG目錄下。

這樣,TencentOS tiny的源碼就全部添加完畢了。

創建TencentOS tiny任務,測試移植結果

1. 修改部分代碼

修改stm32l0xx_it.c的中斷函數,在stm32l0xx_it.c文件中包含 tos.h 頭文件

在stm32l0xx_it.c文件中的PendSV_Handler函數前添加___weak關鍵字,因為該函數在TencentOS tiny的調度匯編中已經重新實現;同時在SysTick_Handler函數中添加TencentOS tiny的調度處理函數,如下圖所示:

2. 編寫TencentOS tiny 測試任務

在mian.c 中添加TencentOS tiny 頭文件,編寫任務函數

```#include "cmsis_os.h"http://task1#define TASK1_STK_SIZE 256void task1(void *pdata);osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE); //task2#define TASK2_STK_SIZE 256void task2(void *pdata);osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE); void task1(void *pdata){ int count = 1; while(1) { printf("Hello world!###This is task1 ,count is %d ", count++); HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin); osDelay(2000); }}void task2(void *pdata){ int count = 1; while(1) { printf("Hello TencentOS !***This is task2 ,count is %d", count++); osDelay(1000); }} int fputc(int ch, FILE *f){ if (ch == '') { HAL_UART_Transmit(&huart2, (void *)"", 1,30000); } HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF); return ch;}``` 如圖:

繼續在main.c 的mian函數中硬件外設初始化代碼后添加TencentOS tiny的初始化代碼:

```osKernelInitialize(); //TOS Tiny kernel initializeosThreadCreate(osThread(task1), NULL);// Create task1osThreadCreate(osThread(task2), NULL);// Create task2osKernelStart();//Start TOS Tiny``` 如圖:

3. 編譯下載測試TencentOS tiny移植結果

按照上圖指示,進行編譯下載到開發板即可完成TencentOS tiny的測試,如下圖所示,可以看到串口交替打印信息,表示兩個任務正在進行調度,切換運行:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 騰訊
    +關注

    關注

    7

    文章

    1684

    瀏覽量

    50908
  • 嵌入式RTOS
    +關注

    關注

    0

    文章

    2

    瀏覽量

    6889
  • 內核移植
    +關注

    關注

    0

    文章

    6

    瀏覽量

    7065
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    通過板載插孔輸出的音頻聽起來比通過 HDMI 音頻輸出的音頻更嘈雜,為什么?

    通過板載插孔輸出的音頻聽起來比通過 HDMI 音頻輸出的音頻更嘈雜。我是否使用了錯誤的耳機,或者它被設計成這樣的行為?
    發表于 02-09 06:46

    過采樣技術如何提高ADC的動態性能

    你是否也遇到過分辨率不足、噪聲過高的問題?在高速、高精度的信號采集場景中,ADC的動態性能往往成為系統瓶頸。其實,解決方案可能比你想象簡單——過采樣技術,正在悄悄改變游戲規則。
    的頭像 發表于 12-03 10:27 ?5155次閱讀
    過采樣技術如何提高ADC的動態性能

    為啥現在這么多人學聯網?

    聯網能火起來,不是憑空炒作,而是實實在在的需求撐起來的,尤其這3點,對求職者特別友好: 1. 政策托底,崗位穩定性強 了解行業的朋友應該知道,聯網
    發表于 11-18 15:39

    將蜂鳥E203的內核移植到fpga之后該怎么進行二次開發呢?

    你們好!請問一下我將蜂鳥E203的內核移植到fpga之后該怎么進行二次開發呢?比如我想點亮板子上的led?驅動攝像頭進行圖像識別?這些該如何進行呢?蜂鳥有類似freedom studio這樣的嵌入式開發平臺嗎?
    發表于 11-10 07:09

    如何把蜂鳥E203的核移植在N4DDR平臺上?

    請問一下我想把蜂鳥E203的核移植在N4DDR平臺上,但是他們的約束文件及硬件電路區別很大,具體我該怎么修改呢?比如蜂鳥的核中只有4個撥碼開關而N4DDR上有16個撥碼開關。
    發表于 11-10 06:46

    E203內核移植到FPGA開發板時出現時序違例的解決方式

    移植內核時,用VIVADO進行綜合實現后會出現時序違例,如圖: 雖然可以上板正常進行開發,但是還是想把這些違例解決下^_^ 檢查后,發現是 apb_adv_timer 這條路徑報的違例,解決方式
    發表于 10-27 07:32

    學習聯網怎么入門?

    的關鍵步驟。學習聯網需要進行實踐操作,通過實踐操作掌握聯網的相關技術和應用。可以通過購買聯網
    發表于 10-14 10:34

    學習聯網可以做什么工作?

    健康、智能制造等領域。以下是一些常見的職業方向: 聯網工程師:從事物聯網系統的設計、開發、測試、維護和升級等工作,包括傳感器、無線通信、云計算、大數據等技術的應用。   嵌入式軟件工
    發表于 10-11 16:40

    迅為RK3568開發板OpeHarmony學習開發手冊1.1-內核移植優化

    在上一小節的內核移植過程中,我們重新創建了內核補丁文件。然而,對于頻繁修改內核源代碼進行開發的情況來說,每次都制作內核補丁并不是一種方便的方法。為了解決這個問題,本小節將介紹另一種方法
    發表于 07-26 10:37

    聯網藍牙模塊有哪些優勢?

    之間的互聯互通。這使得在聯網應用中,多個設備可以協同工作,從而提高了系統的整體效率。總之,聯網藍牙模塊具有低功耗、傳輸距離遠、安全性高、
    發表于 06-28 21:49

    聯網的應用范圍有哪些?

    聯網簡單來說,就是“萬相連的互聯網”。它以互聯網為基石,將用戶端延伸至物品與物品之間,實現
    發表于 06-16 16:01

    聯網未來發展趨勢如何?

    。 智能家居:與人類生活息息相關的智能家居將成為聯網行業的重要發展方向。隨著人們對生活品質的追求不斷增加,智能家居系統將更加普及,實現家居設備的互聯互通。從智能燈光、智能家電到智能安防系統
    發表于 06-09 15:25

    聯網工程師為什么學Linux?

    依賴Linux的安全啟動機制。 三、職業需求與就業優勢 1)崗位技能硬性要求 企業招聘中,約70%的聯網開發崗位明確要求具備Linux系統編程、內核移植或驅動開發經驗。例如
    發表于 05-26 10:32

    蜂窩聯網怎么選

    的數據傳輸速率。有了蜂窩聯網技術,您就不必在功耗和數據傳輸速率之間做出妥協,而是可以兩全其美。 終身成本:雖然某些 LPWAN 技術的前期成本可能看起來很吸引人,但評估整個生命周期的成本(部署
    發表于 03-17 11:46

    為什么選擇蜂窩聯網

    在為您的聯網(IoT)應用評估最合適的低功耗廣域網(LPWAN)技術時,除了考慮技術指標外,還必須考慮各種因素,因為技術指標本身可能與實際性能大相徑庭。與 LoRaWAN、Sigfox
    發表于 03-17 11:42