首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

静态库中定义的IRQ符号不会覆盖ARM/GCC启动时的弱IRQ定义

静态库中定义的IRQ符号不会覆盖ARM/GCC启动时的弱IRQ定义。这是因为在链接过程中,静态库中的符号会被链接器解析并与目标文件中的符号进行匹配。当静态库中的符号与目标文件中的符号冲突时,链接器会选择目标文件中的符号作为最终的定义。

在ARM/GCC启动时,通常会定义一些弱IRQ符号,这些符号的定义是为了提供默认的中断处理函数。当静态库中也定义了相同的IRQ符号时,链接器会选择目标文件中的弱IRQ定义,而不会使用静态库中的定义。

静态库是一种包含预编译的目标文件的归档文件,它可以被链接到应用程序中以提供额外的功能。静态库中的符号可以被应用程序使用,但不会覆盖目标文件中的符号定义。

静态库的优势在于它可以提供代码的重用性和模块化,可以减少代码的冗余和维护成本。它适用于需要频繁使用的功能模块,可以提高开发效率和代码的可维护性。

对于静态库中定义的IRQ符号,其应用场景通常是在嵌入式系统或操作系统开发中,用于处理硬件中断。通过定义IRQ符号,可以实现对硬件中断的处理和响应。

腾讯云提供了一系列与云计算相关的产品和服务,包括云服务器、云数据库、云存储、人工智能等。具体推荐的产品和产品介绍链接地址可以根据具体需求和场景进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )

; 使用 _start: 标明程序入口标号是 _start; 5.定义标号( 类似于函数名 ) : 定义定义标号, 格式 标号:, 例如 irq:; ( 1 ) 定义标号执行指令 : 标号下面定义要执行指令...nop 表示 什么操作都不执行; 7.定义标号 ( 类似于变量 ) : 定义一个标号, 在标号存放 32 位值, 定义格式 标号: .word 存储值内容; ( 1 ) 示例 : _irq...: .word irq, 定义 _irq 标号, .word 表示该标号存储是 32 位值, 这个值大小就是 irq 地址; 8.分支指令 : 当异常发生时候, 需要跳转到对应异常处理指令;...装载 到 寄存器; ( 2 ) 代码示例 : a.定义标号 ( 函数 ) : 定义要执行指令标号 irq , 即跳转到该标号处, 就开始执行标号下面的指令, irq : nop ; b....定义标号 ( 变量 ) : 定义一个标号 _irq , 用于存放一个 32 位值, 这里用于存放 上面 定义标号 地址, _irq .word irq c.装载地址到 pc 寄存器 : ldr pc

3.7K10

ARM(九).RTC and ALARM(1)

GET startup_head.s ;GET伪指令将startup_head.s包含到此文件,startup_head.s是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义...,而是在其它源文件定义,在本源文件可能引用该符号,main定义在c源文件 IMPORT arlar_int_fun ;arlar_int_fun定义在c源文件 AREA RESET...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被...INCLUDE进来中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构LR特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

