精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

編譯PIC程序時RAM使用

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

(1)問:當我在編譯一個PIC的程序時得到這樣的報錯:

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

這究竟是什么意思?

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

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

bank1 int fred;

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

bank2 char * p;

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

下面這個聲明:

bank2 char * bank1 p;

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    8

    文章

    1367

    瀏覽量

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

    關(guān)注

    1

    文章

    1618

    瀏覽量

    49052
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    編譯程序時遇到問題

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

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

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

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

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

    kendryte編譯程序時報錯是為什么?

    kendryte編譯程序時報錯
    發(fā)表于 09-14 06:18

    PIC系列單片機WINDOWS版反編譯軟件

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

    程序時間控制電路圖

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

    如何選擇PIC單片機的C編譯

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

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

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

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

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

    PIC單片機】2.編譯器下載

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

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

    序用PIC18F46K80作為處理器,MPLABX為IDE,在寫完程序時編譯無法通過,會報大量的warning、error。經(jīng)查閱資料和反復安裝IDE,得出結(jié)果是交叉編譯環(huán)境安裝不對。
    發(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>大小