TMS320C6474學習總結(六)----如何選擇執行緒的型別?
DSP在同一時間執行多個任務,當外部資料變為有效或者出現控制訊號時,對外部事件進行響應。通常將這些任務稱為執行緒,DSP/BIOS採用廣義的定義:DSP執行的所有獨立的指令流。一個執行緒是一個單獨的控制點,可能包含一個字程式、一個巨集或者是一個函式呼叫。
DSP/BIOS系統主要有四類執行緒型別:HWI、SWI、TSK、IDL,那麼我們該如何選擇合適的執行緒呢?下面主要介紹下執行緒的選取規則:
1:嚴格的實時性
如果執行緒的執行需要嚴格的實時性,而執行緒執行需要的時間又很少時,可以使用硬體中斷或者時鐘函式完成硬體中斷執行緒將由外部的同步事件(如A/D轉換器的中斷訊號)觸發而執行。HWI函式或中斷服務子程式將在中斷髮生後執行。DSP/BIOS的應用程式中,HWI中斷函式冷處理頻率為200KHz的中斷(這是一個概數),處理時間在2-5us之間時,使用硬體中斷執行緒。硬體中斷執行緒有極小的中斷潛伏期(中斷觸發到中斷服務子程式的第一條指令開始執行的時間)硬體中斷執行緒推薦使用匯編語言。硬體中斷處理函式中,可以將SWI軟體中斷物件或TSK任務物件放到執行佇列裡面,但它們必須等到所有的硬體中斷執行緒結束後才有效,所以要使HWI硬體中斷函式儘快結束。硬體中斷函式在呼叫某些PIP管道模組的API函式時,PIP_alloc,PIP_free,PIP_get,PIP_put等,讀寫通知函式也將在中斷響應中呼叫執行。
2:部分實時性
SWI軟體中斷或TSK任務執行緒來完成一些非實時性的處理任務。二者有如下特點:能完成實時的處理任務但允許處理時間相對較長、允許被其他執行緒搶先。
如果有以下情況之一,使用TSK:
處理函式需要等待某些資源,以便繼續執行
處理函式與其它執行緒之間有複雜的聯絡或資料共享要求
處理函式有自己的堆疊空間而不是用系統的堆疊空間
處理函式用到LCK、MBX、SEM等核心模組
處理函式在建立、刪除、退出、就緒、切換時呼叫鉤子函式
因為:
任務可以被掛起,等待條件滿足而繼續執行,而SWI不能;
任務之間通訊和同步有SEM、MBX、LCK等,SWI沒有;
任務使用自己的堆疊,而SWI使用系統堆疊;
任務可呼叫鉤子函式
軟體中斷:往往伴隨著硬體中斷的發生。一般地若在硬體中斷服務函式中呼叫SWI_post函式,產生軟體中斷。其適合處理一些發生速率較低的任務,對實時性要求不苛刻的任務。SWI可以幫助HWI將一些非嚴格實時性的處理放到低優先順序的執行緒中。(注意:硬體中斷響應過程中,系統關中斷)由於軟體中斷不能掛起,所以軟體中斷處理之前必須所有的資料準備好,用郵箱判斷。
3:週期性的服務
週期性地或在固定的時間間隔內完成處理任務,一般地,時間間隔比處理任務所需的時間長得多,就用PRD。週期性函式屬於SWI軟體中斷的PRD_swi物件,所有周期函式具有同樣的SWI軟體中斷優先順序,所以周期函式不能搶先於其它周期函式。假若其它的SWI或者TSK處理時間較長,此時需要提高整個PRD周期函式的優先順序。多個周期函式如果被同一個系統時鐘觸發,那麼執行順序是按照建立時候的順序執行。
4:不需要實時性
收集統計資料,與自己交換檢測資料,用IDL執行緒。IDL執行緒當主函式返回之後,DSP/BIOS核心呼叫該應用程式所用到的DSP/BIOS模組的初始化啟動程式碼。結束後,進入IDL等待迴圈,不停地依次呼叫IDL後臺物件中的所有函式。
相關推薦
TMS320C6474學習總結(六)----如何選擇執行緒的型別?
DSP在同一時間執行多個任務,當外部資料變為有效或者出現控制訊號時,對外部事件進行響應。通常將這些任務稱為執行緒,DSP/BIOS採用廣義的定義:DSP執行的所有獨立的指令流。一個執行緒是一個單獨的控制點,可能包含一個字程式、一個巨集或者是一個函式呼叫。
Java基礎學習總結(104)——多執行緒、併發、工具類相關的面試題
執行緒的概念 執行緒是程式執行的最小單位,也是作業系統排程和分派CPU的最小單元,是程序中的一個實體,是程序中的實際運作單位。可以在一個程序中啟動多個執行緒來完成不同的任務,這些執行緒共享該程序擁有的資源。 執行緒程序區別 程序是程式的實體,也是執行緒的容器,一個程序可以包含多個執行緒,程序是資源分配的基本單
MyBatis學習總結(六)---使用log4j2將sql語句執行記錄輸出控制檯和檔案中
在上一篇部落格中我簡單的介紹了在MyBatis中如何使用日誌,並給出了一個在MyBatis中使用log4j的示例。 MyBatis中日誌的使用及使用log4j示例 下面介紹在MyBatis中如何使用log4j2將sql語句執行記錄輸出控制
《Linux高性能服務器編程》學習總結(六)——高級I/O函數
drl trunc 高級 char .com 服務 原因 說明 inf 第六章 高級I/O函數 網絡I/O一直是Linux網絡編程中極其重要的一部分,除了前面講到的send、recv等,socket編程接口還給出了很多高級了I/O函數,這些函數大致分為三類:用
Linux學習總結(六)-su命令 sudo 命令 限制root遠程登錄
su - rest 一次 com 註冊 情況 保存配置文件 所有權 是把 root 用戶擁有至高無上的權利,那麽我們運維人員是不是直接在root用戶下處理所有問題呢?答案是否定的,權力越大,責任越大,人是會犯錯的,因此我們要在不影響我們的工作情況下,盡量限制我們的權力,以免
SpringCloud開發學習總結(六)—— 結合註解的AOP示例
分析 urn 需要 開發 tostring ole ngs artifact tex 面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生
c++學習總結(六)——虛擬函式與多型
一、學習總結 在面向物件程式設計中,多型性是指一個名字,多種語義;或者介面相同,多種實現。過載函式是多型性的一種簡單形式。C++為類體系提供一種靈活的多型機制——虛擬函式。虛擬函式允許函式呼叫與函式體的聯絡在執行時才進行,成為動態聯編。類、繼承和多型,提供了對軟體重用性
Maven學習總結(六):pom.xml檔案的說明
什麼是POM? POM是專案物件模型(Project Object Model)的簡稱,它是Maven專案中的檔案,使用XML表示,名稱叫做pom.xml。作用類似ant的build.xml檔案,功能更強大。該檔案用於管理:原始碼、配置檔案、開發者的資訊和角色、問題追蹤系統、
TMS320C6474學習總結(九)----GPIO中斷除錯
GPIO模組 1. GPIO概述 通用輸入/輸出(GPIO)外設提供專用的通用引腳,可以配置為輸入或輸出。當將其配置為輸出時,您可以向內部暫存器寫入,以控制輸出引腳上的狀態驅動。當配置為輸入時,您可以通過讀取內部暫存器的狀態來檢測輸入的狀態。
圖形學學習總結(六)—背面消除
物體從區域性座標最後渲染到螢幕上我們已經基本瞭解了,但是在3d流水線中還有一些操作是需要的,就是物體的背面消除和剔除,可以避免大量無用的運算 背面消除 物體的背面消除很簡單,在世界座標中進行,即相機座標轉換操作之前,物體的面法量與面到視點的向量的夾角不超過90度時,這個面
ElasticSearch學習總結(六):叢集管理總結
本文主要總結和叢集管理的相關內容。 1. 發現和恢復模組 節點的啟動主要包括兩個過程:(1)發現 (2)恢復 1.1 發現(discovery) 當啟動ES節點的時候,最先做的事情就是查詢一個擁有相同叢集名稱且網路上可見的主節點,如果找到,這個新啟動的節點就加入那個已經存在的
資料庫學習總結(六)——查詢練習題(1)
這篇部落格是我再學習資料庫過程中所練習的查詢操作題 供大家學習參考用 查詢所使用的資料庫是teach.sql,已上傳資源,下載後匯入在資料庫中即可,具體步驟文末貼圖 練習題可在匯入的資料庫中執行 建議先自己做再看答案,答案是我自己做的,不是唯一的,如果有問題也歡迎指出~ 1、列出XSB表
TMS320C6474學習總結(七)----如何利用TI的CSL庫來開發程式?
1.什麼是CSL庫? 晶片支援庫(CSL)提供了一個用於配置和控制片上外設的C語言介面。它有各個分立的模組組成,並被編譯成為庫檔案。每個模組對應一個單獨的外設,除了個別提供通用程式支援的模組。使用CSL可以方便片上外設的使用,縮短開發週期,提高程式的可移植性,硬體抽象。
機器學習總結(六):整合學習(Boosting,Bagging,組合策略)
(也是面試常考) 主要思想:利用一定的手段學習出多個分類器,而且這多個分類器要求是弱分類器,然後將多個分類器進行組合公共預測。核心思想就是如何訓練處多個弱分類器以及如何將這些弱分類器進行組合,個體分類
TMS320C6474學習總結(八)----如何生成使用者自己的庫檔案以及如何呼叫自定義的庫檔案?
想必知道如何利用CSL庫檔案來開發程式後,對庫檔案應該有了一個比較初步的認識,其實庫檔案也就是一個個簡單的程式,通過封裝將程式的內部實現給隱藏起來,只對使用者開放程式的入口函式。使用者在呼叫庫函式檔案時,只需要查閱庫檔案的手冊,知道這個庫函式的作用是啥,傳遞的引數是啥意思就行
TMS320C6474學習總結(五)----DSP/BIOS自帶例程 mailbox exampe 詳解
附上例程的主程式: #include <std.h> #include <log.h> #include <mbx.h> #include <tsk.h> #include "mailboxcfg.h" #defi
VC++6.0&&VS2008&MFC&API學習問題總結(一)(多執行緒CreateThread及小問題彙總)
以下資料部分收集於網路,部分是自己碰到的問題(內容將陸續更新): 1、VC++6.0無法設定斷點:先關閉程式,然後刪除目錄下的.opt和.ncb檔案,重新開啟專案,就OK! 2、這個無奈問題折騰了很久,一直以為是資料庫問題,本來是修改的東西,害我把資料庫整體變成了acce
TMS320C6474學習總結(十)----IPC中斷
IPC中斷 1. 簡介 核內通訊是多核裝置的CPU之間資訊交換的方式。在大多數應用程式中,工作以並行或順序的方式在核心之間進行劃分,需要一個核心將控制資訊或資料緩衝訊息傳遞給另一個核心。交換資料緩衝的機制一般包括一個核寫資料到一個核特定的記憶體區域(通過CPU、回寫快取或
學習總結(六)
diff 末尾 .get rem efault 索引 一次 拼接 容器 1.拷貝 1)值拷貝:應用場景最多ls = [1, ‘abc‘, [10]] ls1 = ls # ls1直接將ls中存放的地址拿過來2) ls內部的值發生任何變化,ls1都會隨之變化 ls2
Boost(六)——多執行緒
結合Boost官網 多執行緒的難點在於同步執行,需要“鎖”控制所有權。 鎖有分:互斥鎖,條件變數... 互斥鎖:boost::mutex 獲取和釋放成對存在,也可以用boost::lock_guard<boost::mutex> lock(mutex); boost::l