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

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

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

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

基于ARM編譯器版本5的工程遷移與適配-堆棧初始化以及總線異常問題

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

1、Heap region was used, but no heap region was defined

工程中,我使用的是自己的分散加載文件,并且沒有定義ARM_LIB_STACKHEAP,ARM_LIB_STACK,ARM_LIB_HEAP這些符號(hào),因?yàn)槲易约阂匦露x堆棧,就沒有使用這些符號(hào),因此在C代碼中加入下述代碼:

//不使用ARM提供的堆函數(shù)
__asm(".global__use_no_heap");

但是編譯的時(shí)候還是報(bào)錯(cuò):Error: L6915E: Library reports error: Heap region was used, but no heap region was defined。最初我以為是分散加載文件的問題,后來(lái)查看分析,覺得分散加載沒問題,于是就換個(gè)方向思考。

因?yàn)槲以贑代碼中添加了不使用ARM提供的堆函數(shù)的聲明,然而ARM_LIB_STACKHEAP,ARM_LIB_STACK,ARM_LIB_HEAP這些符號(hào)會(huì)在ARM官方代碼的堆棧初始化函數(shù)中進(jìn)行使用,那么我只要分析出是誰(shuí)在調(diào)用ARM官方的堆棧初始化函數(shù),就能夠解決這個(gè)問題了。

后來(lái)發(fā)現(xiàn)我的啟動(dòng)代碼中少寫了一個(gè)函數(shù)__rt_entry,這個(gè)函數(shù)的作用就是一些初始化工作,當(dāng)然也就包括初始化堆棧了。這個(gè)函數(shù)在ARM官方庫(kù)中已經(jīng)實(shí)現(xiàn),由于我沒有自定義__rt_entry函數(shù),因此在啟動(dòng)時(shí)會(huì)調(diào)用ARM官方的__rt_entry函數(shù),也就自然會(huì)調(diào)用ARM庫(kù)中的堆棧初始化函數(shù),在鏈接的過(guò)程中,當(dāng)發(fā)現(xiàn)分散加載文件沒有定義ARM_LIB_STACKHEAP,ARM_LIB_STACK,ARM_LIB_HEAP這些符號(hào)就報(bào)錯(cuò):Error: L6915E: Library reports error: Heap region was used, but no heap region was defined。

解決方法:自然是在我的啟動(dòng)文件中自定義一個(gè)__rt_entry函數(shù),該函數(shù)會(huì)調(diào)用main()函數(shù)。

2、啟動(dòng)過(guò)程中出現(xiàn)總線異常

在解決了上面第1個(gè)問題后,工程能夠成功的編譯和鏈接,但是程序運(yùn)行時(shí)會(huì)出現(xiàn)總線錯(cuò)誤,而且有時(shí)候代碼量減小又不會(huì)出現(xiàn)這個(gè)問題。最開始分析這個(gè)問題,花費(fèi)了不少時(shí)間,也沒有摸著門道。后來(lái)也是在我組長(zhǎng)的指點(diǎn)下才解決的。

首先分析下為什么這個(gè)總線異常問題有時(shí)會(huì)出現(xiàn),有時(shí)不會(huì)出現(xiàn)。這就得說(shuō)說(shuō)分散加載文件中加載域和執(zhí)行域中的一個(gè)標(biāo)志:NOCOMPRESS,AC6.12的armlink文檔中有對(duì)這個(gè)標(biāo)志的描述:

RW data compression is enabled by default. The NOCOMPRESS keyword enables you to specify that RW data in an execution region must not be compressed in the final image.

大致意思,默認(rèn)情況下RW數(shù)據(jù)會(huì)被壓縮放置在image中,只有在分散加載文件中相關(guān)的加載域與執(zhí)行域中使用標(biāo)志NOCOMPRESS時(shí),才不會(huì)對(duì)RW數(shù)據(jù)進(jìn)行壓縮。

