忘備録-備忘録

技術的な備忘録

RX62NでFreeRTOSを動かす

2015-11-27 22:05:41 | RX62N
RX62N(インターフェス2011年5月号付録)でFreeRTOSを動かしました。環境はe2 studio, renesas RXCコンパイラです。
ここにプロジェクトをエクスポートしたものを置いておきます。
ファイル構成は次の通りです。
”FreeRTOS”以下のフォルダに必要なファイルをまとめました。
”FreeRTOS/renesas”以下にウィザードが自動生成するファイルをまとめておいてあります。
”port.c”にエラーが表示されているのはインラインアセンブラを使用しているためです。



フォルダを閉じるとユーザープログラムのみでシンプルになります。



プロジェクト作成時にはできるだけ自動生成するファイルを省き、それでも作成されるものは”FreeRTOS/renesas”のファイルと被るので削除します。



ここに”FreeRTOS”フォルダ以下のファイルをドラッグアンドドロップでコピーすればFreeRTOSのインストールは終了です。



4つのタスクが違う間隔で起動と待期を繰り返しながらLEDを点滅させるプログラムは次のようになります。

  1. #include <stdio.h>
  2. #include "FreeRTOS/renesas/iodefine.h"
  3. /* Kernel includes. */
  4. #include "FreeRTOS/FreeRTOS.h"
  5. #include "FreeRTOS/task.h"
  6. #include "FreeRTOS/queue.h"
  7. void vTask1(void *pvParameters)
  8. {
  9.     while(1) {
  10.         PORTD.DR.BIT.B1 = ~PORTD.DR.BIT.B1;
  11.         vTaskDelay(100/portTICK_PERIOD_MS);
  12.     }
  13. }
  14. void vTask2(void *pvParameters)
  15. {
  16.     while(1) {
  17.         PORTD.DR.BIT.B2 = ~PORTD.DR.BIT.B2;
  18.         vTaskDelay(200/portTICK_PERIOD_MS);
  19.     }
  20. }
  21. void vTask3(void *pvParameters)
  22. {
  23.     while(1) {
  24.         PORTD.DR.BIT.B3 = ~PORTD.DR.BIT.B3;
  25.         vTaskDelay(300/portTICK_PERIOD_MS);
  26.     }
  27. }
  28. void vTask4(void *pvParameters)
  29. {
  30.     while(1) {
  31.         PORTD.DR.BIT.B0 = ~PORTD.DR.BIT.B0;
  32.         vTaskDelay(400/portTICK_PERIOD_MS);
  33.     }
  34. }
  35. void main(void)
  36. {
  37.     /* Renesas provided CPU configuration routine. The clocks are configured in
  38.     here. */
  39.     /* Turn all LEDs off. */
  40.     PORTD.DDR.BYTE = 0xFF;    //ポートC出力
  41.     PORTD.DR.BYTE = 0xFF;    //初期値
  42.     xTaskCreate(vTask1,"Task1",100,NULL,1,NULL);
  43.     xTaskCreate(vTask2,"Task2",100,NULL,1,NULL);
  44.     xTaskCreate(vTask3,"Task3",100,NULL,1,NULL);
  45.     xTaskCreate(vTask4,"Task4",100,NULL,1,NULL);
  46.     /* Create the queue. */
  47.     vTaskStartScheduler();
  48.     /* If all is well the next line of code will not be reached as the scheduler
  49.     will be    running. If the next line is reached then it is likely that there was
  50.     insufficient heap available for the idle task to be created. */
  51.     for( ;; );
  52. }


最新の画像もっと見る

3 コメント

コメント日が  古い順  |   新しい順
CS+で作りました。 (すがわら)
2017-08-19 17:08:48
こんにちは、このサイトに掲載されているソースを用いて、RX621でCS+に移植させていただきました。公開させていただきたいと思うのですが、いかがでしょうか
返信する
Re:CS+で作りました。 (lm324)
2017-08-20 08:28:11
自由に公開してください。
大勢の人が使えば、いろいろな知恵が集まって良いと思います。
返信する
ありがたい情報 (思考人)
2021-01-09 14:06:12
どうも。懐かしみも込めて中古でRX62Nを購入して動かしてみようと思ってネットで調べたらここのページがありました。ありがたく生かせていただきます。感謝します。
返信する

コメントを投稿