查看: 2969|回复: 5

[其他] 我想通过地址去运行函数

[复制链接]
  • TA的每日心情
    开心
    2020-8-5 09:59
  • 签到天数: 80 天

    连续签到: 1 天

    [LV.6]常住居民II

    19

    主题

    173

    帖子

    2

    中级会员

    Rank: 3Rank: 3

    积分
    498
    最后登录
    2020-9-3
    发表于 2017-12-21 11:35:43 | 显示全部楼层 |阅读模式
    我把函数拷贝到一个指定地址的RAM中,现在想通过地址去运行这个函数,而不是直接用函数名字:
            memcpy(ucFlashCode,0x1FFFF000,2600);//从0x1FFFF000地址中把FLASH_Init_Api函数拷贝出来
            pucFlashStart = &ucFlashCode[0U];//首地址就是我的FLASH_Init_Api函数



    uint16_t FLASH_Init_Api(FLASH_SSD_CONFIG* flash_struct)//这个是我的FLASH_Init_Api函数接口,
    那么我该如何去通过&ucFlashCode[0U]这个地址去直接运行我的函数呢?

    最佳答案

    查核函数指针的用法
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    25
    最后登录
    2018-11-12
    发表于 2018-1-10 19:10:11 | 显示全部楼层
    得到函数的地址后,赋值给函数指针,然后进行函数执行不就可以了吗?
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-7-5 15:45
  • 签到天数: 664 天

    连续签到: 1 天

    [LV.9]以坛为家II

    42

    主题

    1594

    帖子

    19

    金牌会员

    Rank: 6Rank: 6

    积分
    5618
    最后登录
    2021-12-22
    发表于 2017-12-22 10:06:32 | 显示全部楼层
    查核函数指针的用法
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-6 07:38
  • 签到天数: 736 天

    连续签到: 1 天

    [LV.9]以坛为家II

    21

    主题

    3486

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    5093
    最后登录
    2024-1-7
    发表于 2017-12-22 10:20:23 | 显示全部楼层
    像是要做自己系统的意思,用系统去调用函数、进程的感觉
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-8-5 09:59
  • 签到天数: 80 天

    连续签到: 1 天

    [LV.6]常住居民II

    19

    主题

    173

    帖子

    2

    中级会员

    Rank: 3Rank: 3

    积分
    498
    最后登录
    2020-9-3
     楼主| 发表于 2017-12-22 14:45:19 | 显示全部楼层
    nothingness 发表于 2017-12-22 10:20
    像是要做自己系统的意思,用系统去调用函数、进程的感觉

    因为我的这些flash驱动是要封装成bin的,成了bin之后就得用地址去让他运行,大概的bin封装思路就是:
    bin文件头(厂家信息) + 函数1地址 + 函数1长度 + 函数2长度 + 函数3长度
    bin文件头(厂家信息)这个不下载到固定存放函数的地址,只是下载时走UDS校验一下
    函数1地址 :也就是函数1的地址
    函数1地址 + 函数1长度 : 也就是函数2的地址
    函数1地址 + 函数1长度 +  函数2长度 :也就是函数3的地址
    现在我要通过地址去让bin文件里的函数运行,该怎么做呢?
    现在我模拟从bin文件中运行函数,我把他们放在RAM的固定位置,用这个位置去让他们启动
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-6 07:38
  • 签到天数: 736 天

    连续签到: 1 天

    [LV.9]以坛为家II

    21

    主题

    3486

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    5093
    最后登录
    2024-1-7
    发表于 2017-12-25 12:03:12 | 显示全部楼层
    ,忆昔颜 发表于 2017-12-22 14:45
    因为我的这些flash驱动是要封装成bin的,成了bin之后就得用地址去让他运行,大概的bin封装思路就是:
    bin ...

    你的思路我懂了,按我的理解应该也是可以实现的,类似于系统调用程序的方式。
    具体实现应该调用汇编,将函数地址加载到PC指针寄存器,这样应该就可以实现程序的加载运行了,但这个函数的调用和执行、函数返回等,处理不妥当可能会影响到程序的正常运行(比如加载返回命令后,PC指针寄存器返回到哪个地址,这个可能需要先进行压栈处理等)。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 23:51 , Processed in 0.098091 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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