このデモはFreeRTOSv10.1.1をRenesas RX65Nマイコン用に移植したものです。評価ボード上の2つのLEDを2タスクでLチカするだけの簡単なサンプルです。そのままビルドしてデバッグモードで動きます。
2018年春にルネサスから発売されたTarget Board for RX family(RX65N)を手に入れたのでFreeRTOSを動かしてみました。 秋葉原のマルツで2,980円(税抜き)で売られています。デバッガのE2Liteがボード上に搭載されてこの値段は安いと思います。
なお、素人の学生が趣味で作成したものですので、もしご利用の際はくれぐれも自己責任でお願いします。
参考にさせていただいたもの
https://blog.goo.ne.jp/lm324/e/99f735aef942ce6b965cd2f985acdf73
http://be-con.jp/shiryo/renesas-rx62-freertos-csprj.html
https://www.freertos.org/RX64M_RTOS_Renesas_GCC_e2studio.html
大変参考になりました。ありがとうございました。
文字コードは UTF-8 を使用しています。
- FreeRTOS:v10.1.1 (RX600 RXv2)
- 開発環境:CS+forCC V7.00.00
- コンパイラ:CC-RX V2.08.00 (C99)
- CPUボード:TARGET BOARD for RX65N (RTK5RX65N0C00000BR)
- CPU(ボード上):R5F565NEDDFP (100-pin LFQFP,120MHz,RAM 640KB,ROM 2MB+32KB)
- "エミュレータ"(ボード上)
"E2エミュレータLite":CS+環境ではデバッグに使用できました。E2Liteとして認識しますが、ドキュメントの方では「エミュレータ」としか書いてないので厳密にはE2Liteではないようです(チップの見た目はRX231?)。また、RFPv3.05以降によるプログラム書き込みは可能です。
CPUボード上のLED0(PD6)を1Hz、LED1(PD7)を5Hzで点滅させる2つのタスクを動かします。
クロック発生回路とポート初期化をスマートコンフィグレータで設定しています。 FreeRTOSではカーネルタイマにコンペアマッチタイマ0(CMT0),コンテキストスイッチにソフトウェア割込み(SWINT)を使用しているので、その周辺機能は使用しないでください。カーネルタイマなどはソース改変すればCMT0以外のタイマも使えるはずです。
自力でFreeRTOSプロジェクトを作るためのメモになります。サンプルコードのmain.c
とApplicationHook.c
は公式サンプルコードを参考に作成しました。
- CS+でプロジェクト新規作成します。ここで自分はビルド設定(CC-RXのプロパティ)で文字コードをUTF-8に変更してしまいますが、SHIFT-JISのままでいけるかどうかは未検証です。ちなみにUTF-8の変更箇所はコンパイル・オプションで2か所、アセンブル・オプションで1か所です。
- スマートコンフィグレータで周辺機能の設定を必要があれば設定してください。このデモでは自動コード生成のPORT設定でLED端子を出力にしています。ただし、コンペアマッチタイマ(CMT0)、ソフトウェア割込み(SWINT)はFreeRTOS側が使うので何もせずほっといてください。ただし、CMT0はRTOSにとってのカーネルタイマとなります。CMT0の供給クロックPCLKB=60MHzを前提としていますので、これ以外の周波数に変更する際はCMT0の再設定をしてください。なお、FreeRTOSは起動時にユーザ側にCMT0の設定をする処理を要求してきます。
main.c
内のvApplicationSetupTimerInterrupt()
でCMT0の初期設定を行っていますので、そちらを参考にしてください。 - サンプルコードのFreeRTOSフォルダ以下をそのままプロジェクトフォルダにコピーしてからプロジェクトに登録してください。IDEのプロジェクトツリーにフォルダごとドラッグ&ドロップして出てきたダイアログの階層を10とかに増やしてあげれば登録が楽です。
- サンプルコードの
ApplicationHook.c
の中身はフック関数類を定義してあります。FreeRTOSConfig.h
でフック関数の有無を設定できますが、取りあえず最小限のものだけ定義してあります。取りあえずこれもファイルごとコピーしてプロジェクトに登録してください。また、必要に応じて自力で関数の追加記述をしてください。 - サンプルコードのmain.cにある
vApplicationSetupTimerInterrupt()
はカーネルタイマの初期設定で必ず必要です。関数を新規のmain.c
にコピーするなり新たにソースファイル作るなり任意の場所に定義してください。 /FreeRTOS/FreeRTOSConfig.h
を目的に合わせて設定してください。- 各ユーザソースファイルで
FreeRTOS.h, task.h, queue.h
など適切なヘッダをインクルードしてください。 - ビルドします。おそらく通るはずです。
- 任意でデバッグなどなど楽しんでください。
- ソースコードの文字エンコードに UTF-8 を使用するため、ビルド設定をShift-JISからUTF-8に変更してあります。
- FreeRTOSのメモリ管理ファイルは「heap_1.c」を使用しています。目的に応じて変更してください。
/FreeRTOS/portable/heap_1.c
に置いてあります。