1 Reply Latest reply on Apr 19, 2020 7:49 PM by JuyoungJ_06

    Community Translation - Global Variables Not working When Used in CY_ISR - KBA2244522

    NoTa_4591161

      Hi,

      I would like to translate KBA224452 into Japanese.

       

      Thanks,

      Kenshow

       

      Original KBA: KBA224452

      Global Variables Not working When Used in CY_ISR - KBA224452

       

      Translated by Kenshow

      ==============================

       

      タイトル: CY_ISRで使用するとグローバル変数が機能しない - KBA224452

       

      バージョン: **

       

      質問:

      メイン関数とCY_ISRで使用されるグローバル変数が機能していません。なぜですか

       

      回答:

      より高いレベルの最適化では、グローバル変数はコンパイラによって最適化されます。これは、変数がCY_ISRなどの関数によってのみ変更される場合に発生します。次のサイプレス開発者コミュニティメンバーのBob Marlowe さんからのコードスニペットに示すようにvolatileキーワードを使用して、同様の変数を最適化しないようコンパイラに通知します。

       

      コード例:

       

      uint8 FlagToCheck = FALSE;

       

      CY_ISR(SecHandler)

      {

            SecTimer_Stop();

            SecTimer_ReadStatusRegister();

          

            FlagToCheck = TRUE;

      }

       

      int main(void)

      {

           CyGlobalIntEnable; /* グローバル割り込みを有効にします。*/

          Timeout_StartEx(SecHandler);

          SecTimer_Start();

          LED_Write(LEDOFF);

          /* ここに初期化/起動コードを配置します(例:MyInst_Start()) */

       

          while(!FlagToCheck)

          {

          }

            LED_Write(LEDON);

       

            while(TRUE)

            {

                  CyDelay(100);

            }

      }

       

      この例では、コンパイラーの最適化がより高いレベルに設定されている場合、LED_Write(LEDON)は実行されません。ただし、volatileキーワードを追加すると、LED_Write(LEDON)が実行されます。

       

      ==============================

       

      8-Apr-2020

      Kenshow