首页 > 解决方案 > 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 经验。

标签: c++gccarmembeddedcompiler-optimization

解决方案


推荐阅读