目录

引言

1.单片机中xdata 和data

2.单片机代码code大小

3.附录

(1)变量想放哪里放哪里大法

(2)函数一堆后缀

(3)__和不用__

(4)搜索小技巧


引言

单片机的内存有大小之分,内存大的相对较贵,如何选择大小,是个头疼问题,此文是自己在编程过程中遇到和ram,rom大小有关的问题。

1.单片机中xdata 和data

xdata是指片外的ram数据,data是指内部的ram数据。

而STC15中会有逻辑在外,实际在内的ram。如下图:

图1

上图摘自stc15的手册中,如果你的单片机ram只有128个字节,所以选择Memory Model时乖乖选择:Small。如下图:

图2

因为Large 模式,会选择外部ram存放和读取数据,你只有内部ram,所以程序会死(实践中我的串口通讯失效)。

所以官方建议:

Memory Model  : Specifies the C51 Compiler memory model. The default, SMALL, is a good choice for starting new applications.

每次开始新的应用,则需要重新选择。

不同的model 生成的代码是不同的

下面的图是选用俩种不同的model ,编译代码的差异。

图3

从上图可得知,一个INC,硬生生多出了三条指令。使用了类似指针的操作。small model 速度快,生成的汇编代码量小。(但是ram有限)

再来看看stc单片机的AUX ram ,存放xdata 的ram,STC15401AS系列如下图

图4

他在内部做了一个aux ram<xdata>,用他手册中的话是:逻辑在片外,物理上在片内的扩展RAM(8位地址)

stc单片机中有stc12 stc15 stc8,而接下来的一位数据时内存ram的大小,1代表128,2代表256,以此类推,所以只要你是4以后(大于256)就可以选择lage model,再附上一张图:

图5

4k的sram aux ram是3840

2.单片机代码code大小

选用了一款stc15W204s单片机,2*128ram(sram) 和4k的rom(flash)。

开始编程,添加模块uart.c,adc.c,timer.c.都还行,占用code 800个字节,然后添加cs5460.c(电表芯片的驱动程序),变成3991个字节了,我总共才4K,你还让我不让我玩了?

开始查询map文件,查询code,到底是哪个鬼?

图6

上图中,左侧第一列是程序容量大小(16进制),第二列是十进制的code容量大小,上图可知一个lib_code 占用我1487个字节,在加函数ftoa(514),和ITof(381),就2K了,lib_code 是??继续查找MAP前面的input modules included内容,对比后如下

图7

上图左侧是有ftoa(514),和ITof(381)俩个函数编译后的结果,右侧是没有ftoa(514),和ITof(381)俩个函数的编译结果。

这俩个费劲函数里面使用浮点数计算,然后就加了一堆库函数,如C51FPL(?C?FPADD)......and so    on。

下图是上图中的各种lib文件的说明(此处虽然是stc15w204s,但我把memory model 修改为了large ,所以它用了C51L.lib)

图8

上图可看出,使用不同的memory model会调用不同的库函数

图6中还有一堆?C?这个的意思如下图:

翻译一下就是:每个段名都有一个前缀,对应于用于该段的内存类型。前缀用问号(?)括起来。

原先一度以为是乱码,来俩个??问号。自以为是,自认玄学的态度得改。

问题来了?我的是4K单片机,而code rom size 只有2K 和64 k的选择,如下图:

那么我4K的单片机,在编译器里面能干到64K,可实际下载的时候,就塞不进去了,不知道有啥方法,限制一下??

以上内容参考来自:

(1)stc15.pdf

(2)keil中的uvison help  下的C51 development Tools ,

3.附录

再搬运几张C51 development Tools 的图(我是搬运工)

(1)变量想放哪里放哪里大法

为了与以前版本的C51编译器兼容,可以在数据类型之前指定内存区域。例如,以下两个声明是等效的:

在加一个at关键字,想藏那个犄角旮旯,就去哪里。

(2)函数一堆后缀

比如

使用小内存模型的函数的优点是局部变量和函数形参存储在内部8051ram中。

因此,数据访问非常高效。内存有限。有时,小模型不能满足非常大程序的要求,必须使用其他内存模型。

对于这种情况,可以声明函数使用不同的内存模型,如上图所示。

(3)__和不用__

惯例规定,对于系统头文件,宏名以“__”开头,而对于用户头文件,宏名不应以“__”开头。宏名应包含头文件名和一些附加文本。

(4)搜索小技巧

