IAR切BANK--BANK说明

一、为什么要用到BANK?

C51单片机的最大寻址范围为2^16=64K,为了突破64K代码的限制,就需要采用C51的切BANK。

二、切BANK的原理


代码地址空间的上半部 ,以重叠BANK0的物理地址空间 , 硬件设计了 n个存储 器页面来存储程序代码 。在任一时刻 BANK0~n中 , 只能有一个 BANK 处于激 活状态。当BANKi处于激活状态时,其物理地址空间为BankBase Addr ~ 0xFFFF。 只有 当BANK处于激活状态时, BANK 中的程序代码才可以运行 。

逻辑地址范围都是相对的,更像是bank的编号,映射到可寻址的物理地址空间去!

为了寻址任意BANK中的过程代码,C51编译器为过程调用生成了如下的BANK地址:


Base地址是可变的,但为了译码方便,一般选为8000H。当某过程调用任一不在同一BANK中的其它过程时,BANK地址中的Bank-Number被送到切换BANK的译码电路,而16位的偏移地址被送往地址总线,从而实现不同BANK中的过程调用。

三、ROOT BANK的使用

下半部分的代码没有做BANK处理,它被称为ROOT BANK。只是因为C51编译器仅对过程调用产生BANK地址,而对于调用之外的所有其它部分如CONST等不产生BANK地址,ROOT BANK即用来存放这部分代码。除此之外,ROOT BANK一般还用来存放下列代码:C51的库函数、所有的变量初始化数据、中断服务程序代码、CATARTED代码。编译器总是以NON BANK方式对这一类代码进行操作。

而对于其它代码来说,既可以放在BANK中,也可以放在ROOT BANK,但为了提高系统的运行效率,对经常调用的公共程序模块,应尽可能放在ROOT BANK中,以减少BANK的切换,而对于汇编语言编写的程序块,如果将其放在BANK中,则需要人工在汇编程序中添加对BANK切换的操作,非常繁琐,因此用汇编语言编写的程序模块一般也放在ROOTBANK中。

公共区域常常包括那些必须一直需要访问的进程和数据常量,如中断进程、中断和复位向量、字符串常量和块切换进程。因此,公用代码空间的起始位置通常为代码块的0X0000。

四、BANK函数的使用

任一个C程序模块,在编译时都要生成一个CODE段,而Linker不可能把一个模块的CODE分配到多个BANK中。只要不超出BANK的空间,linker可以把多个程序模块的代码放入一个BANK中,将每个程序模块最小化,便可以充分利用BANK的空间资源。

在BANK模式中,当编译器不知道调用与被调用是否在同一个BANK时,就会按照BANK调用方式产生程序代码。函数默认采用__banked_func,如果非BANK的函数,则需要人工加上__near_func字段。

五、其它

1.    当调用与被调用过程在同一个源代码程序模块时,编译器可知道它们在同一个物理BANK中,这时编译器使用NON BANK方式产生函数调用代码。

2.    当过程被说明为static类型时,编译器认为所有对static过程的调用均在本程序模块中,编译器产生NON BANK的调用方式。

3.    对于被说明为interrupt的中断过程,编译器总是产生NON BANK的调用方式对其调用,因为中断过程总是要放在ROOT BANK中。

4.    根据BANK的分配情况,使用non-banked编译条件对源程序中的过程进行说明,人为地控制编译器产生NON BANK方式的调用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pl/sql developer 自带汉化选项

pl/sql developer 自带汉化选项 版本:11.0.2 工具 -> 选项 -> 用户界面 ->外观, 第一项就是选择语言; 选择Chinese.lang,如果有的话; 转载于:https://www.cnblogs.com/stono/p/6645548.html

实现自己的BeanFactory、AOP以及声明式事务

实现自己的BeanFactory 在使用spring时,我们很少用"new"关键字创建对象,而是通过spring容器BeanFactory提供的getBean()方法得到对象: BeanFactory ctx new C…

Docker遇到的一些问题和感想

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 Docker 是“不可变”架构。 当你希望改变一个服务的时候(比如更新版本、修改配置、开放端口)&#…

hdu 4293 Groups DP

http://acm.hdu.edu.cn/showproblem.php?pid4293 题意: 有n个人分成了若干组走在一条林荫道路上,导游为了能够确定人数,要求每个人喊出自己所在的队伍前边有多少人Ai表示,后边有多少人Bi表示,于是我们得到了n条信息。这里面有错误…

IAR切BANK--命令连接器文件xcl格式说明

