stateflowに​記載した即値をオート​コードする際、符号な​しと認識させる方法は​ありますか

2 visualizaciones (últimos 30 días)
ryosuke nakatsuka
ryosuke nakatsuka el 21 de Oct. de 2020
Editada: Toshinobu Shintai el 31 de Oct. de 2020
stateflowに以下のような記載をしました。
  a ++;
 ※変数は、uint8 a;で宣言。
この時、オートコード結果は、以下のようになりました。
  a = (uint8)(a + (int16)1);
 1を符号ありにキャストしてから、符号なしにキャストとなってしまいました。
無駄なキャストを辞めて、以下のようなオートコードを求めています。
a ++; のまま
 もしくは、
a = a + (uint8)1;
即値は全て符号なしと判断され、上記のキャストとなったことは理解できます。
そこで、Stateflow上で即値を"符号なし"と判断させる方法はありませんか。
 ※C言語の 1u というような記載方法
また、キャストモードは、”明示的”にしています。
"ノミナル"に設定すれば期待した結果となることは確認しましたが、
できれば"明示的"で即値の符号あり/なしをコントロールしたいと考えています。

Respuesta aceptada

ryosuke nakatsuka
ryosuke nakatsuka el 21 de Oct. de 2020
ご回答ありがとうございます。
そちらは既に試しました。
 a = a + uint8(1);
しかし、キャストに変化はありませんでした。
また、以下も試しました。
  a = a + 1.; // .を追加
すると、以下の出力になりました。
  a = uint8(a + (int16(uint8(1)));
以上、宜しくお願い致します。
  3 comentarios
ryosuke nakatsuka
ryosuke nakatsuka el 27 de Oct. de 2020
※回答に書いてしまったので、コメントに移動します。
ご回答ありがとうございます。
こちらの環境では、先に書いた通りキャストモードを"明示的"にしています。
頂いたモデルも、キャストモードを"明示的"に変更すると、
以下のようなコードとなりました。
 a = (uint8)((uint32)(int32)a+1u);
単純な変数間の代入は明示的なキャストを求めています。
即値の謎符号付きキャストを抑制したいです。
以上、宜しくお願い致します。
Toshinobu Shintai
Toshinobu Shintai el 27 de Oct. de 2020
Editada: Toshinobu Shintai el 31 de Oct. de 2020
返事が遅くなりまして、申し訳ありません。
以前、バグとお伝えしましたが、間違いでした。申し訳ありません。この挙動は、キャスティングモードを明示的にした際の正しい挙動となります。以下に説明を記載します。
The usual binary conversion(s) say that a signed int, will be cast to an unsigned int when the other operand of a binary operation is unsigned.
|
v
repro_Y.Out2 = (uint8_T)((uint32_T)(int32_T)repro_U.In3 + 1U);
^ ^
| |
The usual unary conversion(s) require any integer smaller than 'int' will be cast to 'int'
|
Finally, the result of the addition is converted to the type being assigned to so that it fits properly.
このような無駄なキャストを避けるには、その他のキャスティングモードを選択する必要があります。

Iniciar sesión para comentar.

Más respuestas (1)

Toshinobu Shintai
Toshinobu Shintai el 21 de Oct. de 2020
MATLAB言語では、以下のように記述するとデータ型を明示できます。
uint8(1)
上記のuint8の部分は、int32やdoubleなど、標準のデータ型名を用いることができます。

Categorías

Más información sobre 複雑なロジック en Help Center y File Exchange.

Productos


Versión

R2015a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!