はじめまして。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を呼び出すことに
何ら問題はないということなのですね。
フリーズの原因はしょうもないものでしたが、質問する中で参考資料など提示していただき、
理解が深まりました。ありがとうございました。