IAREWARM中段后缀含义 后缀 段类型 含义 AC CONST 绝对地址定位常数 AN DATA 用关键字__no_init声明的绝对地址定位数据 C CONST 常数 I DATA 初始化值为非0的数据 ID CONST 上述数据的初始式 N DATA 未初始化的数据 Z DATA 初始化值为0的数据 ROM用于…

ARM系列处理器的分类

1.ARM ARM即以英国ARM(Advanced RISC Machines)公司的内核芯片作为CPU,同时附加其他外围功能的嵌入式开发板,用以评估内核芯片的功能和研发各科技类企业的产品. ARM 微处理器目前包括下面几个系列,以及其它厂商基于 AR…

DBA_Oracle Table Partition表分区概念汇总(概念)

2014-06-20 Created By BaoXinjian 一、摘要 有关表分区的一些维护性操作: 注:分区根据具体情况选择。 表分区有以下优点: 1、数据查询:数据被存储到多个文件上,减少了I/O负载,查询速度提高。 2、数据修剪&…

electron打包vue项目

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 创建项目 点击这里 添加electron-builder 1、在项目目录下运行命令:vue add electron-builder 2、electron-…

Hdu 4293 DP

题意: n个人说自己前面有多少人 后面有多少人 求出说真话人数最多的情况 每个样例有 一个 n 表示n个人 接下来 n 行有a b 表示他前面的人数和后面的人数 思路: 如果已经知道了其中一组的人数~ 就往前找..找在这一组之前与这一组的话不矛盾的最多人数 Ti…

IAR切BANK--程序中的使用

一、在IAR的集成开发环境中实现数据变量定位方法如下三种 1、__no_init char alpha 0x0200; 2、#pragma location 0x0202 const int beta; 3、const int gamma 0x0204 3; 或: 1)__no_init int alpha "MYSEGMENT"; //MYSEGMENT段可在…

你需要知道的vue2 jsx render函数

通常开发vue我们使用的是模板语法,其实还有和react相同的语法,那就是render函数,同样支持jsx语法。 Vue 的模板实际是编译成了 render 函数。 0 传统的createElement方法 createElement(anchored-heading, {props: {level: 1}}, [createEleme…

|与||的区别

在众多编程语言中,|与||代表了不同的运算。其中|是按位或运算,||是逻辑或运算。从字面意思来理解,|常可以用于具体数值的计算,结果为数值,而||是用来逻辑运算的没结果只有False或者True。例如int a 2; int b 3; int …

CSS/CSS3语法新特性笔记

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 CSS层叠样式表 三大特性 层叠性:相同的样式会覆盖 继承性:属性可向下继承 优先级:范…

vb 坐标点击

引用 :http://www.vbgood.com/thread-113934-1-1.html 第一步在窗体的通用栏写如下代码:Private Type pointapiX As LongY As LongEnd TypePrivate Declare Function GetCursorPos Lib "user32" (lpPoint As pointapi) As Long第二步在窗体上放…

开始写技术博客

2012年年底掏钱参加的java的培训,13年初找JAVA工作,发现很难找,公司需要的都是有工作经验的,刚刚从培训机构出来的学生不受欢迎,工作很难找,一个月之后打算退而求其次,找了份PHP的工作(那时对ph…

C# winform 自定义皮肤制作

最近要做个软件正在做技术准备,由于WINFORM生成的窗体很丑陋,一个好的软件除了功能性很重要外,UI的体验也是不容忽视的。习惯性的在网上搜素了下,换肤控件也有好几款,但是有些用起来不是很好用,好点的也要花…

Vue 源码解读(10)—— 编译器 之 生成渲染函数

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 前言 这篇文章是 Vue 编译器的最后一部分,前两部分分别是:Vue 源码解读(8)…

蓝牙PROFILE

Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部 的Bluetooth规范。为了更容易的保持Bluetooth设备之间的兼容,Bluetooth规范中定义了Profile。Profile定义了设备如何实现一种连接或者应用,你可以把Profile理解为连接层或者…

Laravel Session 遇到的坑

这两天遇到了一个很奇怪的问题,更新session ,session的值不变。经过一番追查,终于找到问题,并搞明白了原理。写这篇博客记录下。 框架版本 Laravel 5.4 问题 先来描述下问题,我在我们项目基础的Middleware中&#xff0…

bootstrap 中这段代码 使bundles 失败

bootstrap 中这段代码 使bundles 失败 _:-ms-fullscreen, :root input[type"date"], _:-ms-fullscreen, :root input[type"time"], _:-ms-fullscreen, :root input[type"datetime-local"], _:-ms-fullscreen, :root input[type"month"…