|
在STM32F407上,移植了USOS + STEMWIN, EMWIN使用单任务模式,执行
GUI_Exec();
OSTimeDly(5);
后进入 HardFault_Handler, 跟踪发现,执行OSTimeDly后是能切换到空闲任务的
测试发现, 将OSTimeDly(5) 换成 Dly(5) 不会死机。 或者,将对话框中的BUTTON删除,也不会死机
下面是 EMWIN TASK内容和创建的对话框内容
void Dly(u32 n)
{
u32 s=OSTime;
while ((u32)(OSTime-s)<n);
}
void TaskEmWin(void *parg)
{
LCD_InitHard();
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC,ENABLE);//开启 CRC 时钟
GUI_Init();
//启用中文支持,并设置默认字体
GUI_UC_SetEncodeUTF8();
TEXT_SetDefaultFont(&GUI_FontHzSong16);
BUTTON_SetDefaultFont(&GUI_FontHzSong16);
OSTimeDly(500);
CreateFramewin();
while (1)
{
GUI_Exec();
OSTimeDly(5);
}
}
/**************************************创建的对话框内容*****************************/
#include "DIALOG.h"
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_TEXT_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_0 (GUI_ID_USER + 0x03)
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 37, 12, 320, 240, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "电压测量", ID_TEXT_0, 50, 27, 80, 20, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "设置", ID_BUTTON_0, 53, 149, 100, 50, 0, 0x0, 0 },
};
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg)
{
int Id,NCode;
switch (pMsg->MsgId) {
// USER START (Optionally insert additional message handling)
case WM_INIT_DIALOG:
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id)
{
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
break;
}
}
break;
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
}
WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}
/*************************** End of file ****************************/ |
|