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

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

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

編譯PIC程序時(shí)RAM使用

麥辣雞腿堡 ? 來源:Microchip微芯 ? 作者:Microchip微芯 ? 2023-01-22 16:33 ? 次閱讀

(1)問:當(dāng)我在編譯一個(gè)PIC的程序時(shí)得到這樣的報(bào)錯(cuò):

::Can't find space for psect rbss_0 in segment BANK0 (error)

這究竟是什么意思?

答:它說明你已經(jīng)用完了RAM bank0的空間,而且空間還不夠(由rbss_0名稱得出)。在不同的情況下,這樣的報(bào)錯(cuò)也可能是提到class COMBANK的。出現(xiàn)這種報(bào)錯(cuò),你可能需要做的是,要移動(dòng)一些變量到bank1,2或3。

你可以在一些全局變量的聲明前加上一個(gè)前綴限定符,像bank1,例如:

bank1 int fred;

當(dāng)然,你應(yīng)該把會(huì)經(jīng)常訪問的變量歸為一組,并且放置到同一個(gè)bank。你不能夠?qū)植孔兞?、函?shù)的參數(shù)來使用bank限定。對(duì)于位變量使用bank限定也是可以的。但是,對(duì)指針使用bank限定一定要當(dāng)心,例如:

bank2 char * p;

這是一個(gè)指向bank2內(nèi)char型數(shù)據(jù)的指針,這個(gè)指針本身(p)還是在bank0里的。

下面這個(gè)聲明:

bank2 char * bank1 p;

這是一個(gè)指向bank2內(nèi)char型數(shù)據(jù)的指針,但指針本身是位于bank1里的。

(2)問:為什么編譯器不會(huì)自動(dòng)地開始使用bank1、2、3呢?

答:因?yàn)槟憧梢园迅髯元?dú)立編譯的目標(biāo)文件鏈接到一起,在鏈接之前是不太可能知道所有的東西是否在存儲(chǔ)空間里放得下,到鏈接時(shí)再來重新分配變量到其他bank已經(jīng)為時(shí)太晚了。如果代碼產(chǎn)生器是用不假定某一個(gè)變量位于哪個(gè)bank的方式來產(chǎn)生代碼,那么它將不得不在每一個(gè)RAM訪問之前和之后,都要產(chǎn)生設(shè)置和重設(shè) bank選擇位的指令,這將是一個(gè)完全不能接受的編譯結(jié)果。

即使是嘗試對(duì)bank0是否溢出做最好的猜測,對(duì)于一個(gè)將被編譯的模塊來說也是近乎不可能的——函數(shù)調(diào)用圖的一點(diǎn)點(diǎn)微小的變化就可能很大程度地改變變量分配的需求。

基于這些原因,我們總結(jié)出,除了要求用戶指定bank之外暫時(shí)沒有可行的替代方案。(譯者注:這里基本都是針對(duì)PICC STD版本而言的,對(duì)于PRO版本,因?yàn)榫幾g模式根本改變,前面提到的(1)(2)問題都得到了解決。)

(3)問:我讀了手冊還是不能確切地知道什么東西去了哪里。你能告訴我究竟RAM是怎么來組織的嗎?

答:Bank0是給非const變量使用的,它們有:

1) 局部變量;
    2) 靜態(tài)或者全局的變量,沒有用限定符指定到其他bank的;
    3) 中斷寄存器保護(hù);
    4) 臨時(shí)位置(它們將盡可能地被放置到common RAM)。

