色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 調(diào)度器在DSP編程中的應用

          調(diào)度器在DSP編程中的應用

          ——
          作者:喬顯華 李文 時間:2006-06-28 來源: 收藏
          摘要: DSP在自動控制系統(tǒng)領域得到廣泛的應用。它的性能遠遠強于單片機,在控制系統(tǒng)中所完成的功能也較為復雜。若基于簡單的超循環(huán)結構來完成軟件設計,則編寫的程序繁瑣而且困難,更為重要的是系統(tǒng)有的任務精確時限得不到滿足;若使用簡單嵌入式操作系統(tǒng),則會占用非常多的資源(CPU與RAM),系統(tǒng)的實時性還有可能不滿足要求。為了把一個復雜系統(tǒng)中的任務組織起來,并且盡量減少資源的損耗,本文提出了一種軟件設計方法可滿足上述要求。

            關鍵字:DSP ,單片機 , 嵌入式操作系統(tǒng)


            Attemper Application in DSP Program

            Abstract:DSP is widely used in automation system field. Its performances are much stronger than SCM, so it can complete complex functions in automation system field. If accomplish the software based on simple infinite circle, the designing is complex and difficult, more important thing is that time limit of tasks is not met; if used embedded OS , it will take up more resources(CPU and RAM) and real time quality of the system probably can not be met. In order to organize the tasks in complex system and reduce wastage of resources, this paper put forward a method of designing software that could meet above requests.

            Keywords: DSP, SCM , embedded OS




            一. DSP介紹

            DSP芯片,也稱數(shù)字信號處理器,是一種具有特殊結構的微處理器。它的內(nèi)部采用程序和數(shù)據(jù)分開的哈佛結構,具有專門的乘法器,廣泛采用流水線結構,提供特殊的DSP指令,在一個周期內(nèi)完成一次乘法和一次加法。在國外,DSP芯片已經(jīng)被廣泛地應用于當今技術革命的各個領域;在我國,DSP技術也正以極快的速度被應用在通信、電子系統(tǒng)、信號處理系統(tǒng)、自動控制、雷達、軍事、航空航天、醫(yī)療、家用電器、電力系統(tǒng)等許多領域中,而且新的應用領域在不斷地被發(fā)掘。因此基于DSP技術的開發(fā)應用正成為數(shù)字時代的應用技術潮流。相對于單片機,它速度更快,外設集成度更高,程序存儲器更大。在《時間觸發(fā)嵌入式系統(tǒng)設計模式》一書中詳細介紹了基于單片機的軟件設計方法,而本文基于DSP對這種設計進行了擴展,使這種設計方法更為靈活,有效。


            二.調(diào)度器介紹

            可以從兩方面來看調(diào)度器:一方面:調(diào)度器可以看作是一個簡單的操作系統(tǒng),允許以周期性或單次方式調(diào)用任務;另一方面:從底層角度來看,調(diào)度器可以看作是一個由許多不同任務共享的定時器中斷服務程序。

            1. 調(diào)度器的組成

           ?。?)調(diào)度器數(shù)據(jù)結構

            調(diào)度器的核心是調(diào)度器數(shù)據(jù)結構。這是一種用戶自定義的數(shù)據(jù)類型,集中了每個任務所需的信息。


            typedef struct
              {
               void ( * pTask)(void); 指向任務的指針(必須是一個void(void)函數(shù))。
               unsigned int Delay; 延時時標數(shù):直到任務將下一次運行所剩時標數(shù)?!      r標,是硬件定時器周期中斷設定的時間間隔,它是調(diào)度器的驅(qū)動者。
               unsigned int Period; 周期時標數(shù):任務連續(xù)運行所間隔的時標數(shù)。
               unsigned int DelCounter; 若不為周期任務,表示任務運行次數(shù);若為周期函數(shù),則無意義。
               char PrdOrTemp; 若PrdOrTemp=1,則為周期任務;若PrdOrTemp=0,則為非周期任務。
               char RunMe; 當任務需要運行時(由調(diào)度器)加1
              } sTask;

            另外,還需要定義一些全局變量:unsigned int Task_Index 記錄當前所添加任務索引變量,對于每一個任務都要定義一個任務索引變量,以便對任務進行查找。例如:可以利用任務索引變量對任務進行刪除。任務隊列sTask SCH_tasks_G [SCH_MAX_TASKS]記錄所有任務數(shù)據(jù)結構的全局變量,其中SCH_MAX_TASKS為定義的最大任務數(shù)。雖然在系統(tǒng)運行時,任務有添加或刪除,但系統(tǒng)不是很復雜,給出的SCH_MAX_TASKS一定要大于運行的任務數(shù)。


           ?。?) 初始化函數(shù)(void SCH_Init_T(void))

            這個函數(shù)主要的作用是設置定時器,用來產(chǎn)生驅(qū)動調(diào)度器的定期時標。一般的DSP都有多個定時器,它們中的任何一個都可以用來驅(qū)動調(diào)度器。對于調(diào)度器來說,要在不同地微處理器運行,主要是初始化函數(shù)不同(即微處理器的定時器初始化不同)。時標設定的大小關系到CPU的利用率和系統(tǒng)的精度,它的大小與具體的系統(tǒng)有關,例如微處理器的速度,執(zhí)行任務的大小,執(zhí)行任務周期的大小等。TI 公司推出的2000 系列的DSP與一般51系列的單片機時標的設定有所不同:DSP的CPU頻率可達到40M,而且采用流水線結構,基本上一個時鐘周期執(zhí)行一條指令;一般單片機頻率為10M,而且遠不能達到一個時鐘周期執(zhí)行一條指令。在《時間觸發(fā)嵌入式系統(tǒng)設計模式》一書中,單片機時標設定為1ms,可獲得很高的CPU利用率;而調(diào)度器應用在交流數(shù)據(jù)采集和控制系統(tǒng)中(采用TMS320LF2407), 時標設定為200us,CPU利用率也不小于百分之九十五。


            (3) 添加任務的函數(shù)

            unsigned int SCH_Add_Task(void ( * pFunction)( DELAY, PERIOD, DELCOUNTER, PRDORTEMP)

            添加任務函數(shù)首先開始檢查任務隊列sTask SCH_tasks_G[SCH_MAX_TASKS]記錄所有任務數(shù)據(jù)結構的全局變量哪一個空閑,然后將所添加任務的地址,延時執(zhí)行時標數(shù),周期時標數(shù),任務運行次數(shù),周期任務指示標志賦給任務隊列那一個空閑全局變量。再記錄下當前任務索引變量,以便在需要的情況下賦給任務自身索引變量,對任務進行跟蹤。


           ?。?) 刪除任務的函數(shù)

            void SCH_Del_Task(const unsigned int TASK_INDEX)

            刪除任務函數(shù)從 TASK_INDEX得到所要刪除任務的任務索引變量。然后將對應的任務數(shù)據(jù)結構的全局變量清除。刪除任務時,對應的任務數(shù)據(jù)結構的全局變量的內(nèi)容清除,但變量并沒有撤銷,當再次執(zhí)行添加任務函數(shù)時,此任務數(shù)據(jù)結構的全局變量有可能分配給其他任務。


           ?。?) 刷新函數(shù) void SCH_Update(void)

            刷新函數(shù)是調(diào)度器的中斷服務程序,用一定的時間間隔刷新調(diào)度器。它是由定時器溢出激活的,刷新函數(shù)并不復雜。當刷新函數(shù)確定某個任務需要運行時,將這個任務Runme標志加一,然后該任務將由調(diào)度函數(shù)執(zhí)行。刷新函數(shù)的執(zhí)行流程如圖1所示。


            (6) 調(diào)度函數(shù) void SCH_Dispatch_Tasks(void)

            調(diào)度函數(shù)是用來執(zhí)行任務的函數(shù),而刷新函數(shù)并不執(zhí)行任務。我們之所把刷新函數(shù)與調(diào)度函數(shù)分開,是處于與系統(tǒng)安全考慮的。如果刷新函數(shù)與調(diào)度函數(shù)合并,而一個任務出現(xiàn)異常在一個時標中沒有執(zhí)行完,那么定時器中斷將被忽略,下一個任務將不能在預定的時間內(nèi)執(zhí)行。調(diào)度函數(shù)不僅可以運行所需要運行的任務,而且可以刪除運行完畢的非周期任務。在調(diào)度函數(shù)中可加入一些其他功能,可以是系統(tǒng)在任務執(zhí)行完畢后沒有任務執(zhí)行是進入低功耗狀態(tài),以節(jié)省電能。調(diào)度函數(shù)的執(zhí)行流程如圖2所示。




                      圖1刷新函數(shù)流程圖       圖2調(diào)度函數(shù)流程圖



            2. 任務的運行

            任務的運行過程也是調(diào)度器運行的過程。這里調(diào)度LED兩秒閃爍一次的任務來說明任務
          void LED_Flash(void)的運行過程。設定時標為200us。系統(tǒng)初始化System_Init( ),對于任務LED_Flash(),DSP僅僅設置時鐘和相應的I/O引腳;SCH_Init_T()前已詳細講明;添加任務函數(shù)


          圖3任務運行流程圖
          圖3任務運行流程圖



            SCH_Add_Task(LED_Flash, 0, 5000,0,PERIOD_TASK ),其中LED_Flash為任務的地址,第一個零表示從系統(tǒng)運行第一個時標就開始執(zhí)行任務,5000表示每5000個時標(5000


          評論


          相關推薦

          技術專區(qū)

          關閉