单片机_rom_ram,程序容量之迷相关推荐

  1. lpc2000 filash utility 程序烧写工具_单片机烧录程序的次数

    单片机是可编程器件,开发者把程序写好.编译完之后,需要烧录到单片机中,单片机才能按照开发者的逻辑去执行.在这个烧录的过程中需要用到专用的烧录工具.比如51单片机的USB/TTL.STM单片机的STli ...

  2. c51单片机烧录程序 控制台显示正在检测目标单片机

    问题 c51单片机烧录程序 控制台显示正在检测目标单片机 详细问题 笔者使用单片机型号STC89C52, 进行程序烧录.控制台显示正在检测目标单片机 解决方案 将单片机型号由STC89C52更改为ST ...

  3. 单片机 解释型 c语言脚本,解释型单片机应用程序的研究.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp学术论文&nbsp>&nbsp自然科学论文 解释型单片机应用程序的研究.pdf5页 本文档一 ...

  4. 计算机行业中的烧写怎么翻译,单片机怎么烧录程序_单片机烧录程序步骤说明...

    描述 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器RAM.只读存储器ROM.多种I/O口和中断系统.定时器/ ...

  5. 51单片机C51程序

    51单片机51单片机 C51程序 C51程序 学习C51程序之前需要对C语言有一定的了解和学习:这里只介绍与C语言有区别的地方: 具体的不同如下: 1.C51中增加了几种针对MSC-51单片机的特有数 ...

  6. c语言编写51单片机中断程序,执行过程是怎样的?

    Q:c语言编写51单片机中断程序,执行过程是怎样的? 例如程序: #include<reg52.h>   void main(void)   {    EA=1;      //开放总中断 ...

  7. 24c512 c语言程序,24C32~24C512的51单片机读写程序

    24C32~24C512的51单片机读写程序 来源:-- 作者:-- 浏览:3875 时间:2016-08-10 14:18 标签: 摘要: AT89S52 晶振频率为11.0592MHz 指令周期: ...

  8. 单片机的程序结束后都干嘛去了?

    对于嵌入式系统,如果没有运行RTOS,那么程序开发中的主函数main()需要通过某种机制使其永远愉快的运行下去,它没有终点.如果想从main函数中退出,具体干什么是由所使用的C语言编译器决定的. 一. ...

  9. 机器人的灵魂(1)——单片机C程序开发

    首先,就谈谈舵机的控制原理:    舵机有三根线,分别是电源正负极和信号线 .正负极接6V左右的直流电源,信号线则输出PWM脉冲, PWM的周期为20mm,宽度(高电平的时间)是从0.5ms--2.5 ...

  10. 台达触摸屏modbusRTU与51单片机通讯台达屏与郭天祥51单片机通讯程序

    台达触摸屏modbusRTU与51单片机通讯台达屏与郭天祥51单片机通讯程序亲测过好用,P1口led显示8个位的状态上传给触摸屏,d2至d7为16数据寄存器能写能读,数码管显示当前写入的数码id=60 ...

最新文章

  1. Linux     grep命令,正则表达式
  2. 数据中心智能安防新突破:腾讯觅踪亮相DCD
  3. 【学生选课系统经典】C#与SQLSERVER连接:ASP.NET网站(服务器端,IIS发布)
  4. 彻底搞懂 Java 中的注解 Annotation
  5. python 调用gpu算力_数据科学家需要算力,GPU 如何实现?-控制器/处理器-与非网...
  6. 前景看淡,移动医疗九成或将成炮灰
  7. 如何在传统 ASP 和 ASP.NET 之间共享会话状态
  8. 语法制导的翻译是如何实现的_考研寄宿:怎样提高英语翻译的能力?
  9. c#使用正则表达式获取TR中的多个TD_Linux之正则表达式
  10. 8. Andrénalin ★ Serial
  11. 【Qt编程】基于Qt的词典开发系列二--本地词典的设计
  12. 【C#】基础篇(3) C#实现串口助手,解决中文乱码
  13. 108.【RabbitsMQ】
  14. conceptdraw office(专业办公套件) v6.0.0附安装教程
  15. 一个网站SEO优化主管必须具备的能力
  16. windows 设备管理器中的设备控制
  17. 10 面阿里,7 面头条,6 个 offer, 你猜我进阿里没?
  18. 20個網頁抓取工具快速抓取網站
  19. WIN10 的windows media player 允许远程控制我的播放器勾选后不生效
  20. iPad投影到Windows电脑屏幕上的方法【亲测,均为免费软件,均可用,仅供学习使用】

热门文章

  1. Eclipse显示bin文件夹
  2. JavaScript 学习中
  3. Medusa(美杜莎)--参数及常见命令
  4. Docker进阶 dockerfile指令构建docker镜像
  5. Windows文件换行符转Linux换行符
  6. fabric1.1 ca集成
  7. 创建型模式——建造者模式(Builder Pattern)
  8. java g1 配置_项目G1 jvm 常规参数配置
  9. magisk安装失败_crDroid OS 安装刷入教程
  10. CVE-2017-0199——首个Microsoft Office RTF漏洞