因?yàn)槲覜]有使用NOCOMPRESS標(biāo)志,因此會(huì)對(duì)RW數(shù)據(jù)進(jìn)行壓縮,因此在image中的RW數(shù)據(jù)會(huì)比實(shí)際的長(zhǎng)度小一些。由于是我自己在啟動(dòng)代碼中初始化data和bss,因此在將flash中的RW data拷貝到RAM中時(shí),RW data的長(zhǎng)度我仍然使用的是未壓縮的數(shù)據(jù)長(zhǎng)度,該長(zhǎng)度大于壓縮數(shù)據(jù)的長(zhǎng)度,在將flash中的RW data拷貝到RAM中時(shí),當(dāng)長(zhǎng)度超過(guò)壓縮數(shù)據(jù)的長(zhǎng)度,flash就會(huì)產(chǎn)生保護(hù),從而觸發(fā)一個(gè)總線異常,而且異常的地址存儲(chǔ)在BFAR中。

解決方法:這里有兩種解決方法。

方法1:最簡(jiǎn)單的就是在分散加載文件中RW data相關(guān)的加載域和執(zhí)行域使用NOCOMPRESS標(biāo)志,當(dāng)然了這個(gè)方法的缺點(diǎn)就是產(chǎn)生的image文件會(huì)大一些。

方法2:可以在啟動(dòng)代碼中配置好sp,然后就不用去對(duì)RW data和bss進(jìn)行處理(屏蔽掉自己寫的RW data和bss的處理代碼),這些工作ARM官方庫(kù)會(huì)自行處理的(壓縮的RW data在拷貝到RAM中時(shí),ARM官方庫(kù)會(huì)進(jìn)行解壓縮的,這些ARM庫(kù)代碼在編譯和鏈接的時(shí)候會(huì)自動(dòng)的加入到image中)。







審核編輯:劉清

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

    關(guān)注

    134

    文章

    9167

    瀏覽量

    369208
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1369

    瀏覽量

    115007

