c++ - GCC ARM Os模板函数优化
问题描述
class GpioF7xx : public Gpio {
public:
template <uint32_t PIN>
static GpioF7xx create(GPIO_TypeDef* base) {
static_assert(PIN >= 0 && PIN =< 15, "Gpio pins are only available from 0 to 15");
return GpioF7xx(base, PIN);
}
我有一个非常简单的 Gpio 类,它抽象了寄存器分配。在这个类中,我在编译时有 pin 参数,所以为什么不检查 pin 是否是有效的static_assert
。
我认为更容易获得编译器警告,然后卡在某个处理程序中。
.text._ZN8GpioF7xx6createILm6EEES_P12GPIO_TypeDef
0x0000000008000a84 0x1c cmake-build-debug/main.o
0x0000000008000a84 GpioF7xx GpioF7xx::create<6ul>(GPIO_TypeDef*)
.text._ZN8GpioF7xx6createILm7EEES_P12GPIO_TypeDef
0x0000000008000aa0 0x1c cmake-build-debug/main.o
0x0000000008000aa0 GpioF7xx GpioF7xx::create<7ul>(GPIO_TypeDef*)
...
使用 (-O0) gcc-none-eabi 工具链,链接器生成了上面的链接器映射(到目前为止一切都很好)。
使用 -Os 链接器文件不再包含符号。
我的问题:这可以优化到什么程度?有谁知道我在哪里可以找到有关此的文档。因为那样我会直接将模板放在 GpioF7xx 类中。
我实际上创建了一个静态工厂方法,因为我不希望二进制文件中的每个引脚都有一个单独的类。
此外:我很欣赏任何评论,因为我来自网络,这可能会更加地道。并且没有专业的嵌入式/Cpp 经验。
解决方案
推荐阅读
- python - 如何读取 file.txt 中的某个变量
- r - 如何在 R 中使用新名称重复向数据框添加新列?
- python - 解析目录作为参数的问题
- php - 如何在 Windows 上渲染 PHP 文件?
- pytorch - 火炬堆栈产生错误的尺寸
- laravel-7 - 通过 API 验证电子邮件
- javascript - 如何在同一php页面上的分页链接按钮上传递id而不更改链接?
- discord.js - 使用户失败了他们的抢劫尝试 discord.js
- python - 为什么我的数组不显示嵌入维度?
- ibm-cloud - 对话节点内的 IBM Watson Assistant 搜索技能始终返回 3 个结果