文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>诡异的函数设计

诡异的函数设计

时间:2006-09-15  来源:oliliango

     看2.6.12内核中提供的禁中断的函数,有个:void local_irq_save(unsigned long flags)和void local_irq_restore(unsigned long flags)分别是用来做禁止中断时状态的保护和恢复中断时状态的恢复,看到ldd3中对于这两个函数的调用特别指出时直接传递而不是指针传递,令我很是不解,不解的是:作为传值调用的函数实参怎么能够保存函数调用返回之后的状态呢,这和C的基础知识冲突了。结果实际看了内核的代码才发现这个“函数”实际上是宏......

      faint了......

      内核代码中是这么写的:

      #define local_irq_save(flags)   local_irq_save_ptr(&flags)
 

      现在就清楚了实际上怎么回事了。这里一并把实际的函数也贴上存档备忘:

static inline void local_irq_save_ptr(unsigned long *flags)
{
        unsigned long msr;
        msr = mfmsr();
        *flags = msr;
#ifdef CONFIG_BOOKE
        __asm__ __volatile__("wrteei 0": : :"memory");
#else
        SET_MSR_EE(msr & ~MSR_EE);
#endif
        __asm__ __volatile__("": : :"memory");
}

     遗留的是要考虑清楚为什么要这么定义,是出于什么目的要这么转换一下......

     达人来指教就好了。

 

相关阅读 更多 +
排行榜 更多 +
拼优汇

拼优汇

购物比价 下载
4Read小说

4Read小说

浏览阅读 下载
摩托GP特技

摩托GP特技

体育竞技 下载