RM新时代网站-首页

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

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

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

RISC-V PMP調(diào)試

嵌入式USB開(kāi)發(fā) ? 來(lái)源:嵌入式USB開(kāi)發(fā) ? 作者:嵌入式USB開(kāi)發(fā) ? 2023-06-08 11:52 ? 次閱讀

本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注

RISC-V PMP調(diào)試 (qq.com)

PMP導(dǎo)致異常問(wèn)題分析

現(xiàn)象和確認(rèn)異常原因

觸發(fā)了異常中斷

查看異常原因?yàn)? store access-fault exception.

并查看異常訪問(wèn)的地址為0x28382ad0

圖片

gdb也確認(rèn)這個(gè)地址確實(shí)只能讀不能寫(xiě)

圖片

圖片

查看PMP寄存器確認(rèn)根本原因

圖片

Pmpcfg0 對(duì)應(yīng)地址pmp0cfg~pmp3cfg

Pmpcfg1 對(duì)應(yīng)地址pmp4cfg~pmp7cfg

Pmpcfg2 對(duì)應(yīng)地址pmp8cfg~pmp11cfg

Pmpcfg3 對(duì)應(yīng)地址pmp12cfg~pmp15cfg

pmpcfg3為0x5100即對(duì)應(yīng)pmp13cfg為0x51

8位的配置屬性0x51如下 只讀

A=10 即NA4表示4字節(jié)區(qū)域,即pmpaddrxx對(duì)應(yīng)的4字節(jié)區(qū)域

圖片

L=1

A=10=2 NA4

R=1

X=0

W=0

圖片

圖片

對(duì)應(yīng)pmp13cfg的pmpaddr13=0xa0e0ab4 是34位地址右移2位的值,所以左移兩位恢復(fù)實(shí)際值是0x2C38 2AD0

圖片

表示的范圍是[0x2C38 2AD0,0x2C38 2AD3] 4字節(jié)

圖片

我們的地址空間是0x28000000-0x2bffffff

寫(xiě)0x2C38 2AD0實(shí)際映射到了寫(xiě)0x2838 2AD0 64M繞回。

所以寫(xiě)0x2838 2AD0這個(gè)不具備寫(xiě)屬性的地址觸發(fā)了store access-fault

exception.異常

所以以上確認(rèn)了原因是PMP設(shè)置了該地址不具備寫(xiě)屬性,而代碼中去寫(xiě)所以導(dǎo)致了異常。

代碼

我們的空間最多只有128M,最多到0x2bff ffff,為什么寫(xiě)了個(gè)0x2C38 2AD0的地址進(jìn)去,

先找到對(duì)應(yīng)的代碼

由于是用的所以13的配置,所以先找這個(gè)索引對(duì)應(yīng)

#define PMP_FIXED_INDEX_TASK_STACK 13

然后再搜索這個(gè)索引

找到如下函數(shù)

圖片

這個(gè)函數(shù)在vTaskSwitchContext調(diào)用

if (prev != pxCurrentTCB) {


          pmp_task_stack_set((uint32_t)pxCurrentTCB- >pxStack);


      }

即任務(wù)有切換時(shí),設(shè)置棧底4字節(jié)不可寫(xiě),用于棧溢出檢測(cè)。

加個(gè)死循環(huán)用于在設(shè)置該值時(shí)停住

圖片

圖片

所以要確認(rèn)什么時(shí)候?qū)懥?x2838 2AD0這個(gè)地址,由于使能了PMP,所以watchpoint抓不到,先觸發(fā)了pmp的異常。

所以先關(guān)閉pmp設(shè)置

if (prev != pxCurrentTCB) {


          ///pmp_task_stack_set((uint32_t)pxCurrentTCB- >pxStack);


      }

然后設(shè)置數(shù)據(jù)斷點(diǎn)

watch (unsigned int )0x28382ad0

運(yùn)行

第一次停在棧初始化,第二次停在如下處

圖片

可以看到

任務(wù)棧的地址是 0x28382ad0開(kāi)始但是 臨時(shí)變量mem的地址是0x28382a60在棧前面去了,所以棧溢出了。

圖片

圖片

把棧改大即可

審核編輯:湯梓紅

