您好,我正在为 MCU 的引导加载程序编写一些修改后的代码。我试图做的修改是为引导加载程序供电,即使是看门狗定时器重置。
我正在使用这个函数原型(prototype)来定义引导加载程序的地址,但我得到了错误:
invalid conversion from 'long int' to 'void (*)()' [-fpermissive]
我的代码是
#if defined ( __AVR_ATmega1284P__ )
void (*boot_start)(void) = 0xF000;
#elif defined ( __AVR_ATmega2560__ )
void (*boot_start)(void) = 0x1F000;
#endif
其中 0xF000 和 0x1F000 是内存空间。如果我的代码是 `
,我不会收到此错误void (*boot_start)(void) = 0x0000;
为什么??
最佳答案
编译器将 0xF000
识别为 int
并放弃将此值分配给指针。你应该显式地转换它:
void (*boot_start)(void) = (void (*)())0xF000;
关于c++ - 从 'long int' 到 'void (*)()' [-fpermissive] 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35596896/