STM32開發的初始階段,由于沒有操作系統的支持,因而不能方便的對多任務進行調度和管理。而有的任務不緊急,不需要過多的時間去循環執行,因此需要一個簡單的任務調度來解決這個問題。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即為時鐘頻率。
STM32的任務調度可以有兩種方式:1.通過systick_handler定時器調度;2.執行一個系統調用。
cortexM3的寄存器只有16個,cortexM4除了這16個還有很多浮點運算和MPU單元,如果不用這些單元它和M4沒有區別,我是用的cortexM4內核的STM32F407,因為沒有用浮點運算和MPU保護單元因此OS也和M3內核兼容。因此在任務調度的過程中,也是不斷的保存現在任務的這16個寄存器,彈出下一個任務的16個寄存器。
任務調度的步驟總結為如下:
1.保存程序的上下文即當前任務的寄存器,保存存儲寄存器的任務堆棧的地址。
2.根據下一個任務的任務堆棧地址依次彈出下一個任務的16個寄存器。
本文整合自 CSDN、簡書
責任編輯:fqj
-
STM32
+關注
關注
2291文章
11019瀏覽量
363004 -
任務調度
+關注
關注
0文章
27瀏覽量
10045
發布評論請先 登錄
同步任務開發指導
快速入門——LuatOS:sys庫多任務管理實戰攻略!

工控一體機多線程任務調度優化:聚徽分享破解工業復雜流程高效協同密碼
拒絕“人工智障”!VLM讓RDK X5機器狗真正聽懂“遛彎”和“避障

京東百萬級調度系統(Buffalo)架構解密

AGV監控與任務管理系統設計

數字化工廠物流核心技術—AGV調度系統

SSTF中脈沖前傾的仿真
基于Flexus X加速MySQL鏡像搭建XXL-JOB任務調度平臺

【「數字IC設計入門」閱讀體驗】+目錄和前2章
MES系統如何實現生產車間的實時監控、精準調度

采用新思科技和捷德技術的集成安全iSIM解決方案

智能調度 多臺AGV為什么不會撞在一起?

評論