PC とシリアル (RS-232) で通信する TI の F28335 を使用しています。
matlab では、いくつかの double の数値を計算し、それらをコントローラーにシリアルで送信する必要があります。
そのために、たとえば、1.00e-5 があり、次を使用して個々のバイトに変換します。
Time1On = typecast(Time1On, 'uint8');
結果は次のとおりです。
172 197 39 55
次に、これを16進数に変換し、なんとか文字列に変換して送信しました
ACC52737
これを F28335 にシリアルで送信し、正しい値を Uint32 変数 (配列内の位置) に取得しますが、この同じ個々のバイトを double 値にコピーする方法が見つからないようです。元の分数と同じです。
受信した値が正しく格納されている Uint32 配列からキャストしようとしました。
dataDouble = (double) (*(RxPacket.RcvData + RxPacket.idxData));
しかし、私はこれを取得します:
11100000000000000000000000000000 or 2.898602e+09
そして、それをユニオンとして保存しようとしました:
union doubleConstruct{
double Val;
Uint16 rxArray[2];
};
16ワードを個別に保存します(ハミングパリティで16ビットごとにエンコードし、16ビットワードをデコードします)が配列の位置に保存されますが、ダブルの結果は同じです...
double をバイトに分割してシリアルで送信したことのある人はいますか? はいの場合、後でそれぞれの倍数をどのように構成して復元しましたか? unsigned int のビットを double にスタンピングする方法はありますか?
どうも!