私が理解している限り、nesC
本質的に同じである以下の機能があります!C
event void AdaptiveSampling.dataAvailable(error_t result, float val, bool isRealData)
{
if(result == SUCCESS)
{
//converting raw ADC to centigrade
centiGrade = -39.60 + 0.01 * val;
//printing the value to serial port
if(isRealData)
{
printf("REAL: Temperature is: %d CentiGrade\r\n", centiGrade); //line 91
printf("%d,R,%d,%d\r\n", _counter, val, centiGrade); //line 92
}
else
{
printf("PEDICTED: Temperature is: %d CentiGrade\r\n", centiGrade); //line 96
printf("%d,P,%d,%d\r\n", _counter, val, centiGrade); //line 97
}
_counter++;
}
else
{
printf("Error reading sensor!");
}
}
そして、私のコードの先頭で、これらの変数を定義しました:
uint32_t _counter;
uint16_t centiGrade;
これは、ビルド中に表示される警告です。
AdaptiveSamplingC.nc:92:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘uint32_t’ [-Wformat]
AdaptiveSamplingC.nc:92:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘float’ [-Wformat]
AdaptiveSamplingC.nc:97:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘uint32_t’ [-Wformat]
AdaptiveSamplingC.nc:97:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘float’ [-Wformat]
そして、画面上の出力の例を次に示します。
PEDICTED: Temperature is: 26 CentiGrade
291,P,0,-3402
REAL: Temperature is: 26 CentiGrade
292,R,0,4096
PEDICTED: Temperature is: 26 CentiGrade
293,P,0,-1495
問題:
91 行目では、温度の値が float であることが期待されます...つまり、次のようなもの26.25
です...しかし、何らかの理由で整数として出力されます。に変更しようとし%d
まし%f
たが、92行目と97行目の出力がほとんど破損しているため、まだわかりませんでした。
また、92 行目と 97 行目が奇妙な動作をする理由と、ビルド時に警告が表示される理由についても説明がありません。
改善するために何をすべきか教えてください。