82510
  • ARM(十).RTC and TICK(1)

    GET startup_head.s ;GET伪指令将startup_head.s包含到此文件,startup_head.s是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义...,而是在其它源文件定义,在本源文件可能引用该符号,main定义在c源文件 IMPORT handle_tick ;handle_tick定义在c源文件 AREA RESET...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被...INCLUDE进来中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构LR特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

    86530

    ARM(十四).WatchDog with IRQ

    (只读栈和读写栈,也就是代码区与数据区大小) 选择H-JTAG ARM 模式 选择正确模式 使用外部工具 代码示例 wtd_irq.s 这是主汇编程序,定义了中断向量表,进行了各种初始化 GET...包含到此文件,startup_head.s是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义,而是在其它源文件定义,在本源文件可能引用该符号...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被...INCLUDE进来中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构LR特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

    97940

    ARM(六).TIMER and IRQ(1)

    ;GET伪指令将startup_head.s包含到此文件,startup_head.s是初始化配置 IMPORT kain ;IMPORT伪指令指示编译器当前符号不是在本源文件定义,...而是在其它源文件定义,在本源文件可能引用该符号,Main定义在c源文件 IMPORT Handle_Timer0 ;Handle_EINT0定义在c源文件 AREA RESET...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被...INCLUDE进来中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构LR特殊用途有两种:一是用来保存子程序返回地址...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

    64430

    ARM(五).EINT and IRQ(1)

    GET startup_head.s ;GET伪指令将startup_head.s包含到此文件,startup_head.s是初始化配置 IMPORT Main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义...,而是在其它源文件定义,在本源文件可能引用该符号,Main定义在c源文件 IMPORT Handle_EINT0 ;Handle_EINT0定义在c源文件 IMPORT Handle_EINT1...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息...,同时编译器也不会到当前没有被INCLUDE进来中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构LR特殊用途有两种...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到

    57930

    ARM(十三).WatchDog1

    选项卡确保时钟频率和板载一致 正确设定内存(只读栈和读写栈,也就是代码区与数据区大小) 选择H-JTAG ARM 模式 选择正确模式 使用外部工具 代码示例 wtd.s 这是主汇编程序,定义了中断向量表...;GET伪指令将startup_head.s包含到此文件,startup_head.s是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义...,而是在其它源文件定义,在本源文件可能引用该符号,main定义在c源文件 AREA RESET, CODE, READONLY ;定义一个名为RESET只读代码段 CODE32...可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被INCLUDE进来中去查找该标号 SUB...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

    78140

    ARM(七).TIMER and PWM(1)

    GET startup_head.s ;GET伪指令将startup_head.s包含到此文件,startup_head.s是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义...,而是在其它源文件定义,在本源文件可能引用该符号,Main定义在c源文件 IMPORT hander_timer0 ;hander_timer0定义在c源文件 AREA RESET...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被...INCLUDE进来中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构LR特殊用途有两种:一是用来保存子程序返回地址...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

    38930

    ARM(三).UART with FIFO(2)

    是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义,而是在其它源文件定义,在本源文件可能引用该符号,main定义在c源文件 IMPORT...代表禁止所有中断,使用ARM模式,进入中断模式) LDR SP, =IRQStack_BASE ;IRQStack_BASE在另一个文件定义,将中断模式堆栈指针SP指到IRQStack_BASE...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息...,同时编译器也不会到当前没有被INCLUDE进来中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构LR特殊用途有两种...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到

    29810

    ARM(十二).ADC with IRQ1

    Target not created 选择H-JTAG ARM 模式 选择正确模式 使用外部工具 代码示例 adc_irq.s 这是主汇编程序,定义了中断向量表,进行了各种初始化 GET s3c2410...包含到此文件,startup_head.s是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义,而是在其它源文件定义,在本源文件可能引用该符号...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被...INCLUDE进来中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构LR特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

    75020

    ARM(十一).ADC(1)

    选项卡确保时钟频率和板载一致 正确设定内存(只读栈和读写栈,也就是代码区与数据区大小) 选择H-JTAG ARM 模式 选择正确模式 使用外部工具 代码示例 adc.s 这是主汇编程序,定义了中断向量表...;GET伪指令将startup_head.s包含到此文件,startup_head.s是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义...,而是在其它源文件定义,在本源文件可能引用该符号,main定义在c源文件 AREA RESET, CODE, READONLY ;定义一个名为RESET只读代码段 CODE32...,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被INCLUDE进来中去查找该标号 SUB LR, LR, #4...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

    54340

    ARM(八).RTC(1)

    包含到此文件,startup_head.s是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义,而是在其它源文件定义,在本源文件可能引用该符号...代表禁止所有中断,使用ARM模式,进入中断模式) LDR SP, =IRQStack_BASE ;IRQStack_BASE在另一个文件定义,将中断模式堆栈指针SP指到IRQStack_BASE...;B Default_IRQ_ISR代表啥都不干(因为上面对Default_IRQ_ISR操作定义就是啥都没干) EINT1_Handle B Default_IRQ_ISR...,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被INCLUDE进来中去查找该标号 SUB LR, LR, #4...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

    1.2K30

    高通平台8953 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953 android7.1实例分析篇)

    =; }; }; 2.1,其中compatible属性标识名字是与驱动程序名字相匹配 2.2,其中reg属性及@符号十六进制数字标识了该设备iqs263...i2c地址为0x44 2.3,&i2c_8前&表明此处仅仅是对i2c_8节点补充,我们可以找到该节点定义地方 kernel\arch\arm64\boot\dts\qcom\msm8953.dtsi...,可以看到定义了该i2c接口时钟源、中断格式等。...-0 属性指向了表明其io口属性节点为iqs263_irq_config,相关代码也在2.3.1指示msm8953-pinctrl.dtsi文件。...其中定义了iqs263中断IO脚为Gpio48 2.5,iqs263节点中vdd-supply,vio-supply属性指示了表明iqs263芯片供电引脚节点pm8953_l5,代码如下 kernel

    1.8K60

    【嵌入式开发】ARM 看门狗 Watchdog ( 看门狗概念 | 看门狗原理 | 时钟控制寄存器 | 定时器数据寄存器 | 定时器计数寄存器 | 定时器中断清理寄存器 | 关闭看门狗代码编写 )

    计数 超时时间 ; 2.WTCNT 超时时间设置 : WTDAT 寄存器不会自动被加载到 看门狗 定时器 计数器 ; 3.默认初始值 : 使用 0x8000 作为计时器 默认 超时时间,...; 2.初始值设置 : 当看门狗 计时器 最初工作时, WTDAT 寄存器不会自动装载入 WTCNT 寄存器, WTCNT 寄存器 在开始工作前必须设置一个初始值; ---- 4....0x7E004000 ; 2.定义调用标号 : 在 汇编 代码定义 一个标号, 用于 标记关闭看门狗指令 地址 , 使用 bl 指令 跳转到该标号处, 即可执行 关闭看门狗操作, 代码 disable_watchdog...: C 代码编译成同名 .o 文件, %.o : %.c , 产生过程是 arm-linux-gcc -g -c $^ ; 3.设置最终目标 : 使用 all: 设置最终编译目标; ( 1...o : %.S #通用规则, 如 start.o 是由 start.S 编译来, -c 是只编译不链接 arm-linux-gcc -g -c $^ %.o : %.c #通用规则

    3.8K40

    第1阶段——uboot分析之硬件初始化start.S(4)

    // .globl定义一个全局符号"_start",表明_start这个符号要被链接器用到 2 _start: //_start:系统复位设置,以下共...声明全局符号_start,在 board/100ask24x0/u-boot.ldsENTRY(_start)这里用到 其中符号保存地址都在顶层目录/system.map列出来了 system.map...将中断IRQ所对应是R14_irq寄存器并放入到 PC ,如下图,中断IRQ所对应是R14_irq寄存器,执行MOVS R14_svc . ? b....8.清bss段(未初始全局/静态变量) 9.跳转到start_armboot函数(位于u-boot-1.1.6/lib_arm/borad.c,用来实现第2阶段硬件相关初始化) 本章小结: uboot...8.清bss段(未初始全局/静态变量) 9.跳转到start_armboot函数(位于u-boot-1.1.6/lib_arm/borad.c,用来实现第2阶段硬件相关初始化) 接下来开始分析uboot

    1.1K80

    ARM(十五).IIC with IRQ

    Target not created 选择H-JTAG ARM 模式 选择正确模式 使用外部工具 代码示例 iic_irq.s 这是主汇编程序,定义了中断向量表,进行了各种初始化 GET s3c2410...包含到此文件,startup_head.s是初始化配置 IMPORT main ;IMPORT伪指令指示编译器当前符号不是在本源文件定义,而是在其它源文件定义,在本源文件可能引用该符号...[WEAK] ;EXPORT声明一个符号IRQ_Handler可以被其它文件引用,[WEAK] 指定该选项后,如果symbol在所有的源程序中都没有被定义,编译器也不会产生任何错误信息,同时编译器也不会到当前没有被...INCLUDE进来中去查找该标号 SUB LR, LR, #4 ;LR连接寄存器(Link Register, LR),在ARM体系结构LR特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时...,{R0-R12, PC}^ ;进行现场恢复,将之前压栈环境变量从堆栈读出,覆盖到当前寄存器,在LDM指令寄存器列表包含有PC时使用'^',那么除了正常多寄存器传送外,将SPSR拷贝到CPSR

    97320

    start_kernel函数部分分析

    start_kernel函数分析 1. set_task_stack_end_magic(&init_task); 抽取关键部分 //找到栈顶位置并设置个魔术字,防止堆栈 将 thread_info 数据覆盖...smp_on_up; #else return true; #endif } 我是imx6ull板子,不是对称多处理器,这里宏没定义,直接返回false。...所以mpidr 为0 3. local_irq_disable 暂时禁止本地中断, 设置完相关东西后再开启 // 禁止本地中断 local_irq_disable raw_local_irq_disable...set_cpu_online set_cpu_active set_cpu_present set_cpu_possible 5.page_address_init 初始化高端内存线性地址永久映射全局变量...version 4.9.4 (Linaro GCC 4.9-2017.01) " 7. setup_arch 初始化体系相关部分,实现与体系和芯片有关 // 初始化体系相关部分,实现与体系和芯片有关

    33510

    第014课 Jz2400_ARM异常与中断体系详解

    ,那么我就不需要保存 系统/用户模式下R8 ~ R12这几个寄存器,在FIQ模式下有自己专属R8 ~ R12寄存器,省略保存寄存器时间,加快处理速度 但是在Linux不会使用FIQ模式 2 处理...-c -o led.o led.c arm-linux-gcc -c -o uart.o uart.c arm-linux-gcc -c -o init.o init.c arm-linux-gcc...arm-linux-gcc -c -o init.o init.c arm-linux-gcc -c -o main.o main.c arm-linux-gcc -c -o start.o...,可以百度搜索 arm-linux-gcc 汇编 定义字符串 * *官方说明文档 *http://web.mit.edu/gnu/doc/html/as_7.html .string "str" Copy...定义函数指针数组 typedef void(*irq_func)(int); 定义一个数组,我们来卡看下这里有多少项,一共32位,我们想把每一个中断处理函数都放在这个数组里面来,当发生中断时

    1.6K20

    linux性能工具--ftrace框架

    模式: 在生产者已经把Ring Buffer空间写满情况下,如果没有消费者来读数据free空间,生产者会覆盖写入,最老数据会被覆盖; 其次,从架构图中,我们面对有很多写者,对于同一个per cpu...读操作不会中断写操作,但是写操作会中断读操作 支持两种模式读操作:简易读,也叫iterator读,在读取时会关闭写入,且读完不会破坏数据可以重复读取,实例见"/sys/kernel/debug/tracing...在gcc使用了"-gp“选项以后,会在每个函数入口插入以下语句 每个函数入口处插入对_mcount()函数调用,就是gcc提供插桩机制,我们可以重新定义_mcount()函数内容,调用想要执行内容...对于tracer自身而言,是不是需要-pg选项,因此在kernel/tracing/Makefile中将-pg选项由我们自己定义 2.1.1 静态插桩 我们来看看ARM64如何处理,其代码路径为arch...event,上面学习了function,本节是学习event,其也离不开如下流程 trace event插桩使用是tracepoint机制,该机制是一种静态插桩方法,它需要静态定义桩函数,并且在插桩位置显式调用

    1.1K10

    RTOS内功修炼记(三)—— 内核到底是如何管理中断

    NVIC在 ARM Conrtex-M 内核,用一个 8 位寄存器来配置,总共可以配置 级中断,但是 ST 公司在生产 STM32 时候,发现一个小小单片机根本用不了这么多,纯属浪费,所以将该寄存器低...STM32 HAL中断处理 STM32提供HAL中提供了默认中断处理函数,在stm32l4xx_it.c,以外部中断为例: ?...通过HAL实现机制,最终会调用到定义回调函数: __weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { UNUSED(GPIO_Pin...① 变量定义 TencentOS-tiny中用来记录这一数值全局变量在tos_global.c定义: k_nesting_t k_irq_nest_cnt...总结一下就是: 「RTOS中断处理程序不会返回原来被中断任务,而是返回到系统存在最高优先级任务,只有中断处理程序编写,与裸机程序有两点不同,其余一模一样」: ① 在进入之后调用一次tos_knl_irq_enter

    2.3K21
    领券