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,一经查实,立即删除!

相关文章

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用于…

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段可在…

CSS/CSS3语法新特性笔记

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

C# winform 自定义皮肤制作

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

蓝牙PROFILE

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

netty系列之:EventLoop,EventLoopGroup和netty的默认实现

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 目录* 简介 EventLoopGroup和EventLoopEventLoopGroup在netty中的默认实现EventLoop在netty中的默认实现总结 简介 在net…

Oracle安装部署之RedHat安装Oracle11g_R2

硬件配置 内存 :≥1G 硬盘空间:≥10G 上传oracle11g安装包: putty上用wcw用户登录,通过ftp服务上传oracle安装文件到/home/wcw目录下解压 #unzip linux_11gR2_database_1of2.zip #unzip linux_11gR2_database_2of2.zip 检查和安装…

Fans没信心,回家继续修行

今天在CSDN上看了一篇的文章,感觉自己实在是太菜了,以至于对毕业之后从事IT行业没有了任何信心。现在也不清楚,自己能否在it行业混下去。自己的技术实在是一个水啊。8号就要回家了,兄弟姐妹们如果有事情,请发短信至 15…

基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 在我的各种开发框架中,数据访问有的基于微软企业库,有的基于EFCore的实体框架,两者各有其…

Unity 实现物体破碎效果(转)

感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In this tutorial I will show you how to create a simple shattering ef…

CC254x--OSAL

OSAL运行原理 蓝牙协议栈PROFILE、所有的应用程序、驱动等都是围绕着OSAL组织运行的。OSAL(Operating System Abstraction Layer)操作系统抽象层,它不是一个真正的操作系统(它没有 Context Switch 上下文切换功能)&am…

mysql跨节点join——federated引擎

一、 什么是federated引擎 mysql中的federated类似于oracle中的dblink。 federated是一个专门针对远程数据库的实现,一般情况下在本地数据库中建表会在数据库目录中生成相对应的表定义文件,并同时生成相对应的数据文件。 [图] 但是通过federated引擎创建…

【阅读SpringMVC源码】手把手带你debug验证SpringMVC执行流程

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 ✿ 阅读源码思路: 先跳过非重点,深入每个方法,进入的时候可以把整个可以理一下方法的执…

Zabbix监控(十六):分布式监控-Zabbix Proxy

说明:Zabbix支持分布式监控,利用Proxy代理功能,在其他网络环境中部署代理服务器,将监控数据汇总到Zabbix主服务器,实现多网络的分布式监控,集中监控。1、分布式监控原理Zabbix proxy和Zabbix server一样&am…

CC254x--BLE

BLE协议栈 BLE体系结构,着重了解GAP和GATT。 PHY物理层在2.4GHz的ISM频段中跳频识别。LL连接层:控制设备的状态。设备可能有5中状态:就绪standby,广播advertising,搜索scanning,初始化initiating和连接con…