在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析Cortex-M FPU的Lazy Stacking機(jī)制

嵌入式那些事 ? 來(lái)源:嵌入式那些事 ? 2023-10-16 09:58 ? 次閱讀

1.浮點(diǎn)運(yùn)算指令

浮點(diǎn)運(yùn)算指令用于FPU單元的單精度浮點(diǎn)運(yùn)算。浮點(diǎn)運(yùn)算指令都是用V開(kāi)頭的匯編指令。

只有在FPU開(kāi)啟的狀態(tài)下,才能運(yùn)行這些指令。

如果在FPU沒(méi)有開(kāi)啟的狀態(tài)下,執(zhí)行了浮點(diǎn)運(yùn)算指令,系統(tǒng)會(huì)產(chǎn)生一個(gè)硬fault異常。

2.為什么FPU需要Lazy Stacking

當(dāng)Cortex-M系列的芯片多了對(duì)浮點(diǎn)運(yùn)算的支持之后,在中斷響應(yīng)和退出時(shí)會(huì)增加對(duì)FPU擴(kuò)展寄存器的保護(hù)。

入棧浮點(diǎn)寄存器組所帶來(lái)的影響有如下幾方面:

a.增加stack frame所占的存儲(chǔ)區(qū)域;

b.增加中斷響應(yīng)延遲;

c.在OS環(huán)境下,增加上下文切換時(shí)間;

為了減少中斷響應(yīng)延遲和OS環(huán)境下的上下文切換時(shí)間,引入了FPU的Lazy Stacking機(jī)制。

3.FPU Lazy Stacking簡(jiǎn)述

Lazy Stacking機(jī)制在下面的情況下,會(huì)跳過(guò)對(duì)浮點(diǎn)寄存器組的入棧操作(僅預(yù)留浮點(diǎn)寄存器組S0~S15和FPSCR的存儲(chǔ)空間),以避免中斷延遲的增加:

a.中斷處理函數(shù)不使用FPU;

b.被中斷的程序未曾用到FPU;

被中斷函數(shù)使用了FPU,如果在執(zhí)行中斷處理函數(shù)時(shí)也用到了FPU,在執(zhí)行到中斷函數(shù)的第一條浮點(diǎn)指令時(shí),內(nèi)核會(huì)暫停,然后硬件自動(dòng)將先前的浮點(diǎn)寄存器內(nèi)容(S0~S15,F(xiàn)PSCR)壓入預(yù)留的存儲(chǔ)空間中。

Lazy Stacking是可以通過(guò)軟件使能和關(guān)閉的,如下述操作:

a.使能Lazy Stacking必須同時(shí)置位FPCCR寄存器的LSPEN位和ASPEN位;

b.清除FPCCR寄存器的LSPEN位可以關(guān)閉Lazy Stacking;

關(guān)于FPCCR寄存器的LSPEN位和ASPEN位的組合情況有如下說(shuō)明:

FPCCR.ASPEN FPCCR.LSPEN 說(shuō)明
0 0 取消自動(dòng)狀態(tài)保存。中斷響應(yīng)時(shí)不入棧FPU寄存器。
應(yīng)用場(chǎng)景:
1. 應(yīng)用中沒(méi)有用到OS或者多任務(wù)調(diào)度,如果沒(méi)有任何中斷異常用到FPU。
2. 在應(yīng)用程序代碼中只有一個(gè)中斷用到FPU。如果有多個(gè)中斷用到FPU,那么中斷嵌套必須被禁止。可以通過(guò)把所有的中斷優(yōu)先級(jí)設(shè)置位相同優(yōu)先級(jí)實(shí)現(xiàn)。
1 0 關(guān)閉Lazy Stacking,僅打開(kāi)自動(dòng)狀態(tài)保存。
如果用到FPU,CONTROL.FPCA位自動(dòng)置1。中斷響應(yīng)時(shí),硬件自動(dòng)入棧S0~S15和FPSCR寄存器。
1 1 打開(kāi)Lazy Stacking,打開(kāi)自動(dòng)狀態(tài)保存。
如果用到FPU,CONTROL.FPCA位自動(dòng)置1。如果響應(yīng)中斷時(shí),CONTROL.FPCA為1,處理器在堆棧中預(yù)留FPU寄存器的空間,同時(shí)將FPCCR.LSPACT位置1。但是PFU寄存器并沒(méi)有馬上入棧,直到在中斷處理函數(shù)中用到FPU時(shí)再入棧。
0 1 非法配置

