91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MCU長耗時任務的優(yōu)化策略

strongerHuang ? 來源:大橙子瘋嵌入式 ? 2023-11-21 09:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

轉自 | 大橙子瘋嵌入式

MCU 裸機開發(fā)中,采用分時片的方式進行多任務處理是一種常見的技術。

然而,長耗時任務可能會影響系統(tǒng)的響應性和性能,因此需要采取一系列優(yōu)化策略來處理這些情況。

本文將介紹針對長耗時任務的幾種常見優(yōu)化策略,并著重探討任務分割的思路與方法。

優(yōu)化策略

以下是針對長耗時任務的幾種常見優(yōu)化策略:

任務分割和優(yōu)先級設置

將長耗時任務分割成多個較小的子任務,每個子任務只在每個時間片內執(zhí)行一部分。同時,通過設置任務的優(yōu)先級,確保高優(yōu)先級任務能夠在適當時刻得到執(zhí)行,從而保證系統(tǒng)的響應性。

時間片調整

對于特別耗時的任務,可以將它們的時間片調整為更大,以確保它們能夠在較長的時間段內得到充分的執(zhí)行時間。這樣可以減少任務切換的開銷,提高長耗時任務的效率;同時也有更多的時間執(zhí)行其他任務,保證其他任務能夠及時被調度。

使用中斷處理

對于一些需要高實時性的任務,可以考慮使用中斷處理。將長耗時任務分為多個階段,在每個時間片內執(zhí)行一個階段,當中斷觸發(fā)時,可以切換到中斷處理程序,然后再回到任務繼續(xù)執(zhí)行。這樣可以在不中斷其他任務的情況下,保證某些任務得到及時處理。

任務延時和休眠

對于一些不需要即時執(zhí)行的任務,可以在任務中添加適當?shù)难訒r或休眠。這樣可以讓其他高優(yōu)先級任務有更多的執(zhí)行時間,同時降低長耗時任務對系統(tǒng)的影響。

優(yōu)化算法和數(shù)據(jù)結構

針對特定的長耗時任務,可以優(yōu)化算法和數(shù)據(jù)結構,以減少計算量和內存使用。這可以顯著提高任務的執(zhí)行效率。

任務優(yōu)先級監(jiān)控和動態(tài)調整

實時監(jiān)控系統(tǒng)中各個任務的執(zhí)行狀態(tài)和響應時間,根據(jù)實際情況動態(tài)調整任務的優(yōu)先級和時間片大小,以適應不同的工作負載。

示例

任務分割的思路與方法

任務分割是優(yōu)化長耗時任務的關鍵策略之一。它的核心思想是將長耗時任務切分成多個較小的子任務,每個子任務在一個時間片內執(zhí)行一部分工作。以下是任務分割的大致步驟:

任務分析:首先,對長耗時任務進行詳細分析,確定任務的執(zhí)行流程、涉及的計算和操作,以及可能的耗時瓶頸點。

子任務劃分:將任務劃分為多個子任務,每個子任務代表一個可以在一個時間片內完成的工作單元。確保劃分后的子任務是相對獨立的,不會導致數(shù)據(jù)依賴性問題。

優(yōu)先級設置:為每個子任務設置適當?shù)膬?yōu)先級,確保高優(yōu)先級任務在必要時能夠及時執(zhí)行。通常,長耗時任務的子任務應該具有相對較高的優(yōu)先級。

時間片分配:根據(jù)子任務的數(shù)量和優(yōu)先級,合理分配時間片。對于長耗時任務的子任務,可以將其時間片設置為較大值,以確保每個子任務能夠得到充分的執(zhí)行時間。

任務執(zhí)行與切換:在每個時間片內,依次執(zhí)行每個子任務的一部分工作。在任務切換時,確保上下文的正確保存和恢復,以保證任務的連續(xù)性。

中斷處理:如果長耗時任務需要高實時性,可以在適當?shù)牡胤揭胫袛嗵幚?,以在必要時切換到中斷處理程序,然后返回繼續(xù)執(zhí)行子任務。

通過任務分割,長耗時任務可以被有效地分解成可管理的部分,從而提高系統(tǒng)的響應性和效率。然而,需要注意的是,任務分割過程需要綜合考慮任務之間的依賴關系、優(yōu)先級設置以及任務切換的開銷,以達到最佳的優(yōu)化效果。

如何實現(xiàn)?

在優(yōu)化初期,可以結合狀態(tài)機的思想完成任務的拆分和切換,比如10毫秒的任務,而一個執(zhí)行時長需要5毫秒的任務,在運行周期10毫秒無法調整的情況下,而任務可細分時,可以分成多個子狀態(tài)(子任務)執(zhí)行,如5個狀態(tài)(子任務),那么該任務周期為2毫秒,所有子狀態(tài)(子任務)運行時間依然是10毫秒(理想狀態(tài)下)。

當然,這種優(yōu)化需要保證大部分的子狀態(tài)(子任務)執(zhí)行時長不要超過時間片,如果不能保證,那么繼續(xù)細分多個子狀態(tài)(子任務),直到無法繼續(xù)細分為止(比如IIC/SPI發(fā)送數(shù)據(jù)等場景)。

voidTask_10ms(void)
{
....
}

//改為
voidTask_2ms(void)
{
staticuint8_ts_state=0;

switch(s_state)
{
case0:
....
s_state=1;
break;
case1:
....
s_state=2;
break;
case2:
....
s_state=3;
break;
case3:
....
s_state=4;
break;
case4:
....
s_state=0;
break;
}
}



審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    147

    文章

    18925

    瀏覽量

    398125
  • 嵌入式
    +關注

    關注

    5198

    文章

    20449

    瀏覽量

    334021
  • 中斷處理
    +關注

    關注

    0

    文章

    96

    瀏覽量

    11480

