RTOSでのemWin(RX65N)

RTOSでのemWinについて

はじめまして。Tanigawaと申します。

RX65N envision kitを用いて、RenesasのGithubにある「GLCDC RW2D emWin(Segger GUIミドルウェア)」を参考に、RTOSでGUIアプリケーションを作成しようとしています。

emWinのイベント処理(スイッチのオンオフなど)からシリアルに送信キューを送りたいとき、どう書いてよいかわかりません。

以下のようにApplication.cに記述すると動作はするのですが、いかにもまずい書き方な気がして自信がありません。

emWinの処理ととRTOSのタスクの兼ね合いがわからないので、良い方法を教えていただきたいです。

#include "Application.h"

char string[32];

extern QueueHandle_t queue_handle_1;

void process_switch_on(WM_HWIN hDisplayedText)

{

TEXT_SetText(hDisplayedText, "ON");

TEXT_SetBkColor(hDisplayedText, GUI_WHITE);

TEXT_SetTextColor(hDisplayedText, GUI_BLUE);

led_on();

sprintf(string, "ON\r");

xQueueSend(queue_handle_1, string, portMAX_DELAY);

}

シリアル通信のほうは「queueの活用 printデバッグのシリアライズ」を参考に、キューによるシリアル送信タスクを実装しています。

よろしくお願いします。

  • main_task()、freertos_start.c内で同じように定義されていますね。失礼しました。

    ret = xTaskCreate(main_task, "MAIN_TASK", 512, NULL, 3, NULL);

    ということは、スマートコンフィグレータで作成するタスクと何の違いもないのですね。

    スタックサイズ512Bのmain_task()にemWinのメインルーチンを記述しても動作するということは、

    emWin用のヒープサイズ102KBは別(emWinのFITモジュール?)で確保されているため、

    タスクで確保する必要はないのですね。これも勘違いしていました。

    自分の一番最初の質問に戻ると、main_taskは通常のタスクと等しく、

    その中で実行されるemWinのapplication.cでRTOSのAPIを呼び出すことに

    何ら問題はないということなのですね。

    フリーズの原因はしょうもないものでしたが、質問する中で参考資料など提示していただき、

    理解が深まりました。ありがとうございました。