博客
关于我
51单片机中将变量、数组、函数设置在固定位置,定位到绝对地址
阅读量:606 次
发布时间:2019-03-12

本文共 1047 字,大约阅读时间需要 3 分钟。

一、不带初值的变量或数组定位方法

在Keil C51中,当变量或数组需要定位到具体的内存地址时,可以直接使用 _at_ 关键字并附加相应的地址值。例如:

  • 对于单个字符变量:

    unsigned char myvar _at_ 0x40;
  • 对于数组变量:

    unsigned char code myvar[10] _at_ 0x40;

需要注意的是,使用 _at_ 时前后必须有空格。

二、带初值的变量或数组定位方法

如果需要将变量定位到绝对地址并赋值初值,可以按照以下步骤操作:

  • 在工程中创建新的初始化文件InitVars.c,例如:

    char code myVer[20] = {"COPYRIGHT 2001-11"};
  • 将生成的InitVars.c文件添加到工程中编译。

  • 打开Keil的M51项目文件,定位到对应类型的内存(如CODE、XDATA、DATA等)区域,填写初始化文件生成的绝对地址(如?CO?INITVARS(0x200))。

  • 重新编译工程。

  • 特殊情况下,如定义的是xdata类型的变量,初始化文件应写为:

    char xdata myVer[20] = {"COPYRIGHT 2001-11"};

    然后在选项中填写?XD?INITVARS(0x200)

    对于idata等变量,操作流程类似。

    三、函数定位方法

    要将函数定位到指定的地址,可以先通过编译工程并查看M51项目文件。在CODE内存区域中,找到目标函数的标识符部分,获取对应的地址值。

    例如,想将C文件中的函数int BIN2HEX(int xx)定位到0x1000处,可以在项目选项中设置Locate:Code?PR?_BCD2HEX?TOOLS(0x1000)

    如果需要同时定位多个函数,可以用逗号分隔地址值:

    ?PR?myTest1?MAIN(0x3900), ?PR?myTest2?MAIN(0x4000)

    四、使用函数指针调用绝对地址处的函数

    方法步骤如下:

  • 定义推荐的回调函数原型:

    typedef void (*CALL_MYTEST)(void);
  • 定义函数指针变量:

    CALL_MYTEST myTestCall = NULL;
  • 将函数指针赋值为目标地址:

    myTestCall = 0x3900;
  • 进行函数指针调用:

    if (myTestCall != NULL) {    myTestCall();}
  • 需要注意的是,函数指针调用会将PC指针调整为定位地址0x3900,然后执行该函数。

    转载地址:http://htqxz.baihongyu.com/

    你可能感兴趣的文章
    python删除第一行_Python 乱码指北:一行删掉根目录
    查看>>
    Python删除列表元素的三种方法
    查看>>
    python初步学习-python数据类型-集合(set)
    查看>>
    python列表生成字典_Python中将字典转换为列表的方法
    查看>>
    python列表对应元素合并为列表及判断一个列表是几维
    查看>>
    python列表去重复后按照顺序_从包含不可共元素的Python列表中删除重复元素,同时保留顺序?...
    查看>>
    python列表前几个_python之列表
    查看>>
    python列表元组
    查看>>
    Python列表/元组/字典和集合使用
    查看>>
    python列表 行列选择_python_pandas_dataframe_行列选择_切片操作
    查看>>
    python列表
    查看>>
    python列出当前目录、子目录和文件的脚本
    查看>>
    python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体测管理系统的设计与实现(程序+开题+论文)
    查看>>
    Python切片对象和__getitem__
    查看>>
    python+flask计算机毕业设计高校体育竞赛成绩管理系统的设计与实现(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体育赛事系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体育运动会比赛系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校危化品管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校团委事务管理系统(程序+开题+论文)
    查看>>