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参数,所以为什么不使用static_assert检查pin是否有效。

我认为比较容易得到编译器警告,然后将其卡在某些处理程序中。

 .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工具链,链接器在上方生成了链接器图(到目前为止,很好)。

使用-O,链接文件不再包含符号。

我的问题:可以优化多远?有谁知道我在哪里可以找到有关此文件的文档。因为那样我就直接将模板放在GpioF7xx类中。

我实际上创建了一个静态工厂方法,因为我不想为二进制文件中的每个引脚分配单独的类。

此外:我很高兴听到任何评论,因为我来自网络,这可能会变得更加惯用。而且没有专业的嵌入式/ Cpp经验。

xifeng_pc 回答:GCC ARM Os模板功能优化

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3065767.html

大家都在问