聲明:本文內(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)注

    5082

    文章

    19104

    瀏覽量

    304791
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    578

    瀏覽量

    33923
  • PMP
    PMP
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    18163
  • RISC-V
    +關(guān)注

    關(guān)注

    45

    文章

    2270

    瀏覽量

    46125
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RISC-V指令異常調(diào)試實(shí)例

    本文以一個(gè)簡(jiǎn)單的實(shí)例介紹RISC-V指令異常的調(diào)試過(guò)程,思路都是一樣的,遇到其他情況時(shí)分析過(guò)程也類似。
    的頭像 發(fā)表于 06-08 10:50 ?1916次閱讀
    <b class='flag-5'>RISC-V</b>指令異常<b class='flag-5'>調(diào)試</b>實(shí)例

    什么是RISC-V

    siFive搞RISC-V 賽昉搞RISC-V 香山搞RISC-V 到底什么是RISC-V? 先不問(wèn)有什么用,RISC-V目前的能力來(lái)說(shuō),工
    發(fā)表于 02-02 10:41

    RISC-V Summit China 2024 | 青稞RISC-V+接口PHY,賦能RISC-V高效落地

    量產(chǎn)芯片的關(guān)鍵技術(shù);公司籌備了第二屆RISC-V中國(guó)峰會(huì)的南京會(huì)場(chǎng);青稞RISC-V的單雙線調(diào)試技術(shù),在第三屆峰會(huì)上入選RISC-V新技術(shù)與新成果。 02 連接聯(lián)網(wǎng)連世界 有核有根有
    發(fā)表于 08-30 17:37

    玄鐵VirtualZone:基于RISC-V架構(gòu)的安全擴(kuò)展

    的TrustZone、Intel的SGX以及AMD的SEV等。本文主要描述基于RISC-V架構(gòu)的玄鐵C系列處理器的安全擴(kuò)展,該擴(kuò)展主要基于RISC-V架構(gòu)提供的PMP保護(hù)機(jī)制和多層特權(quán)模型,虛擬出多個(gè)
    發(fā)表于 09-01 14:38

    RISC-V規(guī)范的演進(jìn) RISC-V何時(shí)爆發(fā)?

    RISC-V的關(guān)注度越來(lái)越高,開(kāi)源的理念也正在被越來(lái)越多的開(kāi)發(fā)者和公司接受。對(duì)于尚不成熟的RISC-V而言,無(wú)論是規(guī)范和技術(shù)的演進(jìn)還是生態(tài)的建設(shè),還有人才和專利都還有不小挑戰(zhàn)。2021年RISC-V
    的頭像 發(fā)表于 02-11 10:10 ?3170次閱讀

    RISC-V調(diào)試標(biāo)準(zhǔn)及跟蹤技術(shù)

    本文主要詳細(xì)介紹了RISC-V調(diào)試標(biāo)準(zhǔn)以及RISC-V的跟蹤技術(shù),感興趣的小伙伴跟小編一起了解一下吧。
    的頭像 發(fā)表于 06-23 17:19 ?2927次閱讀
    <b class='flag-5'>RISC-V</b>的<b class='flag-5'>調(diào)試</b>標(biāo)準(zhǔn)及跟蹤技術(shù)

    使用Eclipse和MCUXpresso IDE調(diào)試RV32M1-VEGA RISC-V開(kāi)發(fā)板

    使用Eclipse和MCUXpresso IDE調(diào)試RV32M1-VEGA RISC-V開(kāi)發(fā)板
    發(fā)表于 12-06 20:06 ?7次下載
    使用Eclipse和MCUXpresso IDE<b class='flag-5'>調(diào)試</b>RV32M1-VEGA <b class='flag-5'>RISC-V</b>開(kāi)發(fā)板

    RISC-V CPU調(diào)試機(jī)制的設(shè)計(jì)原理

    本文將詳細(xì)介紹RISC-V CPU調(diào)試機(jī)制的設(shè)計(jì)原理。
    發(fā)表于 10-18 09:19 ?2230次閱讀

    RISC-V學(xué)習(xí)筆記【1】RISC-V概述

    國(guó)產(chǎn)處理器芯片起步較晚,從2013年至今,集成電路每年的進(jìn)口額均超過(guò)了 2000 億美元。RISC-V和AI(人工智能)芯片是我國(guó)最有希望突破的領(lǐng)域之一。RISC-V使用的領(lǐng)域還是對(duì)于生態(tài)依賴比較
    發(fā)表于 11-24 09:28 ?2623次閱讀

    RISC-VRISC-V AI的未來(lái)(特邀講座)

    主題演講:RISC-VRISC-V AI的未來(lái)(特邀講座)ppt分享
    發(fā)表于 07-14 17:15 ?16次下載

    RISC-V調(diào)試和完善的跟蹤解決方案

    RISC-V調(diào)試和完善的跟蹤解決方案ppt分享
    發(fā)表于 07-14 17:15 ?0次下載

    RISC-V設(shè)計(jì)支持工具,支持RISC-V技術(shù)的基礎(chǔ)

    RISC-V設(shè)計(jì)支持工具,支持RISC-V技術(shù)的基礎(chǔ) ppt分享
    發(fā)表于 07-14 17:15 ?12次下載

    Imagination CPU 系列研討會(huì) | RISC-V 平臺(tái)的性能分析和調(diào)試

    為了讓開(kāi)發(fā)者及工程師深入了解Imagination的CPU產(chǎn)品及相關(guān)解決方案,Imagination將陸續(xù)推出5期線上研討會(huì),包含:RISC-V平臺(tái)的性能分析和調(diào)試RISC-V安全和全球平臺(tái)可信
    的頭像 發(fā)表于 08-10 08:28 ?284次閱讀
    Imagination CPU 系列研討會(huì) | <b class='flag-5'>RISC-V</b> 平臺(tái)的性能分析和<b class='flag-5'>調(diào)試</b>

    RISC-V Summit China 2024 青稞RISC-V+接口PHY,賦能RISC-V高效落地

    第二屆RISC-V中國(guó)峰會(huì)的南京會(huì)場(chǎng);青稞RISC-V的單雙線調(diào)試技術(shù),在第三屆峰會(huì)上入選RISC-V新技術(shù)與新成果。
    的頭像 發(fā)表于 08-30 18:18 ?1474次閱讀
    <b class='flag-5'>RISC-V</b> Summit China 2024  青稞<b class='flag-5'>RISC-V</b>+接口PHY,賦能<b class='flag-5'>RISC-V</b>高效落地

    加入全球 RISC-V Advocate 行列,共筑 RISC-V 的未來(lái) !

    加入RISC-VAdvocate行列!我們正在尋找來(lái)自世界各地的RISC-V愛(ài)好者,通過(guò)全球推廣和參與,成為支持RISC-V進(jìn)步的關(guān)鍵參與者。作為一名RISC-VAdvocate,您將
    的頭像 發(fā)表于 09-10 08:08 ?372次閱讀
    加入全球 <b class='flag-5'>RISC-V</b> Advocate 行列,共筑 <b class='flag-5'>RISC-V</b> 的未來(lái) !
    RM新时代网站-首页