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经验。