• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • FreeRTOS任務管理

    一:單任務系統

    在單任務系統中的程序框架大致如下圖,即裸機時代編程框架,邏輯編程主要是采用超級循環系統(super-loops),有稱作前后臺系統,應用程序是一個無限循環,循環中完成各個操作;
    這里寫圖片描述

    二:單任務系統 至 多任務系統的進化

    概述:多任務系統即RTOS系統的實現,關鍵在于調度器即任務調度器,它的作用是使用相關的調度算法來決定當前需要執行的任務,如下圖圖2所示,創建了任務并且完成OS初始化之后,就可以通過調度器來決定任務A,任務B,任務C的運行,從而實現多任務系統,有一點需要注意的是,此處所說的多任務系統并非多個任務同時運行,而是同一時刻只能有一個任務可以運行,只是通過調度器的決策,看起來像事所有的任務同時運行一樣,如下圖圖3所示,

    這里寫圖片描述

    這里寫圖片描述

    這里寫圖片描述

    三:代碼框架

    QueueHandle XXX_listen_queue = NULL;
    
    //發送任務執行標志函數
        void send_moter_order(char order)
        {
        ...
                if(XXX_listen_queue){
                xQueueSend(XXX_listen_queue, &evt, 0);
                }
        }
    
    //任務函數
    void XXX_evt_task(char order)
    {
    while(1){
        //如果接收到 執行任務的指令
        if(xQueueReceive(XXX_listen_queue, &evt, 2000 /portTICK_RATE_MS))//系統在該任務執行2s
    
        ...//所執行的操作
    
        }
    }
    
    
    void XXX_init()
    {
      //創建消息隊列 用于接收 任務執行 命令
    motor_listen_queue = xQueueCreate(10, sizeof(uint32_t));
    
    //創建任務 優先級為5 任務為函數XXX_evt_task
    xTaskCreate(XXX_evt_task,"XXX",2048,NULL, 5, NULL);
    
    }
    

    其他任務通過 send_moter_order()函數來發送該任務執行標志,本任務收到任務執行命令之后,再等待至搶占到CPU之后即優先級為5的XXX任務被調度,當xQueueReceive()返回為真即接收到執行命令之后,則執行任務。

    本文作為工作筆記參考了大神 席萌0209 的相關博客:http://forum.armfly.com/forum.php?mod=viewthread&tid=21079&extra=page%3D1%26filter%3Dtypeid%26typeid%3D29

    版權聲明:本文為LinuxArmbiggod原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/LinuxArmbiggod/article/details/81210897

    智能推薦

    MAHAKIL之最新類不平衡過采樣方法

           最近在幫實驗室一師兄做實驗時,剛好在學習類不平衡的采樣方法,采樣方法大致分為過采樣和欠采樣兩大類,但是目前研究的主要為過采樣方法,因為它主要是往少數類集合中增加樣本點實現與多數類集合的動態平衡,這樣能最大程度的保證樣本的準確性,所以我將會在接下來的幾篇博客里詳細闡述過采樣方法。過采樣方法一般分為ROS(隨機過采樣),SMOTE-Regular,...

    關于靜態/動態類型檢查 和 不可變包裝的筆記

    靜態類型檢查和動態類型檢查 Java是一種靜態類型語言。所有變量的類型在編譯時(在程序運行之前)都是已知的,因此編譯器也可以推導出所有表達式的類型。如果a和b聲明為int,那么編譯器得出結論,a+b也是int。 相比較之下,在像Python這樣的動態類型語言中,這種檢查會被推遲到run-time。 靜態檢查一個bug比動態檢查好,而動態檢查它比根本不沒檢查它好。 靜態檢查的好處就是可在編譯階段發現...

    IntelliJ IDEA中創建xml文件

    IntelliJ IDEA中創建xml文件 1、file—setting,左上角輸入template, 2、在左側欄找到File And Code Templates 3、中間選中Files 4、點擊+號,添加模板 5、輸入模板名字:Name:mybatis-cfg.xml (name可以自定義) 6、后綴名extension:xml 7、在面板中間輸入內容: 8、把enable li...

    CocosCreator內存與性能優化

    CocosCreator內存與性能優化 一、內存優化 因為 iOS小游戲和微信共用同一個進程,而微信在連續兩次收到系統內存警告的時候會關閉小游戲并釋放小游戲占用的內存。如果你的小游戲有外網用戶反饋“閃退”,或者你自己測試的時候頻繁出現“該小程序可能導致微信響應變慢被終止”等提示,那么就應該是時候優化你的小游戲內存了! 1、優化雙份紋理(必做!) 在你...

    TabLayout+ViewPager實現橫向tab導航欄

    效果 實現方案 activity 布局文件 activity_main.xml view_pager_1.xml view_pager_2.xml 完整源代碼 https://gitee.com/cxyzy1/tablayoutDemo...

    猜你喜歡

    springboot進階

    1.配置文件application.yml 1.1基本語法 k:(空格)v:表示一對鍵值對(空格必須有); 以空格的縮進來控制層級關系;只要是左對齊的一列數據,都是同一個層級的 屬性和值也是大小寫敏感; 1.2值的寫法 1)字面量:普通的值(數字,字符串,布爾) k: v:字面直接來寫; 字符串默認不用加上單引號或者雙引號; “”:雙引號;不會轉義字符串里面的特殊字符;特殊...

    OpenCV學習筆記(二)——初始Mat類

    前言:      在計算機內存中,數字圖像以矩陣的形式存儲和運算,比如,在MatLab中,圖像讀取之后對應一個矩陣,在OpenCV中,同樣也是如此。     在早期的OpenCV1.x版本中,圖像的處理是通過IplImage(該名稱源于Intel的另一個開源庫Intel Image Processing Library ,縮寫成...

    ArrayList實現

    API https://docs.oracle.com/javase/8/docs/api/ 實現 MyList MyArrayList MyIterator MyArrayListIterator Test...

    簡單的定時DDOS攻擊樣本分析

    簡單的定時DDOS攻擊樣本分析 本次分析的樣本來自《惡意軟件分析》課后實驗–Lab-7-01中的程序,將樣本載入到DIE內查殼,如下 程序無殼,使用的VC++6.0編寫,看到編譯時間為2010/09/30 說明這個樣本已經很老很老了。將樣本載入到IDA內分析相關功能,來到入口函數Main出,程序首先調用了StartServiceCtrlDispatcherA啟動了一個名為MalServ...

    python實現郵件正文發送[兩163郵箱之間]

    下圖是郵件發送過程示意圖 實際效果如下: 實現代碼如下:(可直接拷貝,寫好郵箱地址、賬號、密碼,可直接執行)...

    精品国产乱码久久久久久蜜桃不卡