0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

编译过程中替换函数名的两种方法

冬至子 来源:药RV 作者:药RV 2023-10-11 17:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

编译过程中替换函数名的两种方法 (第二种很好使)

方法一

函数名为__wrap_symbol,且称其为包装函数,“symbol”是一个函数名,大致执行过程是这样的:当调用“symbol”函数时,如果“symbol”函数未定义的话就会调用__wrap_symbol函数;__wrap_symbol称做包装函数。

示例:

DEVICE = ' -march=rv32imac -Wl,--wrap,timer_irq_handler -mabi=ilp32 -DUSE_PLIC -DUSE_M_TIME -DNO_INIT -mcmodel=medany -msmall-data-limit=8 -L. -nostartfiles -lc '
void __wrap_timer_irq_handler(uint32_t mcause)
{
#warning requires critical section if interrupt nesting is used.
rt_interrupt_enter();
rt_tick_increase();
rt_interrupt_leave();
}

若定义了timer_irq_handler函数就会使用timer_irq_handler,未定义timer_irq_handler就使用__wrap_timer_irq_handler

方法二

示例

下文是张向量表,向量表使用了corev_handler

vector_table:
j corev_handler // irq0
j corev_handler
j corev_handler
j corev_handler // irq3
j corev_handler
j corev_handler
...
在编译命令中添加如下代码

DEVICE = ' -march=rv32imac -D"corev_handler=SW_handler" -mabi=ilp32 -DUSE_PLIC -DUSE_M_TIME -DNO_INIT -mcmodel=medany -msmall-data-limit=8 -L. -nostartfiles -lc '
这种方式会将扫描到存在corev_handler的地方均重定义为SW_handler

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RT-Thread
    +关注

    关注

    32

    文章

    1657

    浏览量

    45453
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C编译器错误与解决方法

    ),即作外部宣告 3 Compling :C:8051MANN.C Error:318:can’t open file ‘beep.h’ 说明在编译C:8051MANN.C 程序过程中由于
    发表于 01-22 08:03

    函数指针介绍

    :类型说明符 (*函数名) (参数) int (*fun)(int x,int y); 函数指针是需要把一个函数的地址赋值给它,有两种写法: fun =Function;fun = F
    发表于 01-21 08:11

    ESP32 编译过程中 bootloader 配置阶段的 CMake 缓存冲突错误,记录

    你遇到的是 ESP32 编译过程中 bootloader 配置阶段的 CMake 缓存冲突错误,核心原因是系统混合了 ESP-IDF v5.5.1 和 v5.4.3 个版本的路径,
    发表于 12-23 07:07

    西门子PLC函数FC的使用方法

    函数函数块作为模块化编程的重要组成部分,在PLC 用户程序中有着相当频繁的应用。者在生成与使用的过程中都有一定的相似,且都不能单独使用。而需要赋予特定的功能,由组织块(OB)直接或
    的头像 发表于 12-19 11:26 4729次阅读
    西门子PLC<b class='flag-5'>中</b><b class='flag-5'>函数</b>FC的使用<b class='flag-5'>方法</b>

    函数指针及指针函数的区别

    在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,和大家的一些总结,整理到此。和大家分享。   首先它们之间的定义:   1、指针函数
    发表于 12-12 06:34

    用PLC实现卷径计算的两种算法

    卷径计算,是动态计算如钢卷,纸卷等存料量的一种方法,它是实现张力控制和自动充放料、以及甩尾控制的重要前提。卷径计算目前主流的方法两种,一种是根据机列速度(产线速度)和和被测卷的转动角速度求得;另一种是根据被测卷的转动圈数和测长
    的头像 发表于 11-14 16:54 2773次阅读
    用PLC实现卷径计算的<b class='flag-5'>两种</b>算法

    程序加载过程中遇到的问题及其解决方法

    /quick_start/ide.html。 (1)遇到的问题1:在创建好项目后,运行配置设置为ILM,可以编译成功;当修改运行配置为Flash后,编译失败;重启软件,仍会遇到类似问题。 解决方法
    发表于 10-30 07:59

    晶圆制造过程中的掺杂技术

    在超高纯度晶圆制造过程中,尽管晶圆本身需达到11个9(99.999999999%)以上的纯度标准以维持基础半导体特性,但为实现集成电路的功能化构建,必须通过掺杂工艺在硅衬底表面局部引入特定杂质。
    的头像 发表于 10-29 14:21 1440次阅读
    晶圆制造<b class='flag-5'>过程中</b>的掺杂技术

    GCC编译器,怎么才能实现c文件未被调用的函数,不会被编译呢?

    GCC编译器,怎么才能实现c文件未被调用的函数,不会被编译?有什么编译选项可以设置吗? 移植代码,有些
    发表于 09-28 12:25

    lv_port_disp_init();使用lvgl时在移植过程中这个函数报错怎么解决?

    lv_port_disp_init();使用lvgl时在移植过程中这个函数报错怎么解决
    发表于 09-19 07:35

    芯片研发过程中两种流片方式

    芯片在研发过程中一般包含4个阶段:芯片设计、生产样片、测试验证和大规模量产。在完成芯片设计后,工程师们需要先拿到一些芯片样片,用它们进行测试和验证,来判断新研发的芯片在功能和性能上是否符合设计要求
    的头像 发表于 09-09 15:04 2732次阅读
    芯片研发<b class='flag-5'>过程中</b>的<b class='flag-5'>两种</b>流片方式

    使用AURIX进行调试的过程中,如果进入某个函数的时候出现问题,是配置项的问题还是函数的变量的问题?

    在使用AURIX进行调试的过程中,如果进入某个函数的时候出现问题,是配置项的问题还是函数的变量的问题?
    发表于 08-11 07:17

    固件升级过程中,如何禁用EC INT中断?

    固件升级过程中,EC INT中断经常会被触发,如何禁用? 这个中断,协议栈是怎么触发的或者说需要满足什么条件?
    发表于 07-25 06:43

    超声波清洗机如何在清洗过程中减少废液和对环境的影响?

    超声波清洗机如何在清洗过程中减少废液和对环境的影响随着环保意识的增强,清洗过程中的废液处理和环境保护变得越来越重要。超声波清洗机作为一种高效的清洗技术,也在不断发展以减少废液生成和对环境的影响。本文
    的头像 发表于 06-16 17:01 884次阅读
    超声波清洗机如何在清洗<b class='flag-5'>过程中</b>减少废液和对环境的影响?

    六相永磁同步电机串联系统控制的两种方法分析研究

    /simulink环境下,分别用这两种方法台电机串联系统的运行特性进行仿真研究。当其中一台电机转速、负载变化时,分析两种方法下另外一台电机独立运行的情况,脸证分析这两种方法的可行性
    发表于 06-10 13:09