原文標(biāo)題:基于ARM編譯器版本5的工程遷移與適配到ARM編譯器版本6.12 后續(xù)2 - 堆棧初始化以及總線異常問題

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    字符型、指針型等變量該如何初始化

    在敲代碼的時(shí)候,我們會(huì)給變量一個(gè)初始值,以防止因?yàn)?b class='flag-5'>編譯器的原因造成變量初始值的不確定性。對(duì)于數(shù)值類型的變量往往初始化為0,但對(duì)于其他類型的變量,如字符型、指針型等變量等該如何
    發(fā)表于 09-23 11:50 ?2231次閱讀

    Keil修改ARM編譯器及配置方法

    Keil MDK自 V5.36 版本之后,默認(rèn)就不帶 Arm Compiler V5版本編譯器。如果需要使用 V
    發(fā)表于 09-19 10:41 ?4965次閱讀
    Keil修改<b class='flag-5'>ARM</b><b class='flag-5'>編譯器</b>及配置方法

    學(xué)習(xí)ARM過(guò)程中的堆棧初始化詳解

    指令強(qiáng)制性的要 求使用R13作為堆棧指針。由于處理的每種運(yùn)行模式均有自己獨(dú)立的物理寄存R13,在用戶應(yīng)用程序的初始化部分,一般都要初始化
    發(fā)表于 04-20 14:11

    S32K146 ECC初始化,為什么不初始化堆棧空間?

    S32K146 ECC初始化,為什么不初始化堆棧空間?
    發(fā)表于 04-20 12:55

    ARM編譯器for Embedded Version 6.20移植和兼容性指南

    Arm?編譯器嵌入式遷移和兼容性指南為從舊版本Arm編譯器
    發(fā)表于 08-10 07:17

    Arm編譯器遷移和兼容性指南

    Arm?編譯器遷移和兼容性指南為從舊版本Arm編譯器遷移
    發(fā)表于 08-10 06:57

    用于嵌入式FUSA的ARM編譯器移植和兼容性指南

    《用于Embedded FUSA的ARM?編譯器遷移與兼容性指南》為從舊版本ARM編譯器
    發(fā)表于 08-29 07:02

    ICC AVR編譯器的安裝與使用

    ICCAVR編譯器的安裝、運(yùn)行、破解、使用 用ICCAVR編譯器產(chǎn)生初始化程序和程序框架
    發(fā)表于 07-09 18:06 ?258次下載

    avr初始化代碼生成器中文版免費(fèi)下載

    avr初始化代碼生成器,中文界面,適用于ICCAVR和WINAVR(GCC)編譯器,是工程師的實(shí)用軟件。
    發(fā)表于 12-12 16:35 ?0次下載
    avr<b class='flag-5'>初始化</b>代碼生成器中文版免費(fèi)下載

    關(guān)于KEIL ARM編譯器的使用介紹

    KEIL ARM編譯器的使用
    的頭像 發(fā)表于 07-10 10:50 ?6375次閱讀

    EE-88:使用21xx編譯器初始化C語(yǔ)言中的變量

    EE-88:使用21xx編譯器初始化C語(yǔ)言中的變量
    發(fā)表于 05-19 21:08 ?1次下載
    EE-88:使用21xx<b class='flag-5'>編譯器</b><b class='flag-5'>初始化</b>C語(yǔ)言中的變量

    什么是指定初始化

    按照這種固定的順序,我們可以依次給 a[0] 和 a[8] 賦值。因?yàn)闆]有對(duì) a[9] 賦值,所以編譯器會(huì)將 a[9] 默認(rèn)設(shè)置為0。當(dāng)數(shù)組長(zhǎng)度比較小時(shí),使用這種方式初始化比較方便。
    的頭像 發(fā)表于 02-17 09:32 ?976次閱讀

    使用ARMClang V6版本編譯器出現(xiàn)錯(cuò)誤的解決方法

    很多STM32開發(fā)者使用ARM mdk IDE進(jìn)行開發(fā),我們知道ARM MDK IDE早已推出ARMClang V6版本編譯器了。不過(guò),當(dāng)我們把在V
    的頭像 發(fā)表于 06-07 12:32 ?7766次閱讀
    使用ARMClang V6<b class='flag-5'>版本</b><b class='flag-5'>編譯器</b>出現(xiàn)錯(cuò)誤的解決方法

    基于ARM編譯器版本5工程遷移適配ARM編譯器版本6.12

    AC5和AC6的主要差異是AC6使用armclang代替了armcc,因此在AC6中就沒有armcc這個(gè)編譯工具了。并且armclang的編譯參數(shù)相對(duì)于之前的armcc的編譯參數(shù)也有許
    的頭像 發(fā)表于 11-12 11:17 ?8790次閱讀
    基于<b class='flag-5'>ARM</b><b class='flag-5'>編譯器</b><b class='flag-5'>版本</b><b class='flag-5'>5</b>的<b class='flag-5'>工程</b><b class='flag-5'>遷移</b>與<b class='flag-5'>適配</b>到<b class='flag-5'>ARM</b><b class='flag-5'>編譯器</b><b class='flag-5'>版本</b>6.12

    EE-88:使用21xx編譯器在C中初始化變量

    電子發(fā)燒友網(wǎng)站提供《EE-88:使用21xx編譯器在C中初始化變量.pdf》資料免費(fèi)下載
    發(fā)表于 01-13 15:54 ?0次下載
    EE-88:使用21xx<b class='flag-5'>編譯器</b>在C中<b class='flag-5'>初始化</b>變量
    主站蜘蛛池模板: 在线免费视频手机版 | free性欧美69高清 | 精品视频免费看 | 伊人亚洲 | 男男污肉高h坐便器调教 | 国产精品毛片一区二区三区 | 日本免费黄色 | 天天操操| 高清视频 一区二区三区四区 | a理论片 | 亚洲午夜免费视频 | 久久综合社区 | 97色综合| 日本不卡一区视频 | 99久久999久久久综合精品涩 | 99热最新 | 一区精品视频 | aa三级动态图无遮无挡 | 免费观看美女被cao视频 | 欧美高清milf在线播放 | 国产一区二区三区在线观看视频 | 最近高清在线国语 | 久久香蕉国产线看观看亚洲片 | 男女交性视频免费视频 | 5566成人| 天天狠天天操 | 六月丁香激情 | 嫩草影院播放地址一二三 | 性欧美videofree另类超大 | 色在线播放 | 超薄肉色丝袜精品足j福利 超黄视频在线观看 | 成人窝窝午夜看片 | 欧美性猛交xxxx乱大交 | 唯美久草 | 久久男人的天堂色偷偷 | 狠狠操夜夜爱 | 国产毛片久久久久久国产毛片 | 亚洲一区二区在线播放 | 欧美黄色高清 | 日本黄在线| 午夜视频网站在线观看 |