私はIARコンパイラでCでコーディングし、二つのループしながら、持っていながらにおけるオペレータ:最初はしばらくの上にスキップしますA「 - 」ループ機能が
i= 5;
do {
Task_sleep(1000);
}while(i-- && !Ready);
if (!Ready)
{
dprint("No ready response!");
return false;
}
そして
i= 5;
do {
Task_sleep(1000);
i--;
}while(i > 0 && !Ready);
if (!Ready)
{
dprint("No ready response!");
return false;
}
ループと2番目の正常に動作します。 「Ready」ブールは別のスレッドに設定されています。最初のループはfalseを返し、2番目のループは成功するため、Readyはtrueに設定されません。
私は、コンパイラが私の処理方法を知らないと思っています。間違って設定しています。何か他に起こっていることはありますか?私のセットアップでは、デバッグでコードを実行することはできません。機能へ
編集を追加しました:揮発性として
if(!Ready)
{
dprint("No Ready responce!");
return false;
}
テスト済みレディ、--i代わりのi--、および準備取り除きます。すべて失敗しました。テスト:
まだIARコンパイラがi-を正しく読み込まず、while関数から-operationを削除する必要があります。皆さんに何か他のものがあれば教えてください。私はこの問題を解決するのに自信を持っています。
最初のものでは、 'i - 'と何も比較していないので、 'while(i--> 0 &&!Ready)'ではないでしょうか? – gmiley
@gmileyえ?暗示されていないのですか? –
@gmiley:いいえ。 'while'に関しては、' i'は 'true'(' i!= 0')または 'false'(' i = 0')のいずれかに評価されます。 – usr2564301