STM32開(kāi)發(fā)的初始階段,由于沒(méi)有操作系統(tǒng)的支持,因而不能方便的對(duì)多任務(wù)進(jìn)行調(diào)度和管理。而有的任務(wù)不緊急,不需要過(guò)多的時(shí)間去循環(huán)執(zhí)行,因此需要一個(gè)簡(jiǎn)單的任務(wù)調(diào)度來(lái)解決這個(gè)問(wèn)題。STM32F103ZE的AHB時(shí)鐘為72MHz,通過(guò)HSE的8M倍頻到72M,然后APB1預(yù)分頻系數(shù)為2,所以TIM2-7時(shí)鐘為2*36M。由于定時(shí)器是16位,PSC寄存器最大為65536,不支持71999,所以只能以0.1ms計(jì)數(shù)。
整個(gè)系統(tǒng)在獲取時(shí)間的累增時(shí),定義64位變量,即可運(yùn)行很久的時(shí)間,不用擔(dān)心溢出或者死機(jī)。定義64位變量有2個(gè)方法,一就是用long long 直接定義,通過(guò)sizeof測(cè)試為8個(gè)字節(jié);二就是利用”stdint.h”,typedef uint64_t u64。一般情況下,定時(shí)器計(jì)時(shí)結(jié)果算法公式為:Tout = (ARR+1)(PSC+1)/Tclk。Tclk即為時(shí)鐘頻率。
STM32的任務(wù)調(diào)度可以有兩種方式:1.通過(guò)systick_handler定時(shí)器調(diào)度;2.執(zhí)行一個(gè)系統(tǒng)調(diào)用。
cortexM3的寄存器只有16個(gè),cortexM4除了這16個(gè)還有很多浮點(diǎn)運(yùn)算和MPU單元,如果不用這些單元它和M4沒(méi)有區(qū)別,我是用的cortexM4內(nèi)核的STM32F407,因?yàn)闆](méi)有用浮點(diǎn)運(yùn)算和MPU保護(hù)單元因此OS也和M3內(nèi)核兼容。因此在任務(wù)調(diào)度的過(guò)程中,也是不斷的保存現(xiàn)在任務(wù)的這16個(gè)寄存器,彈出下一個(gè)任務(wù)的16個(gè)寄存器。
任務(wù)調(diào)度的步驟總結(jié)為如下:
1.保存程序的上下文即當(dāng)前任務(wù)的寄存器,保存存儲(chǔ)寄存器的任務(wù)堆棧的地址。
2.根據(jù)下一個(gè)任務(wù)的任務(wù)堆棧地址依次彈出下一個(gè)任務(wù)的16個(gè)寄存器。
本文整合自 CSDN、簡(jiǎn)書(shū)
責(zé)任編輯:fqj
-
STM32
+關(guān)注
關(guān)注
2285文章
10986瀏覽量
361468 -
任務(wù)調(diào)度
+關(guān)注
關(guān)注
0文章
27瀏覽量
10015
發(fā)布評(píng)論請(qǐng)先 登錄
數(shù)字化工廠(chǎng)物流核心技術(shù)—AGV調(diào)度系統(tǒng)

簡(jiǎn)單認(rèn)識(shí)全調(diào)度以太網(wǎng)技術(shù)

SSTF中脈沖前傾的仿真
基于Flexus X加速M(fèi)ySQL鏡像搭建XXL-JOB任務(wù)調(diào)度平臺(tái)

【「數(shù)字IC設(shè)計(jì)入門(mén)」閱讀體驗(yàn)】+目錄和前2章
借助增強(qiáng)型航天塑料產(chǎn)品降低近地軌道任務(wù)的風(fēng)險(xiǎn)應(yīng)用說(shuō)明

ESP32C3任務(wù)執(zhí)行一段時(shí)間,會(huì)出現(xiàn)任務(wù)不運(yùn)行的問(wèn)題,為什么?
鴻蒙開(kāi)發(fā)接口資源調(diào)度:【@ohos.workScheduler (延遲任務(wù)調(diào)度)】

編寫(xiě)一個(gè)任務(wù)調(diào)度程序,在上下文切換后遇到了一些問(wèn)題求解
微軟發(fā)布KB5037768更新,解決Windows 10任務(wù)欄搜索故障并推薦使用
STM32F303 ucos ii任務(wù)調(diào)度都用什么?
請(qǐng)問(wèn)CMSIS-RTOS RTX的任務(wù)調(diào)度鎖在哪里?
淺析FreeRTOS任務(wù)調(diào)度器的三種調(diào)度算法和應(yīng)用

評(píng)論