私は C で書くことに比較的慣れていません。オンラインや印刷物で見つけたリソースを使って独学しました。これは、C プログラミングの最初の実際のプロジェクトです。職場でのトレーニングが大好きです。
Texas Instruments C6701 デジタル シグナル プロセッサで使用されているコードを C で書いています。具体的には、シリアル ポートを介してインターフェイスする一連の通信関数を作成しています。
私が取り組んでいるプロジェクトには、シリアル ポート経由でデータを送信するための既存のパケット プロトコルがあります。これは、送信されるデータへのポインターとその長さ (バイト単位) を渡すことによって機能します。私がしなければならないことは、送信するバイトをメモリ内の「配列」に書き込むことだけです (送信機はその一連のバイトをバッファにコピーして送信します)。
私の質問は、送信するデータの最適なフォーマット方法に関するものです。送信する必要があるデータは、いくつかの異なるデータ型 (unsigned char、unsigned int、float など) で構成されています。通信帯域幅に制約があり、パケットをできるだけ小さく保つ必要があるため、すべてを float (または int) に拡張することはできません。
もともと配列を使用してデータをフォーマットしたかったのですが、
unsigned char* dataTx[10];
dataTx[0]=char1;
dataTx[1]=char2;
etc...
これは、すべてのデータが char であるとは限らず、一部のデータが unsigned int または unsigned short であることを除いて機能します。
short と int を処理するために、ビット シフトを使用しました (今のところ、リトルエンディアンとビッグ エンディアンは無視します)。
unsigned char* dataTx[10];
dataTx[0]=short1>>8;
dataTx[1]=short1;
dataTx[2]=int1>>24;
dataTx[3]=int1>>16;
etc...
ただし、これを行う別の (そしてより良い?) 方法は、ポインターとポインター演算を使用することだと思います。
unsigned char* dataTx[10]
*(dataTx+0) = int1;
*(dataTx+4) = short1;
*(dataTx+6) = char1;
etc...
私の質問(最後に) は、どちらの方法 (ビットシフトまたはポインター演算) がより受け入れられる方法ですか? また、実行する方が速いですか?(実行時の制約もあります)。
私の要件:データは、ギャップ、ブレーク、またはパディングなしで、連続してメモリに配置されます。
構造が解決策として機能するかどうかを知るには、構造についてまだ十分に知りません。具体的には、構造体が常に連続してブレークなしでメモリ位置を割り当てるかどうかはわかりません。8 バイト ブロックで割り当てられていることを示すものを読み、パディング バイトを導入する可能性があります。
現在、私はポインターメソッドに傾いています。長い記事のように見えるものをここまで読んでくれてありがとう。