zoukankan      html  css  js  c++  java
  • 【单片机】keil编译后的dataxdatacode

    先做一个实验,对比一下。

    1、第一次编译:

    2、在main()函数中添加

    char test1[10]={0};
    xdata char test2[5]={0};

    再次编译:

     

    3、在其他函数中定义局部变量,编译后data和xdata是不会改变的,有兴趣可以验证。

    4、keil memory mode是什么?

    Small:变量存储在内部ram里;

    Compact:变量存储在外部ram里,使用页8位间接寻址;

    Large:变量存储在外部Ram里,使用16位间接寻址;

    使用Small的模式:也不是说变量就不可以存储在外部,一样可以存储在外部,只是你要指定,比如:

    unsigned char xdata a;//变量a存储在外部的ram。

    unsigned char a;//变量a存储在内部ram

    使用Large的模式

    unsigned char xdata a;//变量a存储在外部的ram。

    unsigned char a;//变量a存储在外部ram。

    5、判断单片机的RAM、ROM能否满足代码需要的资源?

      编译工程,查看资源分配情况。stc15w4k32包含256字节RAM,3840字节XRAM(保存xdata)。

    6、检查程序调用嵌套,是否会导致堆栈溢出

         下图是使用keil编译工程后,生成的.M51文件。

          其中,?STACK就是堆栈的分配。LENGTH虽为1,但不用担心因为长度不够,这个1并非真正的堆栈空间长度,它会自增,在bit和data分配完地址后,data区域(00H-7FH)内剩余空间都是堆栈区域。该担心的是BASE基地址,因为从007FH自增不可以超出00FFH(data的最大范围)。考虑中断程序和程序嵌套调用,需精确计算出来程序需要多少堆栈,再和.M51对比,是否能够保证堆栈不溢出。

          

          类型        基地址        长度          单位                 段名

      

    7、data、idata、bdata地址分配?

    type              base              length

    --------------------------------------------

    data              0x0               0x7F           //直接寻址   

    bdata            0x20              0x0F          //位寻址

    idata             0x0                0xFF          //0x00-0x7F和data重合,间接寻址

    xdata            0x0                0xFFFF       //外部扩展RAM,使用DPTR访问

    pdata            0x0                0xFF          //外部扩展RAM低256字节,

    /*生命如此美好。认真工作之余,不要忘了认真对待生活,认真对待身边人!*/
  • 相关阅读:
    Object-C,NSArraySortTest,数组排序3种方式
    Object-C,NSArraySortTest,数组排序3种方式
    Object-C,数组NSArray
    Object-C,数组NSArray
    Zookeeper入门-Linux环境下异常ConnectionLossException解决
    Zookeeper入门-Linux环境下异常ConnectionLossException解决
    POJ 2533 Longest Ordered Subsequence
    HDU 1087 Super Jumping! Jumping! Jumping!
    ZJU 2676 Network Wars
    ZJU 2671 Cryptography
  • 原文地址:https://www.cnblogs.com/isha2088/p/6604645.html
Copyright © 2011-2022 走看看