固定の 14 文字の開始文字とさまざまなコンテンツで終了する文字列 (正確に char 配列) を作成しようとしています。可変ビットには、2 つの浮動小数点数と 1 つの 32 ビット整数が含まれており、配列内でコンマで区切られた 4 つの 1 バイト文字として個別に扱われます。次のコードは、いくつかの明白な理由 (*char を *float に代入できない) でコンパイルされていないことを示しています。それで、それを回避するにはどうすればよいですか?
char *const comStr = "AT+UCAST:0000=0760,0020,0001\r"; // command string
float *pressure;
float *temperature;
uint32_t *timeStamp;
pressure = comStr + 14; // pressure in the address following the '=' in command string
temperature = comStr + 18; // temperature in the address following the 1st ',' in command string
timeStamp = comStr + 22; // time stamp in the address following the 2nd ',' in command string
C 言語の struct や union のような、変数が「構造体」内で定義されるメモリ割り当て順序を厳密に予約するものについては、記憶が定かではありません。多分このようなもの:
typedef struct
{
char[14] command;
float *pressure;
char comma1;
float *temperature;
char comma2;
uint32_t *time_stamp;
char CR;
}comStr;
この構造は、comStr-> command[15] が *pressure の最初/最後のバイト (エンディアンによって異なります) を与えることを保証しますか? それとも、私からトリックを隠す特別な構造が他にありますか?
(注: comStr-> command[15] は将来のコードでは評価されないため、ここではインデックス境界を超えることは問題になりません。ここで唯一重要なことは、ハードウェア フェッチが持続するようにメモリが継続的に割り当てられているかどうかだけです。メモリ アドレス (comStr-> コマンド) から始まる 29 バイトの場合、必要な文字列が正確に得られます)。
psこれを書いているときに、私はアイデアを思いつきました。目的のために memcpy() を使用することはできますか ;) memcpy には void* タイプのパラメーターがあります。今からやってみます!とにかく、すべての雹stackOverflow!
編集:誤解を招き、誤解を招いて申し訳ありません。作成したい文字配列は、UART を介してバイト単位で送信されます。これを行うには、文字配列の開始メモリ アドレスと長さが DMA システムに与えられている場合、DMA システムを使用して、配列をバイトごとに自動的に送信バッファに転送します。したがって、文字配列はメモリに継続的に格納する必要があります。これで質問がより明確になることを願っています。