MCS6502功能中的回调不会在ESP32上的Arduino中编译,但会在CodeBlocks C File中编译

发布于 2025-02-03 08:04:59 字数 2786 浏览 3 评论 0 原文

我知道这是一个菜鸟问题,我对C ++不熟悉。 我的理解是,Arduino代码在C ++中编译,这就是导致编译问题的原因。

下面的代码将在CodeBlocks中罚款,并将正确运行,但是,如果我使用相同的代码没有任何修改,则会在编译时产生错误。

HIRES是.ino文件,

#include "MCS6502.h"

int8_t ram [65535];
//////CALL BACK FUNCTION ///////////////////////////////////////////////
uint8_t readBytesFunction(uint16_t add) {
    uint8_t tc = 5;
    tc = ram[add];
    return tc;
}
//////CALL BACK FUNCTION ///////////////////////////////////////////////
void writeBytesFunction(uint16_t add,uint8_t bb)  {
}
void setup()
{
    Serial.begin(115200);
    Serial.println();

    ///CODE BELOW WILL COMPILE AND RUN IN CODEBLOCKS BUT WILL NOT COMPILE IN ARDUINO

    /////////////////////////////////////////////////////////////////////
    MCS6502ExecutionContext context;
    MCS6502Init(&context, readBytesFunction, writeBytesFunction, NULL);  // Final param is optional conte>

    MCS6502Reset(&context);

    MCS6502Tick(&context); //use timings
    MCS6502ExecNext(&context);  //as fast as possible
}

这些是Arduino在Arduino中编译ESP32后的错误,

MCS6502.ino: In function 'void setup()':

wahid_MCS6502:22:27: error: invalid conversion from 'uint8_t (*)(uint16_t)' {aka 'unsigned char (*)(short unsigned int)'} to 'MCS6502DataReadByteFunction' {aka 'unsigned char (*)(short unsigned int, void*)'} [-fpermissive]

     MCS6502Init(&context, readBytesFunction, writeBytesFunction, NULL);  // Final param is optional conte>

                           ^~~~~~~~~~~~~~~~~

 

 MCS6502.h:91:33: note:   initializing argument 2 of 'void MCS6502Init(MCS6502ExecutionContext*, MCS6502DataReadByteFunction, MCS6502DataWriteByteFunction, void*)'

     MCS6502DataReadByteFunction readByteFn,

     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~

 MCS6502:22:46: error: invalid conversion from 'void (*)(uint16_t, uint8_t)' {aka 'void (*)(short unsigned int, unsigned char)'} to 'MCS6502DataWriteByteFunction' {aka 'void (*)(short unsigned int, unsigned char, void*)'} [-fpermissive]

     MCS6502Init(&context, readBytesFunction, writeBytesFunction, NULL);  // Final param is optional conte>

                                              ^~~~~~~~~~~~~~~~~~

 

 MCS6502.h:92:34: note:   initializing argument 3 of 'void MCS6502Init(MCS6502ExecutionContext*, MCS6502DataReadByteFunction, MCS6502DataWriteByteFunction, void*)'

     MCS6502DataWriteByteFunction writeByteFn,

     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~

exit status 1

invalid conversion from 'uint8_t (*)(uint16_t)' {aka 'unsigned char (*)(short unsigned int)'} to 'MCS6502DataReadByteFunction' {aka 'unsigned char (*)(short unsigned int, void*)'} [-fpermissive]

我需要在Arduino中编译什么? 抱歉,如果这个问题缺少一些细节,但我第一次在这里问一个问题。

非常感谢

I know this is a noob question bit I am not familiar with c++ .
My understanding is that arduino code compiles in c++ and this is what causes the problem in compiling.

The code below will compile fine in codeblocks and will run correctly , however if I use the same code without any modifications then it will produce an error at compile time.

heres is the .ino file

#include "MCS6502.h"

int8_t ram [65535];
//////CALL BACK FUNCTION ///////////////////////////////////////////////
uint8_t readBytesFunction(uint16_t add) {
    uint8_t tc = 5;
    tc = ram[add];
    return tc;
}
//////CALL BACK FUNCTION ///////////////////////////////////////////////
void writeBytesFunction(uint16_t add,uint8_t bb)  {
}
void setup()
{
    Serial.begin(115200);
    Serial.println();

    ///CODE BELOW WILL COMPILE AND RUN IN CODEBLOCKS BUT WILL NOT COMPILE IN ARDUINO

    /////////////////////////////////////////////////////////////////////
    MCS6502ExecutionContext context;
    MCS6502Init(&context, readBytesFunction, writeBytesFunction, NULL);  // Final param is optional conte>

    MCS6502Reset(&context);

    MCS6502Tick(&context); //use timings
    MCS6502ExecNext(&context);  //as fast as possible
}

these are the errors after compiling in arduino for esp32

MCS6502.ino: In function 'void setup()':

wahid_MCS6502:22:27: error: invalid conversion from 'uint8_t (*)(uint16_t)' {aka 'unsigned char (*)(short unsigned int)'} to 'MCS6502DataReadByteFunction' {aka 'unsigned char (*)(short unsigned int, void*)'} [-fpermissive]

     MCS6502Init(&context, readBytesFunction, writeBytesFunction, NULL);  // Final param is optional conte>

                           ^~~~~~~~~~~~~~~~~

 

 MCS6502.h:91:33: note:   initializing argument 2 of 'void MCS6502Init(MCS6502ExecutionContext*, MCS6502DataReadByteFunction, MCS6502DataWriteByteFunction, void*)'

     MCS6502DataReadByteFunction readByteFn,

     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~

 MCS6502:22:46: error: invalid conversion from 'void (*)(uint16_t, uint8_t)' {aka 'void (*)(short unsigned int, unsigned char)'} to 'MCS6502DataWriteByteFunction' {aka 'void (*)(short unsigned int, unsigned char, void*)'} [-fpermissive]

     MCS6502Init(&context, readBytesFunction, writeBytesFunction, NULL);  // Final param is optional conte>

                                              ^~~~~~~~~~~~~~~~~~

 

 MCS6502.h:92:34: note:   initializing argument 3 of 'void MCS6502Init(MCS6502ExecutionContext*, MCS6502DataReadByteFunction, MCS6502DataWriteByteFunction, void*)'

     MCS6502DataWriteByteFunction writeByteFn,

     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~

exit status 1

invalid conversion from 'uint8_t (*)(uint16_t)' {aka 'unsigned char (*)(short unsigned int)'} to 'MCS6502DataReadByteFunction' {aka 'unsigned char (*)(short unsigned int, void*)'} [-fpermissive]

what do i need to do it compiles in arduino ??
apologies if some details are missing from this question but its my 1st ever time asking a question here.

many thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小耗子 2025-02-10 08:04:59

我猜您正在使用这个库

查看 void*丢失回调的参数。

您需要:

uint8_t readBytesFunction(uint16_t add, void*) {
    uint8_t tc = 5;
    tc = ram[add];
    return tc;
}
void writeBytesFunction(uint16_t add,uint8_t bb, void*)  {
}

I'm guessing that you are using this library?

Looking at the signatures of the callback functions both require a final void* parameter which your callbacks are missing.

You need:

uint8_t readBytesFunction(uint16_t add, void*) {
    uint8_t tc = 5;
    tc = ram[add];
    return tc;
}
void writeBytesFunction(uint16_t add,uint8_t bb, void*)  {
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文