1 2 Previous Next 22 Replies Latest reply on May 7, 2019 4:49 PM by TakashiM_61

    interruptファイルの追記処理が消える

    TaDa_1980266

      TimerCounterコンポーネントのinterruptに isr_Timeout1 を追加し、
      自動生成された isr_Timeout1.c に #include "xxx.h" を追記しましたが、
      しばらくすると Build時に xxx.hの内容が定義されていないという
      warning が発生し、isr_Timeout1.cを確認すると #include "xxx.h" が消えていました。

       

      自動生成ファイル(isr_Timeout1.c)への追記内容が消去される原因が分かりますでしょうか?

       

      個人的には isr_Timeout1.cの自動生成後に、何らかの要因で2回目のファイル自動生成処理が走り、
      追加した処理が消えてしまったのではないか?と考えております。

        • 1. Re: interruptファイルの追記処理が消える
          MoTa_728816

          こんばんは、

           

          Generated_Source 以下のファイルは基本的に generate application を行う度に上書きされてしまいます。

           

          例外的に(私の例では) isr_Timeout.c の isr_Tiemout_interrupt 関数内の

              /* `#START isr_Timeout_Interrupt` */ と書かれている行から

              /* `#END` */ と書かれている行までの間に記述された内容は保存されるようです。

           

          (timer_isr_test_190419B)

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

          CY_ISR(isr_Timeout_Interrupt)

          {

              #ifdef isr_Timeout_INTERRUPT_INTERRUPT_CALLBACK

                  isr_Timeout_Interrupt_InterruptCallback();

              #endif /* isr_Timeout_INTERRUPT_INTERRUPT_CALLBACK */

           

           

              /*  Place your Interrupt code here. */

              /* `#START isr_Timeout_Interrupt` */

           

          #include "Timer.h"

          extern volatile int timeout_flag ;

           

              Timer_ClearInterrupt(Timer_INTR_MASK_TC) ;

              timeout_flag = 1 ;

            

              /* `#END` */

          }

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

           

          また、このように Generated_Source 以下のファイルを触りたくない場合には

          ユーザー領域のソース (main.c 等) 内で下記のように記述すると

          ユーザーの ISR がデフォルトの ISR の代わりに使用されるようです。

          ※ 私はもっぱらこちらを使用しています。

           

          (timer_isr_test_190419A)

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

          CY_ISR(my_timeout_isr)

          {

          ...

          }

          ...

          isr_Timer_StartEx(my_timeout_isr) ;

          ...

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

           

          添付は CY8CKIT-044 用のサンプルプロジェクトです。

           

          moto

          • 2. Re: interruptファイルの追記処理が消える
            TaDa_1980266

            回答ありがとうございます。

             

             

            >Generated_Source 以下のファイルは基本的に generate application を行う度に上書きされてしまいます。

             

            →やはり上書きされていたのですね。納得しました。

             

                ちなみに generate application を行うタイミング = Build実行時 でしょうか?

             

             

             

             

            >例外的に(私の例では) isr_Timeout.c の isr_Tiemout_interrupt 関数内の

             

            >    /* `#START isr_Timeout_Interrupt` */ と書かれている行から

             

            >    /* `#END` */ と書かれている行までの間に記述された内容は保存されるようです。

             

            →これは私も同様です。

             

               #START〜#END間の 独自タイムアウト関数の呼び出し処理は残っている為、

             

               prj.M0121: implicit declaration of function '独自関数' で注意されています。

             

             

            (isr_Timeout1.c)

             

            CY_ISR(isr_Timeout1_Interrupt)

            {

                #ifdef isr_Timeout1_INTERRUPT_INTERRUPT_CALLBACK

                    isr_Timeout1_Interrupt_InterruptCallback();

                #endif /* isr_Timeout1_INTERRUPT_INTERRUPT_CALLBACK */

             

                /*  Place your Interrupt code here. */

                /* `#START isr_Timeout1_Interrupt` */

                // タイムアウト処理

                独自関数();

             

                /* `#END` */

            }

             

             

            >添付は CY8CKIT-044 用のサンプルプロジェクトです。

             

            →添付ファイルがありません or 受け取れません。

             

               本メール以外での添付ファイル受け渡しは可能でしょうか?

             

             

               isr_Timeout1.cの関数内で独自関数用ヘッダファイルをインクルードしてみましたが、

             

               やはりエラーが出ましたので main.c でユーザISRを定義する方法を確認したいです。

            • 3. Re: interruptファイルの追記処理が消える
              TakashiM_61

              Cleanした後にBuild、もしくはClean & Buildした時にGenerated_Source 以下のファイルは上書きされてしまいます。

              一度ビルドした後に、例えばisr_Timerout.cを変更しBuildのみ実行した場合、isr_Timerout.cは上書きされません。

               

              尚、Generated_Source 以下のファイルを変更し、Debug-->Program、Debug-->Debugを実行した際、自動的に変更ファイルのみビルドします。この時Generated_Source 以下のファイルは上書きされません。

              1 of 1 people found this helpful
              • 4. Re: interruptファイルの追記処理が消える
                TaDa_1980266

                回答ありがとうございます。

                ファイル自動更新タイミングについて理解しました。

                 

                サンプルコードについて教えて下さい。

                CY_ISR()の引数名称が異なっていますが、複数タイマを設定した場合、

                main.c CY_ISR()の引数は何を設定すれば良いでしょうか?

                 

                timer_isr_test_190419A.cydsn

                mai.c         CY_ISR(my_timeout_isr)

                isr_Timeout.c CY_ISR(isr_Timeout_Interrupt)

                 

                 

                mai.c          CY_ISR(???????????)

                isr_Timeout.c  CY_ISR(isr_Timeout_Interrupt)

                isr_Timeout2.c CY_ISR(isr_Timeout2_Interrupt)

                • 5. Re: interruptファイルの追記処理が消える
                  TaDa_1980266

                  すみません。isr_Timeout1_StartEx()で区別すればOKと理解しました。

                   

                   

                  mai.c         isr_Timeout1_StartEx(my_timeout_isr)

                  mai.c         isr_Timeout1_StartEx(my_timeout_isr2)

                  mai.c          CY_ISR(my_timeout_isr)

                  mai.c          CY_ISR(my_timeout_isr2)

                  isr_Timeout.c  CY_ISR(isr_Timeout_Interrupt)

                  isr_Timeout2.c CY_ISR(isr_Timeout2_Interrupt)

                  • 6. Re: interruptファイルの追記処理が消える
                    TaDa_1980266

                    Timer Component でPeriodで指定する単位はms で合っていますでしょうか?

                    Period  1000ms =  1s

                    Period 60000ms = 60s = 1min

                     

                    サンプルコード(timer_isr_test_190419A.cydsn)を参考に

                    下記コードで経過時間を確認しようとしましたが、時間が更新されず、

                    タイマ値の妥当性を判断出来ません。

                    sprintf(str, "Timer ISR test (%s %s)\n", __DATE__, __TIME__);

                    print(str);

                    • 7. Re: interruptファイルの追記処理が消える
                      MoTa_728816

                      こんにちは、

                       

                      > sprintf(str, "Timer ISR test (%s %s)\n", __DATE__, __TIME__);

                      > print(str);

                       

                      この部分は、プログラムがコンパイルされた日時の値で

                      定数になっているため、更新はされません。

                       

                      また、ご指定のサンプルでは、1kHz クロックの PWM Timer の period を 3000 と

                      設定していますので、3秒毎にタイムアウトが発生しているかと思います。

                       

                      この period の値を 1000 にしていただきますと、1秒毎の割込みにすることができます。

                      Timer_config.JPG

                       

                      moto

                       

                       

                      • 8. Re: interruptファイルの追記処理が消える
                        TaDa_1980266

                        すみません。__TIME__が現在時間かと勘違いしておりました。

                        Period単位がmsである事は了解しました。

                         

                        ただ、Period設定と実動作がリンクしておらず困っております。

                         

                        timer_isr_test_190419A.cydsnはCY8CKIT-044用プロジェクトの為、

                        CY8CKIT-145-40XXプロジェクトに内容をコピーして動作を確認しております。

                         

                        Periodで10000(10秒) Countinuousと設定してもCY_ISR()内のブレイクポイントが

                        1秒以内で反応している状況です。

                         

                        Timer_Start() から CY_ISR()までの処理時間を実測したいのですが、

                        現在時刻を取得するAPIはありますでしょうか?

                        • 9. Re: interruptファイルの追記処理が消える
                          MoTa_728816

                          > Timer_Start() から CY_ISR()までの処理時間を実測したいのですが、

                          > 現在時刻を取得するAPIはありますでしょうか?

                          どのくらいの精度を期待されているかによって、測り方は違ってくるかと思います。

                           

                          現在時刻とおっしゃっているので、秒単位で良いのであれば、

                          丁度先ほどポストした 7SEG LED のサンプルで RTC を使用していますので、

                          そのコード等ご参考になればと思います。

                          TSoC CY8C4146LQI-S433 基板 7SEG LED サンプル

                           

                          また、もっと粒度の細かい測定が必要なのであれば、

                          速度の速いカウンタを動かしておいて、

                          測定開始時と測定時のカウンタ値を取得するといった方法もあるかと思います。

                           

                          moto

                          • 10. Re: interruptファイルの追記処理が消える
                            TaDa_1980266

                            秒単位で構いません。

                            サンプルコードのRTCを参考に確認してみます。

                            • 11. Re: interruptファイルの追記処理が消える
                              TaDa_1980266

                              サンプルプロジェクトを参考に

                              RTCコンポーネントを追加し、RTC_Start()を呼び出し後、下記で日時を取得しましたが、

                              値が変化しませんでした。

                               

                              GetDateAndTime()で初期値(1970/1/1 00:00:00)から更新されない原因について

                              想定できるものはありますでしょうか?

                               

                              void current_time_disp(void)

                              {

                                  RTC_1_DATE_TIME date_time;

                               

                                  RTC_1_GetDateAndTime(&date_time);

                                  uiYear = RTC_1_GetYear(date_time.date);

                                  uiMonth = RTC_1_GetMonth(date_time.date);

                                  uiDay = RTC_1_GetDay(date_time.date);

                                  uiHour = RTC_1_GetHours(date_time.time);

                                  uiMin = RTC_1_GetMinutes(date_time.time);

                                  uiSec = RTC_1_GetSecond(date_time.time);

                                  sprintf(str, "a Y%04d M%02d D%02d H%02d M%02d S%02d \n", uiYear, uiMonth, uiDay, uiHour, uiMin, uiSec);

                                  print(str);

                              }

                               

                               

                              又、SetUnixTime()で現在時刻 1556254800(=2019/04/26 14:00:00) を設定してみた所、

                              GetHours()の戻り値が ‘5’となっており、想定の”14”と異なっておりました。

                              (時間以外は期待通り)

                               

                              時間については時差等を考慮する必要がありますでしょうか?

                               

                                  RTC_1_SetUnixTime(1556251200);        // 2019/04/26 13:00:00 uiHour=4

                                  RTC_1_SetUnixTime(1556254800);        // 2019/04/26 14:00:00 uiHour=5

                              • 12. Re: interruptファイルの追記処理が消える
                                MoTa_728816

                                こんにちは、

                                 

                                > RTCコンポーネントを追加し、RTC_Start()を呼び出し後、下記で日時を取得しましたが、

                                > 値が変化しませんでした。

                                はい、私も同じ問題にハマりました。

                                手探りで原因を探したところ、Project の Design Wide Resources > Clocks で

                                RTC_Sel にクロックが設定されていないことがわかりました。

                                そこで、RTC_Sel の行をダブルクリックして表示される

                                クロックコンフィグの Low Frequency Clocks で、使用可能なクロックを RTC_Sel に

                                アサインしました。もし、お使いの基板に WCO 用のクリスタル等が実装されている場合には

                                そちらをお使いいただいて 1Hz のクロックを RTC に提供するのが良いかと思います。

                                Clock_Tree.JPG

                                 

                                > 又、SetUnixTime()で現在時刻 1556254800(=2019/04/26 14:00:00) を設定してみた所、

                                > GetHours()の戻り値が ‘5’となっており、想定の”14”と異なっておりました。

                                > (時間以外は期待通り)

                                Unix の時間は GS (グリニッジ標準時間) で管理されています。

                                日本で表示する時にタイムゾーンの差分計算をして表示するので、

                                日本時刻 = JST = "UTC+9" となっています。

                                 

                                ご参考になりそうな URL を下記に引用しておきます。

                                https://www.jisakeisan.com/timezone/jst/

                                タイムゾーン呪いの書 - Qiita

                                UNIX時間 - Wikipedia

                                 

                                moto

                                • 13. Re: interruptファイルの追記処理が消える
                                  TaDa_1980266

                                  早速のコメントありがとうございます。

                                   

                                  Design Wide Resources > Clocks  を確認しましたが、RTC_selが表示されていません[画像02]

                                  RTCコンポーネントは追加しています[画像01]

                                   

                                  又、私の環境ではDesign Wide Resources > Clocks  の Timer(WDT)が無効になっていますが、

                                  タイマをWatchDogTimer用途として使わない場合は無効状態でも問題ないでしょうか?[画像03]

                                   

                                  (画像)

                                  http://gunze-si.if.tv/dl/01_TipDesign_cysch.jpg

                                  http://gunze-si.if.tv/dl/02_Design_Wide_Resources_Clocks.jpg

                                  http://gunze-si.if.tv/dl/03_Design_Wide_Resources_Clocks_Timer_sel.jpg

                                  • 14. Re: interruptファイルの追記処理が消える
                                    MoTa_728816

                                    > 又、私の環境ではDesign Wide Resources > Clocks  の Timer(WDT)が無効になっていますが、

                                    > タイマをWatchDogTimer用途として使わない場合は無効状態でも問題ないでしょうか?

                                    画像03 を拝見すると、私の構成と表示されているTimerの数が随分と違いますね。

                                     

                                    この状態でプロジェクトは正常にコンパイル出来ているのでしょうか?

                                     

                                    もし、可能であれば当該プロジェクトを下記の手順で

                                    レスポンスに添付してはいただけないでしょうか?

                                    (1) Workspace Explorer で当該プロジェクトを選択 (Set As Active Project にして、黒くハイライトされた状態にする)

                                    (2) Build > Clean <project名>

                                    (3) Project > Archive Workspace/Project...

                                    (4) Minimal を選択して > Archive

                                    (5) 表示される <project名>.zip を添付

                                     

                                    moto

                                    1 2 Previous Next