原文標題:如何優(yōu)化MCU長耗時的任務?

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    鴻蒙原生應用/元服務開發(fā)-短時任務

    概述 應用退至后臺一小段時間后,應用進程會被掛起,無法執(zhí)行對應的任務。如果應用在后臺仍需要執(zhí)行耗時不長的任務,如狀態(tài)保存等,可以通過本文申請短時任務,擴展應用在后臺的運行時間。 約束與
    發(fā)表于 12-28 16:13

    鴻蒙原生應用/元服務開發(fā)-時任務

    概述 功能介紹 應用退至后臺后,對于在后臺需要長時間運行用戶可感知的任務,例如播放音樂、導航等。為防止應用進程被掛起,導致對應功能異常,可以申請時任務,使應用在后臺長時間運行。申請
    發(fā)表于 01-09 10:52

    Linux系統(tǒng)定時任務Crond

    會定期(默認每分鐘檢查一次)檢查系統(tǒng)中是否有要執(zhí)行的任務工作,如果有,便會根據(jù)其預先設定的定時任務規(guī)則自動執(zhí)行該定時任務工作,這個crond定時任務服務就相當于我們平時早起使用的鬧鐘一
    發(fā)表于 07-05 06:22

    linux的循環(huán)定時任務

    linux循環(huán)定時任務
    發(fā)表于 05-20 14:59

    時任務的發(fā)展史是怎么樣的

    使用quartz就已經升級了三代,每一代在上一代系統(tǒng)之上有所優(yōu)化,寫這篇文章一方面介紹一下quartz的使用,另一方面可以根據(jù)此項目的變遷反應出我司平臺架構升級的一個縮影。定時任務的使用場景很多,以我們平臺來講:計息,派息、對賬等等。
    發(fā)表于 07-18 17:38 ?0次下載
    定<b class='flag-5'>時任務</b>的發(fā)展史是怎么樣的

    Python定時任務的實現(xiàn)方式

    在日常工作中,我們常常會用到需要周期性執(zhí)行的任務,一種方式是采用 Linux 系統(tǒng)自帶的 crond 結合命令行實現(xiàn)。另外一種方式是直接使用Python。接下來整理的是常見的Python定時任務
    的頭像 發(fā)表于 10-08 15:20 ?1.2w次閱讀

    解析Golang定時任務庫gron設計和原理

    正巧,最近看到了 gron 這個開源項目,它是用 Golang 實現(xiàn)一個并發(fā)安全的定時任務庫。實現(xiàn)非常簡單精巧,代碼量也不多。今天我們就來一起結合源碼看一下,怎樣基于 Golang 的能力做出來一個【定時任務庫】。
    的頭像 發(fā)表于 12-15 13:57 ?2169次閱讀

    求一種SpringBoot定時任務動態(tài)管理通用解決方案

    SpringBoot的定時任務的加強工具,實現(xiàn)對SpringBoot原生的定時任務進行動態(tài)管理,完全兼容原生@Scheduled注解,無需對原本的定時任務進行修改
    的頭像 發(fā)表于 02-03 09:49 ?1544次閱讀

    Spring Boot中整合兩種定時任務的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個 Spring 中的定時任務實現(xiàn)策略,當然也支持 Quartz,本文我們就來看下 Spring Boot 中兩種定時任務
    的頭像 發(fā)表于 04-07 14:55 ?2243次閱讀
    Spring Boot中整合兩種定<b class='flag-5'>時任務</b>的方法

    在Spring Boot中如何使用定時任務

    本文介紹在 Spring Boot 中如何使用定時任務,使用非常簡單,就不做過多說明了。
    的頭像 發(fā)表于 04-12 10:56 ?1568次閱讀

    如何動態(tài)添加修改刪除定時任務?

    如何動態(tài)添加修改刪除定時任務?那么我們一起看看具體怎么實現(xiàn),先看下本節(jié)大綱: (1)思路說明; (2)代碼解析; (3)修改定時任務執(zhí)行周期特別說明;
    的頭像 發(fā)表于 04-12 11:06 ?1824次閱讀

    Linux如何使用cron進行定時任務的操作

    按計劃執(zhí)行命令對于計算機來說非常重要,因為假如我親自去執(zhí)行一些任務的話,可能會因為多方面因素不能按時執(zhí)行,所以定時任務就顯得非常重要了! cron就是一個能夠執(zhí)行定時任務的命令,其實該命令本身不難,下面小編帶您詳細了解!
    的頭像 發(fā)表于 05-12 16:27 ?2722次閱讀

    python定時任務實踐

    由于程序需求,監(jiān)測配置變化需要設置定時任務,每分鐘執(zhí)行一次,對任務持久化要求不高,不需要時可以關閉定時任務
    的頭像 發(fā)表于 05-20 17:53 ?1773次閱讀
    python定<b class='flag-5'>時任務</b>實踐

    linux定時任務的用法總結

    習慣了使用 windows 的計劃任務,使用 linux 中的 crontab 管理定時任務時很不適應。
    的頭像 發(fā)表于 08-14 18:16 ?1610次閱讀
    linux定<b class='flag-5'>時任務</b>的用法總結

    Crontab定時任務完全指南

    在凌晨3點,當大多數(shù)人還在熟睡時,一位運維工程師的手機突然響起——線上數(shù)據(jù)庫備份失敗了。他匆忙起床,打開電腦,手動執(zhí)行備份腳本,整個過程耗時2小時。這樣的場景,在我剛入行時經常遇到。直到我真正掌握了crontab定時任務,才徹底擺脫了"人肉運維"的窘境。
    的頭像 發(fā)表于 09-05 10:03 ?859次閱讀