(1)問:當我在編譯一個PIC的程序時得到這樣的報錯:
::Can't find space for psect rbss_0 in segment BANK0 (error)
這究竟是什么意思?
答:它說明你已經用完了RAM bank0的空間,而且空間還不夠(由rbss_0名稱得出)。在不同的情況下,這樣的報錯也可能是提到class COMBANK的。出現這種報錯,你可能需要做的是,要移動一些變量到bank1,2或3。
你可以在一些全局變量的聲明前加上一個前綴限定符,像bank1,例如:
bank1 int fred;
當然,你應該把會經常訪問的變量歸為一組,并且放置到同一個bank。你不能夠對局部變量、函數的參數來使用bank限定。對于位變量使用bank限定也是可以的。但是,對指針使用bank限定一定要當心,例如:
bank2 char * p;
這是一個指向bank2內char型數據的指針,這個指針本身(p)還是在bank0里的。
下面這個聲明:
bank2 char * bank1 p;
這是一個指向bank2內char型數據的指針,但指針本身是位于bank1里的。
(2)問:為什么編譯器不會自動地開始使用bank1、2、3呢?
答:因為你可以把各自獨立編譯的目標文件鏈接到一起,在鏈接之前是不太可能知道所有的東西是否在存儲空間里放得下,到鏈接時再來重新分配變量到其他bank已經為時太晚了。如果代碼產生器是用不假定某一個變量位于哪個bank的方式來產生代碼,那么它將不得不在每一個RAM訪問之前和之后,都要產生設置和重設 bank選擇位的指令,這將是一個完全不能接受的編譯結果。
即使是嘗試對bank0是否溢出做最好的猜測,對于一個將被編譯的模塊來說也是近乎不可能的——函數調用圖的一點點微小的變化就可能很大程度地改變變量分配的需求。
基于這些原因,我們總結出,除了要求用戶指定bank之外暫時沒有可行的替代方案。(譯者注:這里基本都是針對PICC STD版本而言的,對于PRO版本,因為編譯模式根本改變,前面提到的(1)(2)問題都得到了解決。)
(3)問:我讀了手冊還是不能確切地知道什么東西去了哪里。你能告訴我究竟RAM是怎么來組織的嗎?
答:Bank0是給非const變量使用的,它們有:
1) 局部變量;
2) 靜態或者全局的變量,沒有用限定符指定到其他bank的;
3) 中斷寄存器保護;
4) 臨時位置(它們將盡可能地被放置到common RAM)。
明確地用bankx限定的東西(不包括局部變量和函數參數)會被放到相應的bank。局部變量(例如:函數內部的不是靜態的變量)是不能夠被分配到其他bank去的。
-
RAM
+關注
關注
8文章
1369瀏覽量
115025 -
編譯器
+關注
關注
1文章
1642瀏覽量
49291
發布評論請先 登錄
相關推薦
PIC單片機程序設計的基本結構框架
如何解決使用MPLAB開發PIC無法通過編譯的問題
如何選擇PIC單片機的C編譯器
PIC單片機源程序的模擬仿真設計
![<b class='flag-5'>PIC</b>單片機源<b class='flag-5'>程序</b>的模擬仿真設計](https://file.elecfans.com/web1/M00/A8/3C/o4YBAF2Maa-AXKsaAAIh2VH1Zv4747.png)
在處理PIC單片機的中斷服務程序時需要注意哪些問題
![在處理<b class='flag-5'>PIC</b>單片機的中斷服務<b class='flag-5'>程序時</b>需要注意哪些問題](https://file.elecfans.com/web1/M00/AB/9C/pIYBAF22rD2AEU34AAB_j4A7b0E803.png)
使用MPLAB開發PIC無法通過編譯的問題
![使用MPLAB開發<b class='flag-5'>PIC</b>無法通過<b class='flag-5'>編譯</b>的問題](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
關于Stm芯片,keil編譯后輸出的信息,查看程序所占用的Flash、RAM空間大小
![關于Stm芯片,keil<b class='flag-5'>編譯</b>后輸出的信息,查看<b class='flag-5'>程序</b>所占用的Flash、<b class='flag-5'>RAM</b>空間大小](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
關于Stm芯片,keil編譯后輸出的信息,查看程序所占用的Flash、RAM空間大小
![關于Stm芯片,keil<b class='flag-5'>編譯</b>后輸出的信息,查看<b class='flag-5'>程序</b>所占用的Flash、<b class='flag-5'>RAM</b>空間大小](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論