初级会员
- 积分
- 107
- 金钱
- 107
- 注册时间
- 2015-10-14
- 在线时间
- 2 小时
|
楼主 |
发表于 2015-10-29 11:19:22
|
显示全部楼层
问题定位在了如下函数,创建子窗口的回调函数CallBack中,CallBack处理消息ID为WM_DELETE(0x0B), 再执行GUI_PID_STATE stPidState = (*((GUI_PID_STATE *)(pMsg->Data.p)));就挂了,百思不得其解啊。怀疑过任务堆栈溢出,但是将任务堆栈由1024 加到 1024*5也与于事无补啊;也怀疑过STemWin内存溢出,用 GUI_ALLOC_AssignMemory(),将内存由500K增加到1M,还是同样的问题。
void fun(void)
{
WM_HWIN hWin;
hWin = WM_CreateWindowAsChild(
0, //窗口左上角,x轴位置
30, //窗口左上角,y轴位置
480, //窗口宽度
290, //窗口高度
WM_HBKWIN, //窗口父窗口句柄
WM_CF_SHOW|WM_CF_MOTION_Y,//窗口特性
CallBack,//窗口回调函数
0 //要分配的额外字节数,通常为0
);
WM_DeleteWindow(hWin);
}
CallBack函数如下
硬件错误版本:
A版本
static void RateSetCallBack(WM_MESSAGE* pMsg)
{
GUI_PID_STATE stPidState = (*((GUI_PID_STATE *)(pMsg->Data.p)));
switch (pMsg->MsgId)
{
case WM_PID_STATE_CHANGED:
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
不出现硬件错误:
B版本
static void RateSetCallBack(WM_MESSAGE* pMsg)
{
GUI_PID_STATE stPidState;
stPidState.Pressed = (*((GUI_PID_STATE *)(pMsg->Data.p))).Pressed;
stPidState.Layer = (*((GUI_PID_STATE *)(pMsg->Data.p))).Layer;
stPidState.y = (*((GUI_PID_STATE *)(pMsg->Data.p))).x;
stPidState.y = (*((GUI_PID_STATE *)(pMsg->Data.p))).x;
switch (pMsg->MsgId)
{
case WM_PID_STATE_CHANGED:
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
C版本
static void RateSetCallBack(WM_MESSAGE* pMsg)
{
GUI_PID_STATE stPidState;
switch (pMsg->MsgId)
{
case WM_PID_STATE_CHANGED:
stPidState = *((GUI_PID_STATE *)(pMsg->Data.p));
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
如上述,A版本出现硬件错误,B和C不出现硬件错误,神奇啊!大神们出来指点一下迷津,谢谢 |
|