8051 keil 如何支持code size大于64KB的项目

随着项目中的功能不断增加,程序代码size也在不断往上涨,当超过64KB时,就要考虑引入bank进制。

在讲如何在现有项目中添加bank功能前,还是先讲讲其存在的背景吧。

8051是基于哈佛的体系架构。 code memory是16位寻址,data memory是8位寻址。 这样分开寻址的特点适合比较的固定,且比较小的固化程序,而且稳定性相对较强,比如data access不会误指到code指令。 当然这种体系架构的缺点也是显然的,即灵活性不够,比如不能有效的利用memory资源。

既然是16位寻址,那就意味着只能支持64KB的程序代码。 如果项目代码超过64KB,那就要引入多个banks来支持。 一个bank最大能支持32KB, 那4个bank能支持128KB, 8个bank支持256KB, 以此类推。。。 一般地,一个MCU能支持2MB以上的code size。

接下来就讲如何在现有项目中引入bank

1) 在keil IDE 左边lane中右击项目名称,然后click "Add Group..."来添加sub group,以四个banks为例,要保证该项目名称下有4个sub groups。当然,如果已经存在groups,就不用再添加了。一般地,我们bank0又叫common,它的取址范围为0x0000~0x7FFF,其它bank#n的范围设为0x8000~0xFFFF。如下图所示。

2)接下来就是重点了, 因为keil是不会根据这些groups名字来指定它们为bank0还是bank1,2,3... 再说,开发者也可以在IDE中把bank名字改成别名,如application等。所以需要分别右击这些groups来点击opitons->properties->指定bank number号.

3)右击项目名称,然后options-> check "code banking"->select "4", 然后bank area 设为 start:0x8000, end:0xFFFF

4)最后为了通过编译,需要把L51_bank.a51文件添加进项目

5)一些需要注意的细节是, 如果勾选extended LX51 Linker instead of BL51, 为了通过编译链接,那么就需要在options->output将HEX-80改成HEX-386,并勾选merge 32K Hexfile。 为了提高程序执行效率,避免不必要的bank切换,尽量把频繁被调用的code放到common bank中。

时间: 2024-10-17 08:24:25

8051 keil 如何支持code size大于64KB的项目的相关文章

<转>创建支持eclipse的多模块maven项目

如何使用eclipse创建Maven工程及其子模块 1,首先创建一个父类工程   子模块继承父类工程      并在父类工程的pom.xml文件中定义引入的jar及其版本号     子模块可以引用 2  创建api子模块,主要放置SDK 3  创建server  子模块 主要存放配置文件   不包括源代码 创建工程完成 创建支持eclipse的多模块maven项目 通过maven可以创建多个关联模块的项目(Multiple Module Projects).由一个总的模块,下面包含多个子模块(子

keil编译后Program Size: Code=46284 RO-data=988 RW-data=580 ZI-data=1094588

Program Size: Code=46284 RO-data=988 RW-data=580 ZI-data=1094588 Code      :   程序中代码所占字节大小 RO-data :   Read-only-data  ,存储在flash中的常量大小. RW-data:   Read-write-data  ,存储在flash中初始化的变量. ZI-data   :   Zero-Init-data      ,存储在SRAM中未初始化的变量. ROM(Flash) size

Keil 中的Code, RO-data , RW-data, ZI-data

Code为程序代码部分RO-data 表示 程序定义的常量const temp;RW-data 表示 已初始化的全局变量ZI-data 表示 未初始化的全局变量 Code, RO-data,RW-data ............flashRW-data, ZIdata...................RAM 初始化时RW-data从flash拷贝到RAM 生成的map文件位于list文件夹下 (KEIL) Total RO  Size (Code + RO Data) Total RW  

创建支持eclipse的多模块maven项目

通过maven可以创建多个关联模块的项目(Multiple Module Projects).由一个总的模块,下面包含多个子模块(子模块还可以包含子模块).这种maven功能能支持大型的项目构建,往往大型项目由很多子模块组成. 以下说明在eclipse下如何创建多模块的maven项目. 创建总的POM mvn archetype:create -DgroupId=com.easymorse.marshal -DartifactId=multi-modules-demo 创建一个maven项目,然

.NET Core 用 VS Code新建各种类型的项目

用命令行找个地方, 建立目录, 然后执行一下dotnet new --help命令, 查看一下建项目的帮助: 那我建立一个不带用户验证的mvc项目: dotnet new mvc --auth None 命令行输入 code . 就会用vscode打开该目录: 这些就是生成文件. 打开后, vscode会自动安装C#依赖. 如果VSCode上方有任何选择提示, 请选择Yes或者Restore. 试一下项目是否正确: 打开命令行: Ctrl+Shift+C或者在VSCode内打开命令行: Ctrl

java网络编程2

在通信双方中,ServerSocket是服务器端负责接收的一方,它负责监听指定端口,其构造函数如下: 1.ServerSocket()  throws IOException;无参构造函数,之所以存在主要是因为如果一旦创建好socket,则其选项参数将无法设置,使用该方法可以在指定端口号地址等之前先设置参数. 2.ServerSocket(int port) throws IOException:指定监听端口号,当端口号已经被占用或者因为某些原因端口号不允许被使用时会抛出BindExceptio

[51单片机] Keil C51中变量的使用方法详解

引言    8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用与标准C有所不同.正确地使用变量,有利于获得高效的目标代码.下面详细介绍Keil C51中变量的使用方法. 1 CPU存储结构与变量的关系    变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同.    标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CP

TCP 协议中的 Window Size与吞吐量

原地址:http://blog.sina.com.cn/s/blog_c5c2d6690102wpxl.html TCP协议中影响实际业务流量的参数很多,这里主要分析一下窗口的影响. ?TCP窗口目的 为了获得最优的连接速率,使用TCP窗口来控制流速率(flow control),滑动窗口就是一种主要的机制.这个窗口允许源端在给定连接传送数据分段而不用等待目标端返回ACK,一句话描述:窗口的大小决定在不需要对端响应(acknowledgement)情况下传送数据的数量.?官方定义:"The am

8051 vusb Tx实现

; .\Output\usb_tx.SRC generated from: usb\usb_tx.c ; vusb tx driver for 8051 core by crazy_code ; 2017/1/7 $NOMOD51 NAME USB_TX #include "hs6210.inc" CSEG AT 0x400 EXTRN DATA (usb_tx_count) EXTRN DATA (usb_tx_buffer_pointer) EXTRN DATA (pfix_nop