我正在为 Azure IoT Hub 编写代码,这需要在 Arduino loop() 中使用 c 函数。我遇到的问题是,如果我将指向在 c 文件中创建的浮点数的指针传递给 c++ 文件并修改值,则 c++ 函数返回后在 c 文件中看到的内容是乱码。
这是一个伪代码示例,下面包含一个工作示例:
ino 文件中的 loop():
运行 runInLoop(),在 c 文件 RunTest.c 中定义
RunTest.c 中的 runInLoop():
创建一个浮点数
,将地址传递给 FloatTest.cpp 中定义的 modifyFloat(float *address),
在 modifyFloat() 返回后打印浮点数的值。
FloatTest.cpp 中的 modifyFloat(float *address):
分配一个值到 *address
打印
返回值
我在下面的工作示例中执行了这个伪代码,串行监视器中的结果是:
Value assigned in modifyFloat: 22.55
The value that was returned is: 1077316812
我正在使用 Adafruit Huzzah Feather,其配置与文档中的说明完全相同。
这是一个工作示例:
azure_troubleshoot.ino
#include "RunTest.h"
void setup()
{
initSerial();
}
void loop()
{
Serial.println("Starting main loop!\r\n");
runInLoop();
}
void initSerial()
{
Serial.begin(9600);
}
运行测试.c
#include "FloatTest.h"
void runInLoop(void)
{
while(1)
{
float testValue;
modifyFloat(&testValue);
(void)printf("The value that was returned is: %d\r\n", testValue);
delay(1000);
}
}
运行测试.h
#ifndef RUNTEST_H
#define RUNTEST_H
#ifdef __cplusplus
extern "C" {
#endif
void runInLoop(void);
#ifdef __cplusplus
}
#endif
#endif // RUNTEST_H
浮动测试.cpp
#include <Arduino.h>
#include "FloatTest.h"
void modifyFloat(float *address)
{
*address = 22.55;
Serial.print("Value assigned in modifyFloat: ");
Serial.println(*address);
}
浮动测试.h
#ifndef FLOATTEST_H
#define FLOATTEST_H
#ifdef __cplusplus
extern "C" {
#endif
void modifyFloat(float* address);
#ifdef __cplusplus
}
#endif
#endif // FLOATTEST_H