0

Zigbee ベースのアプリケーションの開発に Z-stack-CC2530-2.5 を使用しています。タイムスタンプ変換の問題に遭遇しました。

次のように、osal_ConvertUTCTime メソッドを使用して、uint32 タイムスタンプ値を timestampStruct に変換しています。

osal_ConvertUTCTime(& timestampStruct, timestamp);

構造体は次のように定義されます。

typedef struct{
uint8 seconds;
uint8 min;
uint8 hour;
uint8 day;
uint8 month;
uint16 year;
} UTCTimeStruct

私の質問:

Struct のコンテンツを UART ポートに人間が読める形式で書き込むように変換するにはどうすればよいですか?

例:

HalUARTWrite (Port0, timestampStruct, len)     // Output: 22/1/2013 12:05:45

ありがとうございました。

4

1 に答える 1

0

現時点では、HalUartWrite 関数のプロトタイプはありませんが、Google で調べたところ、誰かが次のように使用していました。

HalUARTWrite(DEBUG_UART_PORT, "12345", 6);

したがって、2 番目の引数は char へのポインターである必要があると思います。struct UTCTimeStruct 変数を 2 番目の引数に渡すことはできません。生データをシリアルポートに出力するだけの場合。コンパイラを満足させるには、構造体を char * にキャストする必要があります。しかし、一般的に、これは悪い習慣です。すべての構造体フィールドが char または short のいずれかである 8 ビット プロセッサで作業する場合、これは問題にならない可能性があります。一般に、構造体を char * にキャストして出力すると、構造体のパディングが原因で、構造体フィールド間に無意味な文字が大量に表示されます。

わかった。少しオフな話題。質問に戻りますが、構造体を自分でわかりやすい文字列に変換する必要があります。出力文字列が固定長の「22/1/2013 12:05:45」の形式であることがわかっているため、その長さの char[] を宣言するだけです。そして、uint32 タイムスタンプ値をビット操作して手動で数値を入力します。その後、char[] を 2 番目の引数に、正確な長さを 3 番目の引数に渡すことができます。

于 2013-03-01T01:51:25.693 に答える