所以在stm32f4中屏蔽 __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "armcc");有什么影响
时间: 2023-10-22 16:25:05 浏览: 39
在STM32F4中,屏蔽掉__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "armcc");会影响使用VFP(浮点运算器)进行浮点运算的性能。这段代码的作用是将当前的浮点状态寄存器(FPSCR)的值保存到内存中,以便在函数返回时还原浮点状态。如果屏蔽掉这段代码,浮点状态寄存器不会被保存和还原,这可能会导致浮点运算的结果不正确。此外,如果在函数调用过程中发生了浮点异常,调试器可能无法正确地定位异常的源代码行,从而增加调试的难度。因此,建议不要屏蔽这段代码,以确保浮点运算的正确性和调试的方便性。
相关问题
把__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");改成gnu风格
将__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");改成GNU风格的汇编语言可以使用如下代码:
```
__asm__ volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");
```
其中,__asm__ 是GNU C语言中表示汇编代码的关键字,volatile表示汇编代码是具有副作用的,"VMSR fpscr, %0"是汇编代码,:表示分隔符,"r" (fpscr)表示将C语言变量fpscr传递给汇编代码,"vfpcc"表示使用vfpcc寄存器。
__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");用编译器V6下为什么会报错
在编译器V6下,代码中的__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");可能会报错,原因是编译器V6不再支持GCC风格的内联汇编语法。所以,您需要使用新的内联汇编语法。
新的内联汇编语法如下:
```
__asm volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");
```
其中,__asm是GCC扩展关键字,volatile表示汇编代码是具有副作用的,"VMSR fpscr, %0"表示汇编代码,":"表示分隔符,"r" (fpscr)表示将C语言变量fpscr传递给汇编代码,"vfpcc"表示使用vfpcc寄存器。
请注意,新的内联汇编语法在GCC和Clang编译器中都适用,但在其他编译器中可能会有所不同。