IAR切BANK--BANK说明
一、為什么要用到BANK?
C51單片機(jī)的最大尋址范圍為2^16=64K,為了突破64K代碼的限制,就需要采用C51的切BANK。
二、切BANK的原理
代碼地址空間的上半部 ,以重疊BANK0的物理地址空間 , 硬件設(shè)計(jì)了 n個(gè)存儲(chǔ) 器頁面來存儲(chǔ)程序代碼 。在任一時(shí)刻 BANK0~n中 , 只能有一個(gè) BANK 處于激 活狀態(tài)。當(dāng)BANKi處于激活狀態(tài)時(shí),其物理地址空間為BankBase Addr ~ 0xFFFF。 只有 當(dāng)BANK處于激活狀態(tài)時(shí), BANK 中的程序代碼才可以運(yùn)行 。
邏輯地址范圍都是相對(duì)的,更像是bank的編號(hào),映射到可尋址的物理地址空間去!
為了尋址任意BANK中的過程代碼,C51編譯器為過程調(diào)用生成了如下的BANK地址:
Base地址是可變的,但為了譯碼方便,一般選為8000H。當(dāng)某過程調(diào)用任一不在同一BANK中的其它過程時(shí),BANK地址中的Bank-Number被送到切換BANK的譯碼電路,而16位的偏移地址被送往地址總線,從而實(shí)現(xiàn)不同BANK中的過程調(diào)用。
三、ROOT BANK的使用
下半部分的代碼沒有做BANK處理,它被稱為ROOT BANK。只是因?yàn)镃51編譯器僅對(duì)過程調(diào)用產(chǎn)生BANK地址,而對(duì)于調(diào)用之外的所有其它部分如CONST等不產(chǎn)生BANK地址,ROOT BANK即用來存放這部分代碼。除此之外,ROOT BANK一般還用來存放下列代碼:C51的庫函數(shù)、所有的變量初始化數(shù)據(jù)、中斷服務(wù)程序代碼、CATARTED代碼。編譯器總是以NON BANK方式對(duì)這一類代碼進(jìn)行操作。
而對(duì)于其它代碼來說,既可以放在BANK中,也可以放在ROOT BANK,但為了提高系統(tǒng)的運(yùn)行效率,對(duì)經(jīng)常調(diào)用的公共程序模塊,應(yīng)盡可能放在ROOT BANK中,以減少BANK的切換,而對(duì)于匯編語言編寫的程序塊,如果將其放在BANK中,則需要人工在匯編程序中添加對(duì)BANK切換的操作,非常繁瑣,因此用匯編語言編寫的程序模塊一般也放在ROOTBANK中。
公共區(qū)域常常包括那些必須一直需要訪問的進(jìn)程和數(shù)據(jù)常量,如中斷進(jìn)程、中斷和復(fù)位向量、字符串常量和塊切換進(jìn)程。因此,公用代碼空間的起始位置通常為代碼塊的0X0000。
四、BANK函數(shù)的使用
任一個(gè)C程序模塊,在編譯時(shí)都要生成一個(gè)CODE段,而Linker不可能把一個(gè)模塊的CODE分配到多個(gè)BANK中。只要不超出BANK的空間,linker可以把多個(gè)程序模塊的代碼放入一個(gè)BANK中,將每個(gè)程序模塊最小化,便可以充分利用BANK的空間資源。
在BANK模式中,當(dāng)編譯器不知道調(diào)用與被調(diào)用是否在同一個(gè)BANK時(shí),就會(huì)按照BANK調(diào)用方式產(chǎn)生程序代碼。函數(shù)默認(rèn)采用__banked_func,如果非BANK的函數(shù),則需要人工加上__near_func字段。
五、其它
1.????當(dāng)調(diào)用與被調(diào)用過程在同一個(gè)源代碼程序模塊時(shí),編譯器可知道它們?cè)谕粋€(gè)物理BANK中,這時(shí)編譯器使用NON BANK方式產(chǎn)生函數(shù)調(diào)用代碼。
2.????當(dāng)過程被說明為static類型時(shí),編譯器認(rèn)為所有對(duì)static過程的調(diào)用均在本程序模塊中,編譯器產(chǎn)生NON BANK的調(diào)用方式。
3.????對(duì)于被說明為interrupt的中斷過程,編譯器總是產(chǎn)生NON BANK的調(diào)用方式對(duì)其調(diào)用,因?yàn)橹袛噙^程總是要放在ROOT BANK中。
4.????根據(jù)BANK的分配情況,使用non-banked編譯條件對(duì)源程序中的過程進(jìn)行說明,人為地控制編譯器產(chǎn)生NON BANK方式的調(diào)用。
?
總結(jié)
以上是生活随笔為你收集整理的IAR切BANK--BANK说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React Router路由详解
- 下一篇: 【预测模型】基于蝙蝠算法优化最小二乘支持