e2studio FSPの機能を使用したISRの使用方法

お世話になります。TNと申します。

ご教授お願いします。

 

 

【問い合わせ内容】

RAマイコン、RTOS、e2studioを使用し、AGTタイマー割り込み(void i_agt_int_user(void))からタスクのサスペンドを解除

したいのですが、以下のコードでは解除されません。

コード生成(タスクやハードの設定)はFSP configrationの機能を使用し、 i_agt_int_user(void)はintrrupts configrationで設定しています。

設定方法に問題があるのか、APIの使用方法に問題があるのかわかりません。

割り込みからのサスペンド解除を行う設定と、方法をお教え願いないでしょうか

よろしくお願いします。

 

 

extern TaskHandle_t new_thread0;

// タスク処理

void new_thread0_entry(void *pvParameters)
{
   FSP_PARAMETER_NOT_USED (pvParameters);

  volatile int debug;

  R_AGT_Open(&g_timer0_ctrl, &g_timer0_cfg);
  R_AGT_Start(&g_timer0_ctrl);

  /* TODO: add your own code here */
  while (1)
  {
    vTaskSuspend(NULL);
    debug=0;

  }
}

 

// 割り込み処理

void i_agt_int_user(void)
{
  BaseType_t ret = pdFALSE;

  ret = xTaskResumeFromISR(new_thread0);

  portYIELD_FROM_ISR(pdTRUE);
}

Parents
  • TNさん、こんにちは。NoMaYです。

    私のFSP(とRA)の知識は、以下のGitHubにFSPのソースがあること(とARMコアのほんの入り口)までなのですが、xTaskResumeFromISR(new_thread0)の中へステップ実行して行ってみるという話以前として、以下の2点に関してはどうなのかな、という考えが思い浮かびました。

    github.com/renesas/fsp

    (1) そもそも割り込みに来ている?

    極端な例では、他マイコンの事例として、main()の先頭でEI()を呼ばなければいけなかった、等あったりします、、、

    これは割り込みルーチン(or コールバックルーチンと呼んだ方が適切なのかは分からないですが)先頭にブレークポイントを設定して、Goさせてみれば、状況は把握出来ると思います。

    ブレークしないようならば、まず、割り込みルーチンを使えるようにする為のサンプルコードを探す必要があると思うのです。

    (2) FreeRTOSを使うお膳立ては出来ている?

    FSPのソースの場所は知っていても中まで見てはいないので、正しいかどうか分からないですが、デフォルトでFreeRTOSが使えるようになっているものなのか気になります。

    たぶんxTaskResumeFromISR()でリンクエラーを起こしている訳では無さそうなので、FreeRTOSのコンポーネントは追加されていると思いますが、FreeRTOSが必要とするTick割り込みとYield割り込みが自動的に有効化されているのか、手動で何かしないといけないのか、気になります。

    このあたりは、タスクをひとつ作って、vTaskDelay( pdMS_TO_TICKS(1000) )だけのループを記述して、1秒毎にブレークするかどうか調べてみれば、状況は把握出来ると思います。

    もしそうならないようであれば、FreeRTOSを使うお膳立てが出来ていない可能性が高い、と思うのです。

    と、ここまで書いて、GitHubを見たところ、以下のリポジトリとサンプルコードらしきものがありました。これは、どうでしょうか?取っ掛かりになりませんでしょうか?

    github.com/renesas/ra-fsp-examples
    github.com/renesas/ra-fsp-examples/tree/master/example_projects/ek_ra6m3/freertos/freertos_ek_ra6m3_ep
     

Reply
  • TNさん、こんにちは。NoMaYです。

    私のFSP(とRA)の知識は、以下のGitHubにFSPのソースがあること(とARMコアのほんの入り口)までなのですが、xTaskResumeFromISR(new_thread0)の中へステップ実行して行ってみるという話以前として、以下の2点に関してはどうなのかな、という考えが思い浮かびました。

    github.com/renesas/fsp

    (1) そもそも割り込みに来ている?

    極端な例では、他マイコンの事例として、main()の先頭でEI()を呼ばなければいけなかった、等あったりします、、、

    これは割り込みルーチン(or コールバックルーチンと呼んだ方が適切なのかは分からないですが)先頭にブレークポイントを設定して、Goさせてみれば、状況は把握出来ると思います。

    ブレークしないようならば、まず、割り込みルーチンを使えるようにする為のサンプルコードを探す必要があると思うのです。

    (2) FreeRTOSを使うお膳立ては出来ている?

    FSPのソースの場所は知っていても中まで見てはいないので、正しいかどうか分からないですが、デフォルトでFreeRTOSが使えるようになっているものなのか気になります。

    たぶんxTaskResumeFromISR()でリンクエラーを起こしている訳では無さそうなので、FreeRTOSのコンポーネントは追加されていると思いますが、FreeRTOSが必要とするTick割り込みとYield割り込みが自動的に有効化されているのか、手動で何かしないといけないのか、気になります。

    このあたりは、タスクをひとつ作って、vTaskDelay( pdMS_TO_TICKS(1000) )だけのループを記述して、1秒毎にブレークするかどうか調べてみれば、状況は把握出来ると思います。

    もしそうならないようであれば、FreeRTOSを使うお膳立てが出来ていない可能性が高い、と思うのです。

    と、ここまで書いて、GitHubを見たところ、以下のリポジトリとサンプルコードらしきものがありました。これは、どうでしょうか?取っ掛かりになりませんでしょうか?

    github.com/renesas/ra-fsp-examples
    github.com/renesas/ra-fsp-examples/tree/master/example_projects/ek_ra6m3/freertos/freertos_ek_ra6m3_ep
     

Children
No Data