【简介】
本地在使用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 函数发现有的内嵌汇编的函数是可以被加载的,搞不清楚内嵌汇编代码的显示策略,大家遇到类似的问题可以查看下反汇编的窗口是否正常。