2017-01-18 5 views
-1

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 
+0

이 상기의 IoT 허브에서 수행되는 방법의 실제 예를 들면, ([remote_monitoring] 참조 https://github.com/Azure-Samples/iot-hub-c-huzzah-getstartedkit/tree/master/remote_monitoring) – Seth

+0

왜'% d '수정 자로'float'을 출력하고 있습니까? – SergeyA

+0

좋은 지적. 나는 % d을 % f로 바꿨고 출력은 이되었다. modifyFloat에 나타난 값 : 22.55 반환 된 값은 다음과 같다 : % f' % f를 벗어나는 이유는 무엇입니까? 주변을 둘러 보았으므로이 동작에 대한 이유를 찾을 수 없습니다. – Seth

답변

0

문제가 RunTest.c에서의 printf 문자열의 % (D)의 사용이다. 아래에 도시 된 코드를 갱신하는 것은 문제를 해결하고, 출력한다 :

Value seen in modifyFloat: 22.55 
The value that was returned is: 22.55 

RunTest.c

#include "FloatTest.h" 

void runInLoop(void) 
{ 
    while(1) 
    { 
     float testValue; 
     modifyFloat(&testValue); 
     char str_tmp[6]; 
     dtostrf(testValue, 4, 2, str_tmp); 
     (void)printf("The value that was returned is: %s\r\n", str_tmp); 
     delay(1000); 
    } 

}