SMP重新定义中断处理函数的问题

发布于 2020-12-09 17:08:49

这两天在参考qemu的程序尝试移植SMP多核处理,发现context_gcc.S文件中的中断处理函数定义有点疑问。

#ifdef RT_USING_SMP
#define rt_hw_interrupt_disable rt_hw_local_irq_disable
#define rt_hw_interrupt_enable  rt_hw_local_irq_enable
#endif

/*
 * rt_base_t rt_hw_interrupt_disable();
 */
.globl rt_hw_interrupt_disable
rt_hw_interrupt_disable:
    mrs r0, cpsr
    cpsid i
    bx  lr

/*
 * void rt_hw_interrupt_enable(rt_base_t level);
 */
.globl rt_hw_interrupt_enable
rt_hw_interrupt_enable:
    msr cpsr, r0
    bx  lr

这段代码中,的define语句,按照常规理解的话,是将rt_hw_interrupt_disable 的功能定义为rt_hw_local_irq_disable的功能实现,但有趣的是,后面紧跟着又实现了rt_hw_interrupt_disable 的功能,随后查看其它代码后不难发现,其实这里最终目的是将rt_hw_local_irq_disable的功能定义为rt_hw_interrupt_disable的实现 ,恰巧是反的,和常规c程序中#define的语序也正好相反,查阅了一些关于GNU ASM的手册,也没找到确切的答案,还请各位大神赐教。

查看更多

关注者
1
被浏览
168
bernard
bernard 2020-12-10

就是多核上,这段rt_hw_interrupt_disable/rt_hw_interrupt_enable汇编代码
更改成rt_hw_local_irq_disable/rt_hw_local_irq_enable了。
而真正的rt_hw_interrupt_disable/rt_hw_interrupt_enable则实现成SMP下的锁。

3 个回答
knight_hu
knight_hu 2020-12-10

那具体的的rt_hw_local_irq_disable是在哪里实现的呢?

s2010202069
s2010202069 2020-12-20

#define A B
的意思是后文中所有出现A的地方使用B替换,
所以
#define rt_hw_interrupt_disable rt_hw_local_irq_disable
这句话的意思你在仔细品品

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览