在v6编译器下的具体函数__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)
时间: 2023-08-12 11:21:14 浏览: 55
在ARM Cortex-M处理器中,浮点运算单元(FPU)的配置和控制是通过特殊寄存器FPSCR(浮点状态和控制寄存器)来完成的。在CMSIS库中,__set_FPSCR函数用于设置FPSCR寄存器的值。具体函数定义如下:
```c
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)
{
__ASM volatile ("MSR fpscr, %0" : : "r" (fpscr) : "memory");
}
```
可以看到,该函数使用了 `__attribute__( ( always_inline ) )` 属性,表示该函数在编译时应该被强制内联,以提高函数调用的效率。函数实现内联后,可以直接将函数代码插入到调用处,避免了函数调用时的堆栈操作和跳转指令,从而提高了代码执行的效率。
该函数的作用是将传入的fpscr值写入FPSCR寄存器中,以配置和控制FPU的运算精度和舍入方式等。具体的操作是通过汇编指令 `MSR fpscr, %0` 实现的,其中 `%0` 表示使用第一个输入参数(即fpscr值)替换指令中的占位符,将fpscr值写入FPSCR寄存器中。
需要注意的是,该函数使用了 `__STATIC_INLINE` 关键字,表示该函数既是静态函数,又是内联函数。这意味着该函数只能在当前源文件中使用,并且在编译时应该被内联展开。
相关问题
gcc编译器__attribute__
`__attribute__` 是GCC编译器的一个扩展,用于向编译器提供特定的指示或属性。通过使用 `__attribute__`,我们可以对代码进行一些配置或声明一些特殊的属性。
`__attribute__` 的语法如下:
```c
__attribute__((attribute-list))
```
其中 `attribute-list` 是由多个属性(attribute)组成的列表,用逗号分隔。每个属性都有自己的语义和参数。
以下是一些常用的 `__attribute__` 属性:
1. `__attribute__((packed))`: 告诉编译器按照最小的字节对齐方式对结构体进行打包,减少内存空间消耗。
2. `__attribute__((aligned(n)))`: 告诉编译器按照指定的字节对齐方式对变量或结构体进行对齐。
3. `__attribute__((noreturn))`: 声明函数不会返回,这对于像 `exit()` 或者类似的无法返回的函数非常有用。
4. `__attribute__((unused))`: 标记变量或函数未使用,这可以避免编译器产生未使用变量或函数的警告。
5. `__attribute__((deprecated))`: 标记函数或变量已过时,这可以提醒开发者使用更好的替代方法。
6. `__attribute__((format(format_index, arg_index)))`: 格式化字符串检查,可以让编译器检查函数调用的格式化字符串参数与参数列表是否匹配。
这只是一些常见的 `__attribute__` 属性示例,实际上GCC编译器支持更多的属性,可以根据需要查阅相关文档来了解更多细节。
__attribute__((always_inline)) inline void SysTickInterruptHandler(void)
__attribute__((always_inline)) inline void SysTickInterruptHandler(void)是一个函数声明,使用了__attribute__((always_inline))修饰符来指示编译器始终内联该函数。这意味着编译器将尽可能地将函数的代码插入到调用该函数的地方,而不是生成函数调用的代码。这样可以提高程序的执行效率。\[1\]
在引用的代码中,还有其他使用了__attribute__((always_inline))修饰符的函数声明,例如htons函数和fun函数。这些函数也被指示为始终内联。\[2\]\[3\]
请注意,__attribute__((always_inline))修饰符是特定于编译器的扩展,不是标准C++的一部分。因此,它的使用可能会导致代码在不同的编译器上的行为不一致。
#### 引用[.reference_title]
- *1* *3* [__inline__ __attribute__((always_inline))强制内联](https://blog.csdn.net/LU_ZHAO/article/details/105118432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [关于__attribute__( ( always_inline ) ) __STATIC_INLINE定义内联函数的一些问题](https://blog.csdn.net/fly__ome/article/details/90262868)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]