⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 浏览记录.txt

📁 51单片机的内存优化和中断的有用知识
💻 TXT
字号:
(1) uchar xdata * data pstr;
     pstr = tmp;

     这种情况是没问题的,这样的使用方法是指在内ram分配一个指针变量("*"号后的data关键字的作用),而且这个指针本身指向
xdata区("*"前xdata关键字的作用)。编译后的汇编代码如下。

     MOV 0x08,#tmp(0x00)         ;0x08和0x09是在内ram区分配的pstr指针变量地址空间
     MOV 0x09,#tmp(0x00)

     这种情况应该是在这里所有介绍各种情况中效率最高的访问外ram的方法了,请大家记住他。

(2)使用using切换寄存器组可以省去一些压栈的动作,由于51只有两级中断,同级中断不能被打断,因此,我们可以同级中断设成同样的寄存器组,从某种意义上来说,有一组寄存器是多余的。同时个人建议中断函数应该使用using这个关键字,使用using的函数不能有返回值,这是致命伤


中断中调用的函数最好不要被中断外的其它函数调用,因为会出现“重复调用”的警告
单片机复位初始化后,堆栈指针指向07,实际就是从工作寄存器组R1开始,这也是KEIL编译时默认的堆栈起始空间,发生中断时,Keil通常是将工作寄存器组0全入栈,函数间数据传递依靠工作寄存器组0来完成,这就是在中断函数中指定USING1(2、3)后,容易出错的原因,堆栈指针可以在START51.h中修改,平常我们很少用,希望有经验的Keil高手共同分享。


(3)small 模式下未指存储类型的变量默认为data型
   所以可以使用 data 区最大为 120 字节,超出 120 个字节则必须用 idata 显式的指定为间接寻址,另外堆栈至少要占用一个字节,所以极限情况下可以定义的变量可占 247 个字节。当然,实际应用中堆栈为一个字节肯定是不够用的,但如果嵌套调用层数不深,有十几个字节也够有了。

(4)
可以通过查看编译器输出符号表文件(.M51)查看
      对前面的代码,M51文件中关于内存一节如下:


* * * * * * *   D A T A   M E M O R Y   * * * * * * *
REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
DATA    0008H     0078H     UNIT         ?DT?TEST
IDATA   0080H     007FH     UNIT         ?ID?TEST
IDATA   00FFH     0001H     UNIT         ?STACK 


第一行显示寄存器组0从地址0000H开始,占用0008H个字节
第二行显示DATA区变量从0008H开始,占用0078H个字节
第三行显示IDATA区变量从0080H开始,占用007F个字节
第四行显示堆栈从00FFH开始,占0001H个字节

如果全局变量与局部变量分配不合理,就有可能出现类似下面的行

0010H     0012H                  *** GAP ***
      该行表示从0010H开始连续0012H个字节未充分利用或根本未用到
出现这种情况最常见的原因是局变量太多、多个子程序中的局部变量数目差异太大、使用了寄存器切换但未充分利用 

(7)ARM内核的中断向量表放在0地址,对于ROM在0地址的情况,无法调用中断服务程序,所以在调试阶段有必要将可读写的存储器空间映射到0地址。 


(8)重入函数,又叫再入函数,是一种可以在函数体内不直接或间接调用其自身的一种函数。
再入函数可被递归调用,无论何时,包括中断函数在内的任何函数都可以调入。再入函数在
C51编译时使用的是模拟栈。
函数说明: 函数名(形式参数表) reentrant
注意事项:
1、再入函数不能传递bit类型参数。
2、与PL/M51兼容的函数不能具有reentrant,这样也不能调用再入函数。
3、在编译时:再入函数建立的是模拟堆栈区,small模式下模拟堆栈区位于idata
区,compact模式下模拟堆栈区位于pdata区,large模式下模拟堆栈区位于xdata区.
4、在同一程序中可以定义和使用不同存储器模式的再入函数,任意模式的再入函数不能调
用不同存储器模式的再入函数,但可以调用普通函数。
5、实际参数可以传递给间接调用的再入函数。无再入属性的间接调用函数不能包含调用参
数。 


B49K02811 











⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -