emWin with FreeRTOS

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

emWin with FreeRTOS

636 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by pcalton on Mon Jun 24 13:11:29 MST 2013

<span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">I am trying to build a project that runs emWin from a single FreeRTOS task on an LPC4357 platform. Unfortunately, my project hardfaults after a few minutes.</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">I started by building a project that ran emWin as a standalone application. That project runs fine without any issues. I then modified the GUI_X.c file to use the FreeRTOS timing:</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">int GUI_X_GetTime(void)</span>
<span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">{</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">return ((int) xTaskGetTickCount());</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">}</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">void GUI_X_Delay(int ms)</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">{</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">vTaskDelay( ms );</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">}</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">my GUI task is currently the only task that I am using</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">int main(void)</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">{</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">xTaskCreate(tskGUI, (signed char *) "tskGUI", 2048, NULL, tskGUI_PRIORITY, NULL);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">vTaskStartScheduler();</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">while (1);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">return 0;</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">}</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">I stripped my GUI task down so that all it creates is a frame window</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">static const GUI_WIDGET_CREATE_INFO _aFrameWinControl[] =</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">{</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">{ FRAMEWIN_CreateIndirect, "Control", 0, 0, 0, LCD_WIDTH, LCD_HEIGHT, 0, 0 },</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">};</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">static void _cbFrameWinControl(WM_MESSAGE* pMsg)</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">{</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">int xSize, ySize;</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">switch(pMsg-&gt;MsgId)</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">{</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">case WM_INIT_DIALOG:</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">break;</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">case WM_PAINT:</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">xSize = WM_GetWindowSizeX(pMsg-&gt;hWin);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">ySize = WM_GetWindowSizeY(pMsg-&gt;hWin);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">GUI_DrawGradientH(0, 0, xSize - 1, ySize - 1, 0xFFFFFF, 0xDCCEC0);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">break;</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">default:</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">WM_DefaultProc(pMsg);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">}</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">}</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">void tskGUI(void *pvParameters)</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">{</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">GUI_Init();</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">WM_SetCreateFlags (WM_CF_MEMDEV);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">WM_SetDesktopColor(GUI_BLACK);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">GUI_CreateDialogBox(_aFrameWinControl, GUI_COUNTOF(_aFrameWinControl), &amp;_cbFrameWinControl, WM_HBKWIN, 0, 0);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">while (1)</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">{</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">GUI_Delay(10);</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">}</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">}</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">The application will run for a minute or two before hard faulting with INVPC ("Invalid PC load Usage Fault, caused by an invalid EXC_RETURN value:"). This seems to occur on the return from SVC within the yield function. My first thought was a stack overflow. However I have since expanded both the main stack used by ISRs and the task stack and added some stack monitoring. Neither stack appears to overflow.</span><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><br style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;" /><span style="color: #57595a; font-family: 'Trebuchet MS', Arial, sans-serif; font-size: 13px; line-height: normal;">Has anyone encountered a similar problem and if so, how did you resolve it?</span>

Labels (1)
0 Kudos
1 Reply

446 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by sebastianeferrer on Thu Dec 05 19:50:03 MST 2013
The same is happening to me... I'm using emWin with FreeRTOS on an LPC1769 and HardFaul_Handler is executed during GUI_Init rutine or during another part of the program.

I've searching and thinking what can be causing the problem and as far as I could find out it could be a problem of FreeRTOS with dinamically allocation memory implemented by emWin.
EmWin initialize an U32 vector with the size of the memory it whats to take and then during the execution of visual interface it takes the blocks of memory it needs.
Some how freeRTOS executes HardFaul_Handler because maybe it thinks that emWin is traying to manipule a posicion of RAM that does not concern.

Could you find out how to solve the problem?, if you could I would like to know how you did.

Bye!
0 Kudos