gpt4 book ai didi

c - 将 C 代码移植到 Arduino 平台(struct 和 typedef 定义中的错误)

转载 作者:行者123 更新时间:2023-11-30 19:55:40 24 4
gpt4 key购买 nike

我有一个工作的跨平台 Visual Studio Windows C 控制台应用程序源。该应用程序使用串行接口(interface)与 RFID 读取器进行通信。我想将其移植到微 Controller 以启动无需 PC 的阅读器。为此,我决定使用 Arduino。它使用 C/C++ 语法。在下面的代码中,Arduino IDE 编译器给出错误。错误是“错误:‘*’标记之前应有‘)’”

/* A typedef that should be used for RFID radio handles */
typedef HANDLE32 RFID_RADIO_HANDLE;

/******************************************************************************
* Name: RFID_PACKET_CALLBACK_FUNCTION
*
* Description:
* The tag-protocol operation response packet callback function signature.
*
* Parameters:
* handle - the handle for the radio for which operation response packets are
* being returned
* bufferLength - the length of the buffer that contains the packets
* pBuffer - a buffer that contains one or more complete operation response
* packets
* context - an application-defined context value that was supplied when the
* the original tag-protocol operation function was invoked
*
* Returns:
* 0 - continue making packet callbacks
* !0 - cancel the tag-protocol operation and stop making callbacks for that
*
* The return value of the last packet callback for the tag-protocol operation
* is returned to the application if the application indicates the desire for
* this value when it invokes the tag-protocol opreation.
******************************************************************************/
typedef INT32S (RFID_CALLBACK * RFID_PACKET_CALLBACK_FUNCTION)(
RFID_RADIO_HANDLE handle,
INT32U bufferLength,
const INT8U* pBuffer,
void* context
);

它正在 Visual Studio 中运行,因此它的语法应该是正确的。我不知道如何解决这个错误。

下面的代码中还有另一个错误。这个头文件中有很多结构体定义。我给出了其中的一小部分,这会产生错误。错误是“错误:'RFID_PACKET_CALLBACK_FUNCTION'未命名类型”

.
.
.
...
typedef struct {
INT32U tagStopCount;
RFID_PACKET_CALLBACK_FUNCTION pCallback;
void* context;
INT32S* pCallbackCode;
} RFID_18K6C_COMMON_PARMS;

typedef struct {
INT32U length;
INT32U command;
RFID_PACKET_CALLBACK_FUNCTION pCallback;
void* context;
INT32S* pCallbackCode;
} RFID_ISSUE_RADIO_COMMAND_PARMS;

typedef struct {
INT32U length;
INT32U duration;
RFID_PACKET_CALLBACK_FUNCTION pCallback;
void* context;
INT32S* pCallbackCode;
} RFID_RANDOM_CW_PARMS;
.
.
.
...

这些代码都可以在 VS 控制台应用程序中运行。我应该为Arduino平台做什么?

最佳答案

您的第一个问题是 RFID_PACKET_CALLBACK_FUNCTIONtypedef 的函数指针语法不正确。这一点:

(RFID_CALLBACK * RFID_PACKET_CALLBACK_FUNCTION)

应该定义函数类型,但给定的代码不是有效的类型标识符。它在 Visual Studio 中工作的事实并不能保证语法的正确性,因为编译器编写者几乎总是支持语法扩展来控制晦涩的功能,而 Microsoft 肯定对此感到内疚。然而,在这种情况下,它看起来不像编译器特定的东西,我猜想有一个头文件在某处执行条件#define RFID_CALLBACK ...,这在Arduino环境中没有正确发生。 (Arduino 不是真正的 C,它的预处理器 reportedly 功能不全。)

您的第二个问题只是第一个问题的结果,因为如果 typedef 失败,则 RFID_PACKET_CALLBACK_FUNCTION 确实不会命名类型。

正如 freespace 所指出的,比这些问题更根本的是您期望能够轻松地将代码从桌面操作系统移植到一个小小的 Arduino,而无需做一些认真的工作。

关于c - 将 C 代码移植到 Arduino 平台(struct 和 typedef 定义中的错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9801614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com