4.FPU Lazy Stacking用到的幾個(gè)重要標(biāo)志

浮點(diǎn)寄存器入棧和出棧過(guò)程中用到的標(biāo)志位:

標(biāo)志位 說(shuō)明
CONTROL.FPCA 0 = 當(dāng)前上下文中沒(méi)有用到FPU
1 = 當(dāng)前上下文中用到FPU
這里的上下文,即表示普通的任務(wù)上下文,也表示中斷上下文。
FPCCR.LSPACT 0 = 退出Lazy狀態(tài)(實(shí)際入棧后被硬件清零或者中斷返回時(shí)硬件清零)
1 = 進(jìn)入Lazy狀態(tài)(棧幀中預(yù)留了FPU寄存器的空間,但沒(méi)有實(shí)際入棧)
EXC_RETURN[4] 0 = 棧幀中包括了FPU寄存器空間
1 = 棧幀中不包括FPU寄存器空間

5.FPU Lazy Stacking使用實(shí)例

下面的例子都是在使能了FPU的Lazy Stacking機(jī)制下進(jìn)行說(shuō)明的。

(1).被中斷的程序和中斷程序中都沒(méi)有使用到FPU,其示意圖如下所示:

7f2ac6e6-6a67-11ee-939d-92fbcf53809c.png

Snipaste_2020-04-10_11-46-40

(2).被中斷的程序用到了FPU,中斷程序中沒(méi)有使用到FPU,其示意圖如下所示:

7f438bf4-6a67-11ee-939d-92fbcf53809c.png

Snipaste_2020-04-10_12-38-54

(3).被中斷的程序和中斷程序中都用到了FPU,其示意圖如下所示:

7f5a885e-6a67-11ee-939d-92fbcf53809c.png

Snipaste_2020-04-10_14-05-19

6.RTOS使用Lazy Stacking

首先肯定是要使能FPU的Lazy Stacking,然后在PendSV切換任務(wù)的時(shí)候做下面的處理:

(1).上文保存階段:檢測(cè) EXC_RETURN 的 bit4(通過(guò)LR訪(fǎng)問(wèn)),如果該位為零,就入棧剩下的S16-S31 即可;如果該位為 1,則無(wú)需保存 FPU 寄存器,因?yàn)樵撊蝿?wù)未曾使用過(guò) FPU。當(dāng)然了這里有一個(gè)標(biāo)志數(shù)據(jù),表示當(dāng)前任務(wù)是否使用了FPU,便于下次任務(wù)恢復(fù)時(shí),確定是否需要從堆棧彈出內(nèi)容到S16-S31。標(biāo)志數(shù)據(jù)也壓入當(dāng)前任務(wù)的堆棧進(jìn)行保存。

(2).下文恢復(fù)階段:從堆棧中彈出標(biāo)志數(shù)據(jù),判斷待恢復(fù)的任務(wù)是否使用了FPU,如果使用了FPU,那么從堆棧中彈出內(nèi)容到S16-S31;如果沒(méi)有使用FPU,則不需要恢復(fù)FPU寄存器。接下來(lái)需要修改當(dāng)前LR寄存器的內(nèi)容,如果使用了FPU,LR(EXC_RETURN)的bit4需要清零,來(lái)保證在退出PendSV時(shí)將先前壓入該任務(wù)堆棧的S0-S15和FPSCR寄存器出棧;如果沒(méi)有使用FPU,LR(EXC_RETURN)的bit4需要置1,來(lái)告訴CPU該任務(wù)棧幀中不包括FPU寄存器內(nèi)容,不需要進(jìn)行出棧操作。