明確地用bankx限定的東西(不包括局部變量和函數(shù)參數(shù))會(huì)被放到相應(yīng)的bank。局部變量(例如:函數(shù)內(nèi)部的不是靜態(tài)的變量)是不能夠被分配到其他bank去的。

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

    關(guān)注

    8

    文章

    1344

    瀏覽量

    114214
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1602

    瀏覽量

    48896
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PIC單片機(jī)程序設(shè)計(jì)的基本結(jié)構(gòu)框架

    為了快速掌握PIC單片機(jī)源程序的基本結(jié)構(gòu),這里給出一個(gè)典型的程序結(jié)構(gòu)框架。建立源程序時(shí)首先用偽指令TITLE提供程序的標(biāo)題,接著給出整個(gè)
    發(fā)表于 11-04 17:18 ?1524次閱讀

    編譯程序時(shí)遇到問題

    小弟單片機(jī)新手在編譯程序時(shí)遇到下列問題,求高手指教!問題截圖在圖片中,源代碼再壓縮文件中
    發(fā)表于 10-12 17:27

    如何解決編譯led_on程序時(shí)出現(xiàn)的錯(cuò)誤?

    我在編譯led_on 程序時(shí)出現(xiàn)以下錯(cuò)誤,麻煩大家解答一下
    發(fā)表于 07-12 01:14

    如何解決使用MPLAB開發(fā)PIC無法通過編譯的問題

    序用PIC18F46K80作為處理器,MPLABX為IDE,在寫完程序時(shí)編譯無法通過,會(huì)報(bào)大量的warning、error。經(jīng)查閱資料和反復(fù)安裝IDE,得出結(jié)果是交叉編譯環(huán)境安裝不對(duì)。
    發(fā)表于 11-25 06:08

    kendryte編譯程序時(shí)報(bào)錯(cuò)是為什么?

    kendryte編譯程序時(shí)報(bào)錯(cuò)
    發(fā)表于 09-14 06:18

    PIC系列單片機(jī)WINDOWS版反編譯軟件

    PIC系列單片機(jī)WINDOWS版反編譯軟件
    發(fā)表于 04-14 15:06 ?0次下載

    程序時(shí)間控制電路圖

    程序時(shí)間控制電路圖
    的頭像 發(fā)表于 05-08 15:18 ?1839次閱讀
    <b class='flag-5'>程序時(shí)</b>間控制電路圖

    如何選擇PIC單片機(jī)的C編譯

    PIC單片機(jī)的C編譯器只有HI-TECH公司出品PICC編譯器,和CCS公司的CCS編譯器。還有PIC的生產(chǎn)商Microchip公司自行生產(chǎn)
    發(fā)表于 03-29 14:09 ?5251次閱讀

    PIC單片機(jī)源程序的模擬仿真設(shè)計(jì)

    要用C語言開發(fā)PIC單片機(jī)和模擬仿真調(diào)試程序,必須有相應(yīng)的編譯器,PICC與PICC18的C編譯器是優(yōu)化的PIC單片機(jī)C
    發(fā)表于 09-26 15:29 ?2399次閱讀
    <b class='flag-5'>PIC</b>單片機(jī)源<b class='flag-5'>程序</b>的模擬仿真設(shè)計(jì)

    在處理PIC單片機(jī)的中斷服務(wù)程序時(shí)需要注意哪些問題

    PIC與51系列單片機(jī)一個(gè)顯著的區(qū)別就是:PIC只有一個(gè)中斷入口地址(為04H),而51有多個(gè)中斷源。這樣對(duì)PIC來說,無論發(fā)生何種中斷程序將自動(dòng)轉(zhuǎn)移執(zhí)行04H處的
    發(fā)表于 10-28 16:45 ?2527次閱讀
    在處理<b class='flag-5'>PIC</b>單片機(jī)的中斷服務(wù)<b class='flag-5'>程序時(shí)</b>需要注意哪些問題

    PIC單片機(jī)】2.編譯器下載

    PIC單片機(jī)】2.編譯器下載
    發(fā)表于 11-16 11:51 ?8次下載
    【<b class='flag-5'>PIC</b>單片機(jī)】2.<b class='flag-5'>編譯</b>器下載

    使用MPLAB開發(fā)PIC無法通過編譯的問題

    序用PIC18F46K80作為處理器,MPLABX為IDE,在寫完程序時(shí)編譯無法通過,會(huì)報(bào)大量的warning、error。經(jīng)查閱資料和反復(fù)安裝IDE,得出結(jié)果是交叉編譯環(huán)境安裝不對(duì)。
    發(fā)表于 11-16 19:21 ?31次下載
    使用MPLAB開發(fā)<b class='flag-5'>PIC</b>無法通過<b class='flag-5'>編譯</b>的問題

    關(guān)于Stm芯片,keil編譯后輸出的信息,查看程序所占用的Flash、RAM空間大小

    ????根據(jù)keil編譯輸出的信息code:表示程序代碼部分RO_data:表示程序已經(jīng)定義的常量(如用const修飾的變量......)RW_data :表示已經(jīng)初始化的全局變量(已初始化的和未
    發(fā)表于 12-02 09:21 ?8次下載
    關(guān)于Stm芯片,keil<b class='flag-5'>編譯</b>后輸出的信息,查看<b class='flag-5'>程序</b>所占用的Flash、<b class='flag-5'>RAM</b>空間大小

    關(guān)于Stm芯片,keil編譯后輸出的信息,查看程序所占用的Flash、RAM空間大小

    ????根據(jù)keil編譯輸出的信息code:表示程序代碼部分RO_data:表示程序已經(jīng)定義的常量(如用const修飾的變量......)RW_data :表示已經(jīng)初始化的全局變量(已初始化的和未
    發(fā)表于 12-02 09:36 ?9次下載
    關(guān)于Stm芯片,keil<b class='flag-5'>編譯</b>后輸出的信息,查看<b class='flag-5'>程序</b>所占用的Flash、<b class='flag-5'>RAM</b>空間大小

    keil編譯之后占用flash、ram大小

    keil編譯之后占用flash、ram大小
    發(fā)表于 12-02 11:06 ?11次下載
    keil<b class='flag-5'>編譯</b>之后占用flash、<b class='flag-5'>ram</b>大小