单片机中绝对地址转换为函数指针

这篇具有很好参考价值的文章主要介绍了单片机中绝对地址转换为函数指针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、相关概念

 函数指针指针函数是两个不同的概念。

  函数指针是指可以指向函数的指针,它的类型与函数的返回值类型和参数类型相对应。通过函数指针,可以实现函数的回调和动态调用等功。

  指针函数则是指返回指针类型的函数,它的返回值是一个指针,可以用来指向一个地址或数据。指针函数通常用于动态分配内存和返回动态生成的数据结构等场景。

  需要注意的是,函数指针和指针函数都跟指针有关系,但它们本质上是不同的概念。

总结:

函数指针:本质是指针,指向的是一个函数。形式如下:

void (*pFun)(void);
int (*pFun)(int i,int k);

指针函数:本质是函数,返回值是一个指针。形式如下:

int* pFun(int i,int k);

二、绝对地址如何转换为函数指针

以上一篇文章<单片机如何分散加载文件>为例,方法如下:

int (*pFun)(int,int);//定义指针函数
pFun = (int(*)(int,int))(0x08080001);//my_add_fun 的地址
pFun(num1,num2);

测试代码,如下:

int my_add_test(int num1,int num2)
{
    int sum;
    my_add_init();
    rt_kprintf("my_add_init=0x%08x\r\n",my_add_init);
    void (*pFun1)(void);
    pFun1 = (void(*)(void))(0x0808001d);//my_add_init 的地址
    pFun1();
    sum=my_add_fun(num1,num2);
    rt_kprintf("my_add_fun=0x%08x\r\n",my_add_fun);
    int (*pFun)(int,int);
    pFun = (int(*)(int,int))(0x08080001);//my_add_fun 的地址
    pFun(num1,num2);
    return sum;
}

或者

typedef void (*pVoidFun)(void);
typedef int (*pIntFun)(int num1,int num2);


int my_add_test(int num1,int num2)
{
    int sum;
    my_add_init();
    rt_kprintf("my_add_init=0x%08x\r\n",my_add_init);
    void (*pFun1)(void);
    //pFun1 = (void(*)(void))(0x0808001d);//my_add_init de di zhi
    pFun1=(pVoidFun)(0x0808001d);
    pFun1();
    
    sum=my_add_fun(num1,num2);
    rt_kprintf("my_add_fun=0x%08x\r\n",my_add_fun);
    int (*pFun)(int,int);
    //pFun = (int(*)(int,int))(0x08080001);//my_add_fun de di zhi
    pFun=(pIntFun)(0x08080001);
    pFun(num1,num2);
    return sum;
}

实际测试

单片机中绝对地址转换为函数指针,单片机,嵌入式硬件

如何知道函数的地址呢?

①是通过打印,获取函数的绝对地址;

②通过map文件获取函数地址

单片机中绝对地址转换为函数指针,单片机,嵌入式硬件

单片机中绝对地址转换为函数指针,单片机,嵌入式硬件

单片机中绝对地址转换为函数指针,单片机,嵌入式硬件

不知道大家发现了没?地址应该是0x08080000和0x0808001c,怎么变成了0x08080001和0x0808001d。

具体的可以参考:

https://bbs.21ic.com/icview-134389-999-1.html
读PC指针时,返回LSB总是为0;写PC指针时,一定要保证LSB为奇数。

欢迎关注公众号:嵌入式学习与实践文章来源地址https://www.toymoban.com/news/detail-654842.html

到了这里,关于单片机中绝对地址转换为函数指针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机毕设选题】stm32实现车牌识别系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(60)
  • 单片机项目分享 stm32机器视觉的人脸识别系统 - 单片机 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月22日
    浏览(84)
  • 单片机项目分享 基于stm32的便携用电功率统计系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(113)
  • 7. 嵌入式与单片机

    常见面试题 请说说你对嵌入式的理解。⭐⭐⭐⭐ 嵌入式系统是指以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应应用系统对功能、成本、体积、功耗严格要求的专用计算机系统。 嵌入式系统 主要由 嵌入式微处理器 、 外围硬件设备 、 嵌入式操作系统以及用户

    2024年02月02日
    浏览(89)
  • 【单片机毕设选题】 stm32智能运动计步系统 - 物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(67)
  • 单片机项目分享 stm32机器视觉的口罩佩戴检测系统 - 单片机 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月22日
    浏览(83)
  • 【单片机毕设选题】Stm32单片机的音乐播放器设计 - 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(52)
  • 单片机项目分享 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月21日
    浏览(93)
  • 毕业设计 - 基于单片机的智能饮水机系统设计与实现 (物联网 嵌入式 单片机)

    Hi,大家好,学长今天向大家介绍一个 单片机项目 基于单片机的智能饮水机系统设计与实现 大家可用于 课程设计 或 毕业设计 这次设计的智能饮水机就是单片机结合传感器的一个应用。 该系统设计综合单片机以及电子技术理论,从生活实际出发,完善了饮水机的功能。整个

    2024年02月03日
    浏览(109)
  • 单片机(嵌入式)程序分层架构

    目录 前言 嵌入式3层软件架构 嵌入式4层软件架构-1 驱动层 操作系统层 中间件层 应用层 嵌入式4层软件架构-2 硬件层 嵌入式微处理芯片 嵌入式存储器系统 嵌入式I/O接口 中间层 系统软件层 RTOS 文件系统 GUI 应用层 嵌入式5层软件架构1 嵌入式5层软件架构2 嵌入式6层软件架构

    2023年04月19日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包