Я делал что-то подобное (панельку с часами, значками наподобие виндозного трея) следующим образом:
1. Создаю окно:
Код
WM_HWIN hStatusWin;
.................................
hStatusWin = WM_CreateWindowAsChild ( 0, 0, 800, 25, WM_GetDesktopWindowEx ( 1 ),
WM_CF_SHOW | WM_CF_HASTRANS | WM_CF_MEMDEV | WM_CF_STAYONTOP, _cbStatus, 0 );
2. В его оконной функции пишу:
CODE
hWin = pMsg -> hWin;
switch ( pMsg->MsgId )
{
case WM_CREATE: // Создание окна
hTimerTime = WM_CreateTimer ( hWin, ID_TIMER_TIME, 1000, 0 );
.............
break;
case WM_DELETE: // Удаление окна
WM_DeleteTimer ( hTimerTime );
break;
case WM_TIMER: // Таймер обновления окна
WM_InvalidateWindow ( hWin );
WM_RestartTimer ( pMsg->Data.v, 0 );
break;
case WM_PAINT: // Перерисовка
break;
hTimerTime - либо глобальная, либо локальная с модификатором static.
Идея в следующем - Вы создаёте простое окно, которое сами же и перерисовываете по таймеру в событии WM_PAINT.
Работает и под FreeRTOS, и без неё. от этого вообще ничего не зависит.