搜索
bottom↓
回复: 1

开源PLC学习笔记11(再从51开始 内存管理)——2013_11_27

[复制链接]

出0入0汤圆

发表于 2013-11-27 08:24:59 | 显示全部楼层 |阅读模式
本帖最后由 oldbeginner 于 2013-11-27 15:57 编辑

因为采用的是KEIL编辑器,

查看手册,
(3)LARGE模式。LARGE模式称为大编译模式,在LARGE模式下,编译时函数参数和变量被默认在片外RAM的64KB字节空间,存储器类型为xdata。


变量和函数定义都是在c文件中,现在就开始理解这些变量和函数的存储类型。

在PLC51x.c文件中

  1. bit  RUN = 0;

  2. unsigned int code TYPE_BCD[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,    // LED显示器段码表
  3.                                  0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};  // 0123456789AbCdEF

  4. /***************************************************************************************/

  5. unsigned char  Timer_5ms;         // 5ms时基计数器,5ms Timer0中断计数
  6. unsigned char  Timer_10ms;        // 10ms时基计数器,5ms Timer0中断计数
  7. unsigned char  Timer_100ms;       // 100ms时基计数器,5ms Timer0中断计数
  8. unsigned char  Pulse_val_Sec;     // 1s时基计数器
  9. unsigned char  Pulse_val_Min;     // 1min时基计数器
  10. bit   Pulse_10ms ;
  11. bit   Pulse_100ms;
  12. bit   Pulse_Sec  ;
  13. bit   Pulse_Min  ;
复制代码

  1. <font color="Blue" size="4"><b>volatile unsigned char   data  ACC_BIT;                         //  位运算器及 7级中间过渡栈</b></font>
  2. volatile unsigned char   data  MPS_BIT;                         //  位元件 8级堆栈
复制代码
  1. //-------------------------------------------------------------------------------------//
  2. //  位元件 D 内存分配                                                                  //
  3. //-------------------------------------------------------------------------------------//

  4. <font color="Blue"><font size="4"><b>volatile TYPE_BIT_BYTE   data  rX[_X_BYTE] , rY[_Y_BYTE];       //  位元件 X,Y 存储位
  5. volatile TYPE_BIT_BYTE   data  rX1[_X_BYTE], rY1[_Y_BYTE];      //  位元件 X,Y 存储位上一步备份</b></font></font>
  6. volatile TYPE_BIT_BYTE   data  rM8xxx[3];                       //  位元件 M8xxx 存储位
  7. volatile TYPE_BIT_BYTE   data  rM8xxx1[3];                      //  位元件 M8xxx 存储位上一步备份
  8. volatile TYPE_BIT_BYTE   data  rTF[_T_BYTE];                    //  T 得电失电标志位
  9. volatile TYPE_BIT_BYTE   data  rCF[_C_BYTE];                    //  C 得电失电标志位
  10. volatile TYPE_BIT_BYTE   data  rT[_T_BYTE] , rC[_C_BYTE];       //  位元件 T,C 输出位   
  11. volatile TYPE_BIT_BYTE   data  rT1[_T_BYTE], rC1[_C_BYTE];      //  位元件 T,C 输出位上一步备份
  12. volatile TYPE_BIT_BYTE  xdata  rM[_M_BYTE];                     //  位元件 M 存储位
  13. volatile TYPE_BIT_BYTE  xdata  rS[_S_BYTE];                     //  位元件 S 存储位
  14. volatile TYPE_BIT_BYTE  xdata  rM1[_M_BYTE];                    //  位元件 M 存储位上一步备份
  15. volatile TYPE_BIT_BYTE  xdata  rS1[_S_BYTE];                    //  位元件 S 存储位上一步备份
  16. volatile signed   int   xdata  _T[_T_num][2];                   //  位元件 T 内存分配   
  17. volatile signed   int   xdata  _C[_C_num];                      //  位元件 C 内存分配   
  18. volatile signed   int   xdata  _D[_D_num];                      //  位元件 D 内存分配
复制代码
  1. //-------------------------------------------------------------------------------------//
  2. //  基本指令,扩展指令 子函数                                                          //
  3. //-------------------------------------------------------------------------------------//
  4. volatile unsigned char  xdata addr0T,addr1T,addr2T,addr3T,addr4T;  // 数据位第一至第五位字地址/数据类型

  5. volatile TYPE_BYTES_WORD xdata addr0x,addr1x,addr2x,addr3x,addr4x; // 数据位第一至第五位字地址/数据缓冲区

  6. volatile TYPE_BYTES_WORD  xdata order0;                              // 命令位地址缓冲区

  7. volatile unsigned int ppp;
  8. volatile unsigned char code *CODE_p;
复制代码




****************************************************

因为选择了large模式,默认存储在片外RAM中,如果要存储在片内RAM,需要定义前加data
volatile unsigned char   data  ACC_BIT;                         //  位运算器及 7级中间过渡栈
volatile TYPE_BIT_BYTE   data  rX[_X_BYTE] , rY[_Y_BYTE];       //  位元件 X,Y 存储位
volatile TYPE_BIT_BYTE   data  rX1[_X_BYTE], rY1[_Y_BYTE];      //  位元件 X,Y 存储位上一步备份


不加存储类型定义或加xdata都是存储在片外RAM。

还有code类型,指明在程序存储区,也是片外的。

大部分变量都加了volatile,在笔记01中简单提了一下啊,现在复习,



******************************************************
在PLC51x_FNC.c文件中

  1. code (*key_list[16])();
  2. code (*key_list_1[12][2])();
  3. code (*key_list_2[14][2])();
  4. code (*key_list_3[256])();
  5. int RD_ADDR(unsigned int a, unsigned char c);

  6. #define   CSP_Pn_MAX    8
  7. #define   CALL_SP_MAX   2
  8. volatile unsigned char        CALL_SP_i;
  9. volatile unsigned char code  *CALL_SP[CALL_SP_MAX];
  10. volatile unsigned char code  *CSP_Pn[CSP_Pn_MAX+1];

  11. volatile          bit        CODE_ERROR;
  12. volatile unsigned int  data  PS_BIT;                         //  P 指令16级暂存
  13. volatile unsigned int  data  PS1_BIT;                        //  P 指令16级暂存备份
  14. volatile unsigned int  data  Pi;   
复制代码


使用了很多code存储类型,因为定义了函数指针数组。

*****************************************


在uart.c文件中

  1. volatile unsigned char UartSendBuffer[OutLEN];            //发送缓冲
  2. volatile unsigned char UartReceiveBuffer[InLEN];        //接收数据缓冲
  3. volatile unsigned char *outlast=UartSendBuffer;            //最后由中断传输出去的字节位置
  4. volatile unsigned char *putlast=UartSendBuffer;            //最后放入发送缓冲区的字节位置
  5. volatile unsigned char UartSendBufferemptyFlag=1;        //缓冲区数据发完标志   发完=1
  6. volatile unsigned char UartSendBufferHaveDataFlag=0;    //发送缓冲区非空标志   有=1

  7. volatile unsigned char UartReceiveCounter=0;            //接收计数器
  8. volatile unsigned char UartRxTimerStartFlag=0;            //接收超时计数器启动标志
  9. volatile unsigned char UartWaitForCounter=0;            //接收超时计数器
  10. volatile unsigned char UartDataReadyFlag=0;                //接收完成标志
复制代码


默认都是片外存储类型。

内存管理对我来说比较抽象,而且入门资料不完备。暂时不考虑优化,只理解和模仿。


和文件管理一起看,理解更容易

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-6-23 11:32:39 | 显示全部楼层
支持楼主,牛
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 06:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表