RX62N(インターフェス2011年5月号付録)でFreeRTOSを動かしました。環境はe2 studio, renesas RXCコンパイラです。
ここにプロジェクトをエクスポートしたものを置いておきます。
ファイル構成は次の通りです。
”FreeRTOS”以下のフォルダに必要なファイルをまとめました。
”FreeRTOS/renesas”以下にウィザードが自動生成するファイルをまとめておいてあります。
”port.c”にエラーが表示されているのはインラインアセンブラを使用しているためです。
フォルダを閉じるとユーザープログラムのみでシンプルになります。
プロジェクト作成時にはできるだけ自動生成するファイルを省き、それでも作成されるものは”FreeRTOS/renesas”のファイルと被るので削除します。
ここに”FreeRTOS”フォルダ以下のファイルをドラッグアンドドロップでコピーすればFreeRTOSのインストールは終了です。
4つのタスクが違う間隔で起動と待期を繰り返しながらLEDを点滅させるプログラムは次のようになります。
ここにプロジェクトをエクスポートしたものを置いておきます。
ファイル構成は次の通りです。
”FreeRTOS”以下のフォルダに必要なファイルをまとめました。
”FreeRTOS/renesas”以下にウィザードが自動生成するファイルをまとめておいてあります。
”port.c”にエラーが表示されているのはインラインアセンブラを使用しているためです。
フォルダを閉じるとユーザープログラムのみでシンプルになります。
プロジェクト作成時にはできるだけ自動生成するファイルを省き、それでも作成されるものは”FreeRTOS/renesas”のファイルと被るので削除します。
ここに”FreeRTOS”フォルダ以下のファイルをドラッグアンドドロップでコピーすればFreeRTOSのインストールは終了です。
4つのタスクが違う間隔で起動と待期を繰り返しながらLEDを点滅させるプログラムは次のようになります。
- #include <stdio.h>
- #include "FreeRTOS/renesas/iodefine.h"
- /* Kernel includes. */
- #include "FreeRTOS/FreeRTOS.h"
- #include "FreeRTOS/task.h"
- #include "FreeRTOS/queue.h"
- void vTask1(void *pvParameters)
- {
- while(1) {
- PORTD.DR.BIT.B1 = ~PORTD.DR.BIT.B1;
- vTaskDelay(100/portTICK_PERIOD_MS);
- }
- }
- void vTask2(void *pvParameters)
- {
- while(1) {
- PORTD.DR.BIT.B2 = ~PORTD.DR.BIT.B2;
- vTaskDelay(200/portTICK_PERIOD_MS);
- }
- }
- void vTask3(void *pvParameters)
- {
- while(1) {
- PORTD.DR.BIT.B3 = ~PORTD.DR.BIT.B3;
- vTaskDelay(300/portTICK_PERIOD_MS);
- }
- }
- void vTask4(void *pvParameters)
- {
- while(1) {
- PORTD.DR.BIT.B0 = ~PORTD.DR.BIT.B0;
- vTaskDelay(400/portTICK_PERIOD_MS);
- }
- }
- void main(void)
- {
- /* Renesas provided CPU configuration routine. The clocks are configured in
- here. */
- /* Turn all LEDs off. */
- PORTD.DDR.BYTE = 0xFF; //ポートC出力
- PORTD.DR.BYTE = 0xFF; //初期値
- xTaskCreate(vTask1,"Task1",100,NULL,1,NULL);
- xTaskCreate(vTask2,"Task2",100,NULL,1,NULL);
- xTaskCreate(vTask3,"Task3",100,NULL,1,NULL);
- xTaskCreate(vTask4,"Task4",100,NULL,1,NULL);
- /* Create the queue. */
- vTaskStartScheduler();
- /* If all is well the next line of code will not be reached as the scheduler
- will be running. If the next line is reached then it is likely that there was
- insufficient heap available for the idle task to be created. */
- for( ;; );
- }