對(duì)于S0-S15和FPSCR寄存器,如果任務(wù)使用了FPU,在進(jìn)入到PendSV之前,就在任務(wù)堆棧中預(yù)留了存儲(chǔ)空間,當(dāng)執(zhí)行上文保存階段的S16-S31的入棧操作時(shí),會(huì)首先將S0-S15和FPSCR寄存器壓入先前堆棧預(yù)留的存儲(chǔ)空間中,接著再將S16-S31壓入堆棧。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5363

    瀏覽量

    121205
  • SCR
    SCR
    +關(guān)注

    關(guān)注

    2

    文章

    150

    瀏覽量

    44322
  • 中斷處理
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    11016
  • FPU
    FPU
    +關(guān)注

    關(guān)注

    0

    文章

    42

    瀏覽量

    21383
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    229

    瀏覽量

    29843

原文標(biāo)題:Cortex-M FPU的Lazy Stacking機(jī)制

文章出處:【微信號(hào):嵌入式那些事,微信公眾號(hào):嵌入式那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    為什么說(shuō)Cortex-M是低功耗應(yīng)用的首選

    雖然Cortex-M處理器家族目標(biāo)瞄準(zhǔn)效能光譜較低端的區(qū)域,但是和大多數(shù)微控制器(MCU)采用的其他典型處理器相比,Cortex-M的效能依然算相當(dāng)強(qiáng)悍。舉例來(lái)說(shuō),像是許多高效能微控制器所采用的Cortex-M4與
    發(fā)表于 07-28 09:44 ?3521次閱讀
    為什么說(shuō)<b class='flag-5'>Cortex-M</b>是低功耗應(yīng)用的首選

    你總得知道你為什么要用Cortex-M

    你總得知道你為什么要用Cortex-M無(wú)論您是資深嵌入式工程師,還是懷著滿(mǎn)滿(mǎn)好奇的嵌入式小白,總會(huì)有這樣的一些疑惑:Cortx-A、R、M到底什么區(qū)別呢?M0、M0+、
    發(fā)表于 06-09 16:50

    PIC32MK FPU與上下文切換

    with the Cortex M4F, which gives three options: never, always, and lazy (where lazy means
    發(fā)表于 08-27 15:03

    ARM Cortex-M堆棧機(jī)制介紹

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是ARM Cortex-M堆棧機(jī)制。  今天給大家分享的這篇依舊是2016年之前痞子衡寫(xiě)的技術(shù)文檔,花了點(diǎn)時(shí)間重新編排了一下
    發(fā)表于 12-16 06:26

    ARM Cortex-M內(nèi)核的相關(guān)資料推薦

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是ARM Cortex-M功能模塊,不過(guò)側(cè)重點(diǎn)是三款安全特性處理器。  ARM Cortex-M處理器家族發(fā)展至今(2020),已有
    發(fā)表于 12-27 07:21

    Atmel Studio 6軟件中如何調(diào)試ARM Cortex-M

    Atmel Studio 6軟件中如何調(diào)試ARM Cortex-M
    的頭像 發(fā)表于 07-04 10:49 ?4281次閱讀

    關(guān)于STM32和Cortex-M內(nèi)核系列介紹(1)

    Cortex-M內(nèi)核系列和STM32-講座
    的頭像 發(fā)表于 07-05 01:07 ?8129次閱讀

    關(guān)于STM32與Cortex-M內(nèi)核系列的介紹(2)

    Cortex-M內(nèi)核系列和STM32-講座3
    的頭像 發(fā)表于 07-05 00:45 ?4582次閱讀

    關(guān)于Cortex-M 調(diào)試應(yīng)用的介紹

    Cortex-M 調(diào)試應(yīng)用
    的頭像 發(fā)表于 07-10 00:56 ?2664次閱讀

    米爾科技Cortex-M Prototyping System +介紹

    ARM? Cortex?-M原型系統(tǒng) MPS2+,為Cortex-M 系列微處理器設(shè)計(jì)的原型驗(yàn)證評(píng)估系統(tǒng),包含最新的Cortex-M7 及Corte
    的頭像 發(fā)表于 11-14 10:45 ?1983次閱讀
    米爾科技<b class='flag-5'>Cortex-M</b> Prototyping System +介紹

    Cortex-M內(nèi)核的MPU內(nèi)存保護(hù)單元

    講講Cortex-M內(nèi)核的MPU內(nèi)存保護(hù)單元
    的頭像 發(fā)表于 03-04 11:17 ?3758次閱讀
    <b class='flag-5'>Cortex-M</b>內(nèi)核的MPU內(nèi)存保護(hù)單元

    Cortex-M可以跑Linux操作系統(tǒng)嗎?

    Cortex-M可以跑Linux操作系統(tǒng)嗎?
    發(fā)表于 12-01 11:36 ?2次下載
    <b class='flag-5'>Cortex-M</b>可以跑Linux操作系統(tǒng)嗎?

    no cortex-m sw device found 問(wèn)題解決【轉(zhuǎn)】

    no cortex-m sw device found 問(wèn)題解決【轉(zhuǎn)】
    發(fā)表于 12-02 17:36 ?33次下載
    no <b class='flag-5'>cortex-m</b> sw device found 問(wèn)題解決【轉(zhuǎn)】

    Cortex-M位帶操作的原理

    Cortex-M位帶操作的原理
    的頭像 發(fā)表于 10-24 15:27 ?929次閱讀
    <b class='flag-5'>Cortex-M</b>位帶操作的原理

    如何使用Keil打開(kāi)GD32 FPU及使用ARM DSP庫(kù) ?

    GD32目前支持ARM Cortex-M和RISC-V兩種內(nèi)核系列芯片,其中Cortex-M內(nèi)核已經(jīng)支持的有M3、M4、M23、
    的頭像 發(fā)表于 01-13 09:42 ?3955次閱讀
    如何使用Keil打開(kāi)GD32 <b class='flag-5'>FPU</b>及使用ARM DSP庫(kù) ?
    主站蜘蛛池模板: 亚洲欧美日韩另类精品一区二区三区 | 在线毛片网 | 免费久久久久 | 亚洲成人高清 | 人人天天爱天天做天天摸 | 日本三级吹潮 | 婷婷网五月天天综合天天爱 | 日本内谢69xxxx免费 | 男女免费网站 | 日本人的色道www免费一区 | 国产女同在线观看 | 久久久久久久国产精品电影 | 日韩三级中文 | 夜夜艹天天干 | 欧美一级黄色影片 | 最近观看免费高清视频 | 巨尻在线观看 | 国模在线视频 | www日| 日韩美aaa特级毛片 日韩美a一级毛片 | 国产亚洲网站 | 在线观看亚洲一区二区 | 国产aa| 日韩一级在线 | 夜间视频在线观看 | 国产aaaaa一级毛片 | 久久亚洲精品国产亚洲老地址 | 欧美成人69 | 女人张开腿让男人桶免费最新 | 国产精品福利一区二区亚瑟 | 濑亚美莉iptd619在线观看 | 黄视频福利 | 青娱乐伊人 | 午夜国产在线观看 | 人人澡人| 美女被免费网站视频在线 | 国产精品高清一区二区三区不卡 | 在线亚洲欧美性天天影院 | 五月婷婷深深爱 | videosxxoo18欧美| 美女视频永久黄网站免费观看国产 |