STM32簡單任務排程的總結

2021-08-31 06:48:43 字數 1105 閱讀 4190

概述

stm32的開發目前大多數還開處於「裸奔」的階段,處於開發成本的考慮,可能還未嵌入任何的rtos系統,由於沒有作業系統的支援,因而不能方便的對多工進行排程和管理。而有的任務不緊急,不需要過多的時間去迴圈執行,因此需要乙個簡單的任務排程來解決這個問題。

stm32f103ze的ahb時鐘為72mhz,通過hse的8m倍頻到72m,然後apb1預分頻係數為2,所以tim2-7時鐘為2*36m。由於定時器是16位,psc暫存器最大為65536,不支援71999,所以只能以0.1ms計數。

整個系統在獲取時間的累增時,定義64位變數,即可執行很久的時間,不用擔心溢位或者宕機。定義64位變數有2個方法,一就是用long long 直接定義,通過sizeof測試為8個位元組;二就是利用」stdint.h」,typedef uint64_t u64。

一般情況下,定時器計時結果演算法公式為:tout = (arr+1)(psc+1)/tclk。tclk即為時鐘頻率。

準備工作

1)建立乙個struct

typedef structstask;
2)任務列表

static stask mtasktab =   

, , // 10ms執行一次

// 200ms執行一次

};

3)初始化定時器

void tasktimer_init()

4)獲取啟動後時間

u64 gettimingtick()

5)任務執行期間獲取系統時間

在這裡插入void task_systick()

timingtick = temp + timingtickhold;

}

執行例項

#define  arraysize(a) (sizeof(a)/sizeof((a)[0]))

static stask mtasktab =

, ,//50ms

};while(1)

}}

FreeRTOS簡單任務排程實現

ifndef rtos h define rtos h include freertos.h include task.h define pex rtos start rtos start void rtos start void void freertos task1 void pvparamet...

STM32 簡單多任務排程的方法與程式例程

多工處理是指使用者可以在同一時間內執行多個應用程式,每個應用程式被稱作乙個任務.linux windows就是支援多工的作業系統,比起單任務系統它的功能增強了許多。當多工作業系統使用某種任務排程策略允許兩個或更多程序併發共享乙個處理器時,事實上處理器在某一時刻只會給一件任務提供服務。因為任務排程機制...

基於stm32的簡單多工切換設計

系統資料 1 當前的pid 2 所有的程序總數pamount 多工系統的初始化 1 設定msp值 2 設定臨時的psp值 因為這段實際上只在啟動定時器之前有效 3 設定control 1 1 設定雙堆疊 馬上會自動切換到psp上 4 設定pid 0,設定pamount 0 5 設定為程序資訊表起始位...