c++ - 从 'long int' 到 'void (*)()' [-fpermissive] 的无效转换

标签 c++ pointers bootloader

您好,我正在为 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/

相关文章:

pointers - 在没有 channel 的情况下同时计算斐波那契,但是指针不起作用

c++ - 如何有效地将结构 vector 写入文件?

c++ - 什么版本的 VTK 支持 vtkNew 自动转换?

c - 如何找到数组的大小(从指向数组第一个元素的指针)?

c++ - C++中指针结构的运算符重载

assembly - 尝试启用保护模式时的引导循环

assembly - 引导加载程序的奇怪行为

c - 从引导加载程序运行 C 代码

c++ - for循环没有在while循环中第二次执行

c++ - 如何对类数组进行排序