small compact large区别

来源:互联网 发布:c语言调用汇编子程序 编辑:程序博客网 时间:2024/05/29 16:44

Memory Model:用鼠标点击Memory Model的下拉箭头,会有3个选项.
 
Small:变量存储在内部ram里.
Compact:变量存储在外部ram里,使用页8位间接寻址
Large:变量存储在外部Ram里,使用16位间接寻址.
我们一般使用Small来存储变量,就是说单片机优先把变量存储在内部ram里,如果内部ram不够了,才会存到外部去.Compact的方式要自己通过程序来指定页的高位地址,编程比较复杂,如果外部ram很少,只有256个字节,那么对该256个字节的读取就比较快,用MOVX @Ri,A 或MOVX A,@Ri指令.
如果超过256字节,那么要不断地进行切换的话,就比较麻烦.Compact模式适用于比较少的外部ram的情况.Large模式,是指变量会优先分配到外部ram里,用MOVX A,@DPTR或MOVX @DPTR,A来读取.要注意的是,3种存储方式都支持内部256字节和外部64k字节的ram.区别是变量的优先(或默认)存储在哪里的区别.除非你不想把变量存储在内部ram,才使用后面的Compact,Large模式.因为变量存储在内部ram里,运算速度比存储在外部ram要快的多,大部分的应用都是选择Small的模式.使  用Small的方式:也不是说变量就不可以存储在外部,一样可以存储在外部,只是你要指定,比如:
unsigned char xdata a;那么变量a就存储在外部的ram.
unsigned char a;变量存储在内部ram.

假如用Large的模式:
unsigned char xdata a;那么变量a就存储在外部的ram.
unsigned char a;变量存储在外部ram.

 

这就是区别,就是说这几个选项只是影响没有特别指定变量的存储空间的时候,默认存储在哪里,比如上面的变量定义unsigned char a . 那么我们最好选择Small.
Code Rom Size:用鼠标点击下拉箭头,将有3个选项:
Small: program 2K or less ;适用于89c2051这些芯片,2051只有2k的代码空间,所以跳转地址只有2k,编译的时候会使用ACALL AJMP这些短跳转指令,而不会使用LCALL,LJMP指令.如果你的代码跳转超过2k,那么会出错.
Compact:2k functiongs ,64k program:表示每个子函数的程序大小不超过2k,整个工程可以有64k的代码.就是说在main()里可以使用LCALL, LJMP指令,但在子程序里只会使用ACALL,AJMP指令.除非你确认你的每个子程序不会超过2k,否则不要用Compact方式.
Large:64K program:表示程序或子函数都可以大到64k.使用code bank还可以更大.通常我们都选用该方式.Code Rom Size选择Large方式速度不会比Small慢很多,所以一般没有必要选择Compact和Small的方式.我们这里选择Large方式.
Operating:点击下拉箭头有3个选项:
None:表示不使用操作系统
RTX-51 Tiny Real-Time Os:表示使用Tiny操作系统
RTX-51 Full Real-Time Os:表示使用Full操作系统
Keil c51提供了tiny系统(demo版没有tiny系统,正版软件才有),Tiny是一个多任务操作系统,使用定时器0来做任务切换.一般用11.0592Mhz时,切换任务的速度为30毫秒.如果有10个任务同时运行,那么切换时间为300毫秒.同时不支持中断系统的任务切换.也没有优先级.因为切换的时间太长,实时性大打折扣,多任务情况下(比如5个),轮一次就要150毫秒,150毫秒才处理一个任务,连实现键盘扫描这些事情都不行.更不要说串口接收,外部中断等.同时切换需要大概1000个机器周期,对cpu的浪费很大,对内部ram的占用也很厉害.实际上用到多任务操作系统的情况少之又少.关键是不适用.多任务操作系统一般适合于16位,32位的cpu,不适合8位cpu.
Keil C51 Full Real-Time OS:是比Tiny要好一些的系统,但需要用户使用外部ram.支持中断方式的多任务和任务优先级.但是keil c51里不提供该运行库,要另外购买,价格在3万人民币左右,只好望而止步.
Keil 的多任务操作系统的思想值得学习,特别是任务切换的算法,如何切换任务和保存堆栈等,有一定的研究价值.如果熟悉了其切换的方法,可以编写更好的切换(比如将一次切换的时间从30毫秒改为3毫秒,实用性会好一些.引入windows消息的思想,可以支持更为复杂的应用.)这些可能是一些发烧友研究的一个课题.也有免费的UCOS ii,我没有用过,不知道好不好用. 我们不推荐大家使用多任务操作系统.这里选择none.