Arduino 루프에서 c-function을 사용해야하는 Azure IoT 허브 용 코드를 작성하고 있습니다.). 내가 가지고있는 문제는 C++ 파일에 생성 된 float에 대한 포인터를 C++ 파일에 전달하고 값을 수정하면 C++ 함수가 반환 한 후 c- 파일에 나타나는 내용이 횡설수설한다는 것입니다. 여기 Arduino의 C++ 함수 esp8266은 C++ 함수가 종료 된 후 c 파일에 나타나는 횡설수설 글꼴을 수정합니다.
는 psuedocode 예이고, 작동 예는 다음이 포함된다 :루프() 이노 파일 :
실행 runInLoop()는 C-파일 RunTest.c
runInLoop 정의 ()
float을 만들려면
floatTest.cpp에 정의 된 modifyFloat (float * address)에 주소를 전달하십시오.
modifyFloat()가 반환 된 후 float 값을 인쇄하십시오.
modifyFloat FloatTest.cpp에서 (플로트 * 주소) :
가 베일을 지정하려면 * 주소
값
반환
나는 아래의 작업 예에서이 의사와 결과에 실행 한 인쇄 직렬 모니터는 다음과 같습니다.
Value assigned in modifyFloat: 22.55
The value that was returned is: 1077316812
저는 Adafruit Huzzah Feather를 사용하고 있습니다. 설명서에 나와있는대로 정확하게 구성해야합니다.
#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);
}
}
RunTest.h
#ifndef RUNTEST_H
#define RUNTEST_H
#ifdef __cplusplus
extern "C" {
#endif
void runInLoop(void);
#ifdef __cplusplus
}
#endif
#endif // RUNTEST_H
FloatTest.cpp
RunTest.c#include "RunTest.h"
void setup()
{
initSerial();
}
void loop()
{
Serial.println("Starting main loop!\r\n");
runInLoop();
}
void initSerial()
{
Serial.begin(9600);
}
azure_troubleshoot.ino : 여기
는 동작 예이며
#include <Arduino.h>
#include "FloatTest.h"
void modifyFloat(float *address)
{
*address = 22.55;
Serial.print("Value assigned in modifyFloat: ");
Serial.println(*address);
}
FloatTest.h
#ifndef FLOATTEST_H
#define FLOATTEST_H
#ifdef __cplusplus
extern "C" {
#endif
void modifyFloat(float* address);
#ifdef __cplusplus
}
#endif
#endif // FLOATTEST_H
이 상기의 IoT 허브에서 수행되는 방법의 실제 예를 들면, ([remote_monitoring] 참조 https://github.com/Azure-Samples/iot-hub-c-huzzah-getstartedkit/tree/master/remote_monitoring) – Seth
왜'% d '수정 자로'float'을 출력하고 있습니까? – SergeyA
좋은 지적. 나는 % d을 % f로 바꿨고 출력은 이되었다. modifyFloat에 나타난 값 : 22.55 반환 된 값은 다음과 같다 : % f' % f를 벗어나는 이유는 무엇입니까? 주변을 둘러 보았으므로이 동작에 대한 이유를 찾을 수 없습니다. – Seth