【简介】
本地在使用OZONE 时加载elf 文件后发现代码中调用的 Disable_Interrupts() 函数没有被展开,第一反应是不会编译器有这么大的坑吧该函数没被编译?

后来查看了下代码这段代码的实现是通过内嵌汇编来实现的,对应代码实现如下:
portFORCE_INLINE static void vPortRaiseBASEPRI( void )
{
uint32_t ulNewBASEPRI;
__asm volatile
(
" mov %0, %1 \n"\
" cpsid i \n"\
" msr basepri, %0 \n"\
" isb \n"\
" dsb \n"\
" cpsie i \n"\
: "=r" ( ulNewBASEPRI ) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
);
}思前想后感觉编译器不会有这么大的坑,想了下会不会是内嵌汇编OZONE 没有识别显示的原因、于是查看了下反汇编的窗口。

从上述的反汇编代码可知代码已经被正常编译了,是因为OZONE显示的原因,是不是OZONE 中所有的内嵌汇编都不会被显示,查看了下代码中的其他的内嵌汇编的 C 函数发现有的内嵌汇编的函数是可以被加载的,搞不清楚内嵌汇编代码的显示策略,大家遇到类似的问题可以查看下反汇编的窗口是否正常。


我要赚赏金
