stm32出现HardFault,应该怎么解决?

fangzhenga 2012-12-12 11:16:43
目前使用stm32f103vet6调试TFT触摸屏,用到了ucosII和ucGUI,ucosII只用了两个任务,问题是:通过调用ucGUI的创建对话框函数,使两个对话框交替重复进行创建、关闭,很有规律的重复7次左右就进入了HardFault,进入仿真调试,根据SP的内容得到LR的地址,再跳到该地址,黄色标识的那一行,这一行代表的是什么意思,怎么能看出错误是什么,为什么地址为0xc618c618,超出了RAM范围?程序没有进行优化,图片如下:
下面的图片是上面图片的部分截图,方便看清楚:






...全文
1281 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
inurlcn 2013-01-22
  • 打赏
  • 举报
回复
F11是你最好的朋友
fangzhenga 2012-12-22
  • 打赏
  • 举报
回复
谢谢大家的帮助,我把对话框的内容调整了一下好了,至于什么原因还不清楚,求高人解答
woshi_ziyu 2012-12-13
  • 打赏
  • 举报
回复
贴的图没有用 已经进入到中断了 使两个对话框交替重复进行创建、关闭 ------- 贴一下你的代码 stm32 hard fault及堆栈探究
骁Captain 2012-12-13
  • 打赏
  • 举报
回复
访问越界的可能性大,检查下数组指针
net_friends 2012-12-13
  • 打赏
  • 举报
回复
焊接有问题、错误的接口配置过程、误写了FLASH,芯片杯具了 这些个情况,会进入这个中断
lbing7 2012-12-13
  • 打赏
  • 举报
回复
我还在,焊接有问题、错误的接口配置过程、误写了FLASH,芯片杯具了 这些个情况,会进入这个中断
Simality 2012-12-13
  • 打赏
  • 举报
回复
我脚着如果没有太硬的OS底子,这么漫无目的猜下去会很花时间。我有个辙你兴许可以试试。 找两个空闲IO口,写两端小语句用来分别翻转。比如这种: if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin)) GPIO_ResetBits(GPIOx, GPIO_Pin); else GPIO_SetBits(GPIOx, GPIO_Pin); 做成一个函数也行,做成一个宏也可。 把第一个IO口的翻转语句放到HardFault代码里面,可以放在while(1)之前,也可以放在循环体中。用示波器监视这个脚,一旦进入HardFault,会观察到电平翻转。 把第二个IO口的翻转语句插入到你程序执行的必经之路上。用示波器的另一个通道监视它。 用第一个IO口的双沿做trigger,示波器的时间跨度稍微设置大一点。一旦进入HardFault,你应该观察到两个通道上都有脉冲翻转。 第二个IO口的翻转只要观察到一次,你就知道那个时刻程序走到那里了。你要做的事情是手动分析程序的流程,沿着程序接下来执行的顺序把那个翻转语句尽量向后移动,反复尝试。应该观察到示波器上两个通道的脉冲越来越近了。这个过程做好笔记。 直到两个脉冲几乎重合的时候,你就找到崩溃前的现场了。下次断点执行到这个位置,看看相关变量有没有可疑的情况。
cwlmxmz 2012-12-13
  • 打赏
  • 举报
回复
兄弟 我刚刚前面几天解决了这个问题 我的原因是在用消息队列的时候 定义的数组没有初始化 我猜你也是这个原因 还有就是看看你的堆栈的大小,堆栈太小也会出现这样的问题 最好把所有定义的变量指针数组都初始化,这样就不会出现问题了
Simality 2012-12-13
  • 打赏
  • 举报
回复
我所见到的HardFault错误几乎全都是因为朝不该写入的地址写了东西。指针未初始化或者指针赋值错误最容易造成这个现象。这个是直接原因。 但你上了OS,分析起来比较困难,需要对OS有足够的了解,知道这些内存操作的用意,以及可能出现的风险,这个我帮不了你。
fangzhenga 2012-12-13
  • 打赏
  • 举报
回复
void KO_DELAY_Callback(WM_MESSAGE * pMsg) { WM_HWIN hWin = pMsg->hWin; unsigned char i = 0; BUTTON_Handle Button_Handle_KO1[14] = {0}; switch (pMsg->MsgId) { case WM_INIT_DIALOG: /* 初始化对话框 */ /* 获得控件的句柄 */ //Text_Handle[0] = WM_GetDialogItem(hWin, MY_GUI_ID_TEXT0); /* 数值显示 */ Button_Handle_KO1[0] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON0); /* 按钮 1 */ Button_Handle_KO1[1] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON1); /* 按钮 2 */ Button_Handle_KO1[2] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON2); /* 按钮 3 */ Button_Handle_KO1[3] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON3); /* 按钮 4 */ Button_Handle_KO1[4] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON4); /* 按钮 5 */ Button_Handle_KO1[5] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON5); /* 按钮 6 */ Button_Handle_KO1[6] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON6); /* 按钮 7 */ Button_Handle_KO1[7] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON7); /* 按钮 8 */ Button_Handle_KO1[8] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON8); /* 按钮 9 */ Button_Handle_KO1[9] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON9); /* 按钮 0 */ Button_Handle_KO1[10] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON10); /* 按钮 . */ Button_Handle_KO1[11] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON11); /* 按钮 <- */ Button_Handle_KO1[12] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON12); /* 确定 按钮 */ Button_Handle_KO1[13] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON13); /* 退出 按钮 */ BUTTON_SetBkColor(Button_Handle_KO1[12], 0, GUI_GRAY); BUTTON_SetBkColor(Button_Handle_KO1[13], 0, GUI_GRAY); for (i = 0; i < 12; i++) /* 设置按钮字体 */ { BUTTON_SetFont(Button_Handle_KO1[i], &GUI_FontComic18B_1); } BUTTON_SetFont(Button_Handle_KO1[12], &GUI_Font8x8); BUTTON_SetFont(Button_Handle_KO1[13], &GUI_Font8x8); OSTimeDlyHMSM(0, 0, 0, 50); //TEXT_SetTextAlign(Text_Handle[0], TEXT_CF_LEFT); /* 设置文本对齐方式 */ //TEXT_SetFont(Text_Handle[0], &GUI_FontComic18B_1); /* 设置文本字体 */ //TEXT_SetTextPos(Text_Handle[0], 5, 0); /* 指定文本显示位置 */ //TEXT_SetText(Text_Handle[0], Inst_Prmt.KO1_Delay_Value); /* 显示文本框初始值 */ break; case WM_KEY: /* 对话框中的某一个按钮按下 */ switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) { case _KO1: KO_Flag = _KO1; // KO1 break; case _KO2: // KO2 KO_Flag = _KO2; break; case _KO3: // KO3 KO_Flag = _KO3; break; case _KO4: // KO4 KO_Flag = _KO4; break; case MY_GUI_ID_BUTTON0: if (Bit_count >=7) { break; } Edit_MidVariable[Bit_count++] = '1'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON1: if (Bit_count >=7) { break; } Edit_MidVariable[Bit_count++] = '2'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON2: if (Bit_count >=7) { break; } Edit_MidVariable[Bit_count++] = '3'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON3: if (Bit_count >=7) { break; } Edit_MidVariable[Bit_count++] = '4'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON4: if (Bit_count >=7) { break; } Edit_MidVariable[Bit_count++] = '5'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON5: if (Bit_count >=7) { break; } Edit_MidVariable[Bit_count++] = '6'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON6: if (Bit_count >=7) { break; } Edit_MidVariable[Bit_count++] = '7'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON7: if (Bit_count >=7) { break; } Edit_MidVariable[Bit_count++] = '8'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON8: if (Bit_count >=7) { break; } Edit_MidVariable[Bit_count++] = '9'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON9: if ((Bit_count >=7)) { break; } for (i =0; i < Bit_count; i++) { if (Edit_MidVariable[i]!='0') { break; } if (i == Bit_count - 1) { return; } } Edit_MidVariable[Bit_count++] = '0'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); Key_Flag = 1; break; case MY_GUI_ID_BUTTON10: if ((Bit_count >=7)) { break; } if (Bit_count == 0) { Bit_count = 1; Edit_MidVariable[0] = '0'; for (i = 1; i < 7; i++) { Edit_MidVariable[i] = '\0'; } } for (i = 0; i < 7; i++) { if (Edit_MidVariable[i] == '.') { return; } } Edit_MidVariable[Bit_count++] = '.'; Edit_MidVariable[7] = '\0'; EDIT_SetText(Edit_Handle[0], Edit_MidVariable); GUI_Exec(); break; case MY_GUI_ID_BUTTON11: //清除按钮 for (i = 0; i < 7; i++) { Edit_MidVariable[i] = '\0'; } Bit_count = 0; EDIT_SetText(Edit_Handle[0], "0"); GUI_Exec(); break; case MY_GUI_ID_BUTTON12: //确定按钮 if (Edit_MidVariable[Bit_count - 1] == '.') break; GUI_EndDialog(hWin, 1); GUI_EndDialog(Edit_Handle[0], 1); //WM_DeleteWindow(Edit_Handle[0]); if ((Key_Flag != 0) || (strcmp((const char*)Edit_MidVariable, "\0") != 0)) { switch (KO_Flag) { case _KO1: for (i = 0; i < 7; i++) { Inst_Prmt.KO1_Delay_Value[i] = Edit_MidVariable[i]; } break; case _KO2: for (i = 0; i < 7; i++) { Inst_Prmt.KO2_Delay_Value[i] = Edit_MidVariable[i]; } break; case _KO3: for (i = 0; i < 7; i++) { Inst_Prmt.KO3_Delay_Value[i] = Edit_MidVariable[i]; } break; case _KO4: for (i = 0; i < 7; i++) { Inst_Prmt.KO4_Delay_Value[i] = Edit_MidVariable[i]; } break; default: break; } for (i = 0; i < 7; i++) { Edit_MidVariable[i] = '\0'; } Bit_count = 0; Key_Flag = 0; } GUI_Exec(); break; case MY_GUI_ID_BUTTON13: //退出按钮 GUI_EndDialog(hWin, 1); GUI_EndDialog(Edit_Handle[0], 1); hWin = NULL; Edit_Handle[0] = NULL; //WM_DeleteWindow(Edit_Handle[0]); for (i = 0; i < 7; i++) { Edit_MidVariable[i] = '\0'; } Bit_count = 0; GUI_Exec(); break; default: break; } break; default: WM_DefaultProc(pMsg); } } 这是创建第一个对话框: if(!WM_IsWindow(hWin)) { WM_BringToTop(MI_Handle); //通过调试,此处必须添加该函数,对话框才显示在最顶端 hWin = GUI_CreateDialogBox(MO_Dialog_Create_TYPE, GUI_COUNTOF(MO_Dialog_Create_TYPE), MO_Type_Callback, 0, 100, 0); // 创建MI类型设置对话框 WM_BringToBottom(MI_Handle); //通过调试,此处必须添加该函数,对话框才显示在最顶端 GUI_Exec(); // 必须添加此函数,否则按钮不显示 } MO_Dialog_Deal(); 这是创建第二个对话框: if(!WM_IsWindow(hWin)) { WM_BringToTop(MI_Handle); //通过调试,此处必须添加该函数,对话框才显示在最顶端 hWin = GUI_CreateDialogBox(KO1_Dialog_Create_DELAY, GUI_COUNTOF(KO1_Dialog_Create_DELAY), KO_DELAY_Callback, 0, 65, 5); // 创建KO1延时对话框 Edit_Handle[0] = EDIT_Create(75, 25, 170, 20, MY_GUI_ID_EDIT0, 7, WM_CF_SHOW); if (Edit_Handle[0] == (EDIT_Handle)0) //如果创建编辑框不成功,重新创建 { Edit_Handle[0] = EDIT_Create(75, 25, 170, 20, MY_GUI_ID_EDIT0, 7, WM_CF_SHOW); } OSTimeDlyHMSM(0, 0, 0, 50); EDIT_SetText(Edit_Handle[0], Inst_Prmt.KO1_Delay_Value); GUI_SendKeyMsg(_KO1, 1); // 按下KO1选项 WM_BringToBottom(MI_Handle); //通过调试,此处必须添加该函数,对话框才显示在最顶端 GUI_Exec(); // 必须添加此函数,否则按钮不显示 } KO_Dialog_Deal(); 其中MO_Dialog_Deal(); KO_Dialog_Deal();这两个函数只是给对话框发送了触摸屏的信息,处理部分都在回调函数里面
fangzhenga 2012-12-13
  • 打赏
  • 举报
回复
下面是我的代码,由于代码很长,我把用到的程序贴出来,对话框只要交替重复创建、退出,重复7次左右就进入HardFault,希望各位大侠花宝贵的时间给小弟指点迷津: const GUI_WIDGET_CREATE_INFO MI_Dialog_Create_TYPE[] = { { FRAMEWIN_CreateIndirect, " MI-TYPE", 0, 0,0,95,240, FRAMEWIN_CF_MOVEABLE }, { CHECKBOX_CreateIndirect, NULL,MY_GUI_ID_CHECK0, 5,5,16,16 }, /* 0 0~5V复选框 */ { CHECKBOX_CreateIndirect, NULL,MY_GUI_ID_CHECK1, 5,31,16,16 }, /* 1 0~10V复选框 */ { CHECKBOX_CreateIndirect, NULL,MY_GUI_ID_CHECK2, 5,57,16,16 }, /* 2 0~1V复选框 */ { CHECKBOX_CreateIndirect, NULL,MY_GUI_ID_CHECK3, 5,83,16,16 }, /* 3 1~5V复选框 */ { CHECKBOX_CreateIndirect, NULL,MY_GUI_ID_CHECK4, 5,109,16,16 }, /* 4 4~20mA复选框 */ { CHECKBOX_CreateIndirect, NULL,MY_GUI_ID_CHECK5, 5,135,16,16 }, /* 5 0~10mA复选框 */ { CHECKBOX_CreateIndirect, NULL,MY_GUI_ID_CHECK6, 5,161,16,16 }, /* 6 0~1mA复选框 */ { TEXT_CreateIndirect, "0~5V",MY_GUI_ID_TEXT0, 26,5,60,16, TEXT_CF_HCENTER | TEXT_CF_VCENTER }, /* 7 0~5V */ { TEXT_CreateIndirect, "0~10V",MY_GUI_ID_TEXT1, 26,31,60,16, TEXT_CF_HCENTER | TEXT_CF_VCENTER }, /* 8 0~10V */ { TEXT_CreateIndirect, "0~1V",MY_GUI_ID_TEXT2, 26,57,60,16, TEXT_CF_HCENTER | TEXT_CF_VCENTER }, /* 9 0~1V */ { TEXT_CreateIndirect, "1~5V",MY_GUI_ID_TEXT3, 26,83,60,16, TEXT_CF_HCENTER | TEXT_CF_VCENTER }, /* 10 1~5V */ { TEXT_CreateIndirect, "4~20mA",MY_GUI_ID_TEXT4, 26,109,60,16, TEXT_CF_HCENTER | TEXT_CF_VCENTER }, /* 11 4~20mA */ { TEXT_CreateIndirect, "0~10mA",MY_GUI_ID_TEXT5, 26,135,60,16, TEXT_CF_HCENTER | TEXT_CF_VCENTER }, /* 12 0~10mA */ { TEXT_CreateIndirect, "0~1mA",MY_GUI_ID_TEXT6, 26,161,60,16, TEXT_CF_HCENTER | TEXT_CF_VCENTER }, /* 13 0~1mA */ { BUTTON_CreateIndirect,"YES",MY_GUI_ID_BUTTON0, 5,190,35,30 }, /* 14 确定 按钮 */ { BUTTON_CreateIndirect,"QUIT",MY_GUI_ID_BUTTON1, 50,190,35,30 } /* 15 退出 按钮 */ }; const GUI_WIDGET_CREATE_INFO KO1_Dialog_Create_DELAY[] = { { FRAMEWIN_CreateIndirect, " KO1-Keyboard", 0, 0,0,195,230, FRAMEWIN_CF_MOVEABLE }, { TEXT_CreateIndirect, NULL,MY_GUI_ID_TEXT0, 10,10,170,20, TEXT_CF_LEFT | TEXT_CF_BOTTOM}, /* 0 数值显示 */ { BUTTON_CreateIndirect,"1",MY_GUI_ID_BUTTON0, 10,45,35,30 }, /* 1 按钮 1 */ { BUTTON_CreateIndirect,"2",MY_GUI_ID_BUTTON1, 55,45,35,30 }, /* 2 按钮 2 */ { BUTTON_CreateIndirect,"3",MY_GUI_ID_BUTTON2, 100,45,35,30 }, /* 3 按钮 3 */ { BUTTON_CreateIndirect,"4",MY_GUI_ID_BUTTON3, 145,45,35,30 }, /* 4 按钮 4 */ { BUTTON_CreateIndirect,"5",MY_GUI_ID_BUTTON4, 10,85,35,30 }, /* 5 按钮 5 */ { BUTTON_CreateIndirect,"6",MY_GUI_ID_BUTTON5, 55,85,35,30 }, /* 6 按钮 6 */ { BUTTON_CreateIndirect,"7",MY_GUI_ID_BUTTON6, 100,85,35,30 }, /* 7 按钮 7 */ { BUTTON_CreateIndirect,"8",MY_GUI_ID_BUTTON7, 145,85,35,30 }, /* 8 按钮 8 */ { BUTTON_CreateIndirect,"9",MY_GUI_ID_BUTTON8, 10,125,35,30 }, /* 9 按钮 9 */ { BUTTON_CreateIndirect,"0",MY_GUI_ID_BUTTON9, 55,125,35,30 }, /* 10 按钮 0 */ { BUTTON_CreateIndirect,".",MY_GUI_ID_BUTTON10, 100,125,35,30 }, /* 11 按钮 . */ { BUTTON_CreateIndirect,"<-",MY_GUI_ID_BUTTON11,145,125,35,30 }, /* 12 按钮 <- */ { BUTTON_CreateIndirect,"YES",MY_GUI_ID_BUTTON12,40,170,45,40 }, /* 13 确定按钮 */ { BUTTON_CreateIndirect,"QUIT",MY_GUI_ID_BUTTON13,105,170,45,40 } /* 14 退出按钮 */ }; void MO_Type_Callback(WM_MESSAGE * pMsg) { WM_HWIN hWin = pMsg->hWin; unsigned char i = 0; switch (pMsg->MsgId) { case WM_INIT_DIALOG: /* 初始化对话框 */ /* 获得控件的句柄 */ Checkbox_Handle_Test[0] = WM_GetDialogItem(hWin, MY_GUI_ID_CHECK0); /* 0~5V */ Checkbox_Handle_Test[1] = WM_GetDialogItem(hWin, MY_GUI_ID_CHECK1); /* 0~10V */ Checkbox_Handle_Test[2] = WM_GetDialogItem(hWin, MY_GUI_ID_CHECK2); /* 1~5V */ Checkbox_Handle_Test[3] = WM_GetDialogItem(hWin, MY_GUI_ID_CHECK3); /* 0~10mA */ Checkbox_Handle_Test[4] = WM_GetDialogItem(hWin, MY_GUI_ID_CHECK4); /* 4~20mA */ Button_Handle_Test[0] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON0); /* 确定 按钮 */ Button_Handle_Test[1] = WM_GetDialogItem(hWin, MY_GUI_ID_BUTTON1); /* 退出 按钮 */ BUTTON_SetBkColor(Button_Handle_Test[0], 0, GUI_GRAY); BUTTON_SetBkColor(Button_Handle_Test[1], 0, GUI_GRAY); switch (Inst_Prmt.MO_Signal_Type) { case _0to5V: CHECKBOX_Check(Checkbox_Handle_Test[0]); /* 初始化选中该复选框 */ OSTimeDlyHMSM(0, 0, 0, 5); GUI_Exec(); break; case _0to10V: CHECKBOX_Check(Checkbox_Handle_Test[1]); OSTimeDlyHMSM(0, 0, 0, 5); GUI_Exec(); break; case _1to5V: CHECKBOX_Check(Checkbox_Handle_Test[2]); OSTimeDlyHMSM(0, 0, 0, 5); GUI_Exec(); break; case _0to10mA: CHECKBOX_Check(Checkbox_Handle_Test[3]); OSTimeDlyHMSM(0, 0, 0, 5); GUI_Exec(); break; case _4to20mA: CHECKBOX_Check(Checkbox_Handle_Test[4]); OSTimeDlyHMSM(0, 0, 0, 5); GUI_Exec(); break; default: break; } break; case WM_KEY: /* 对话框中的某一个按钮按下 */ switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) { case MY_GUI_ID_CHECK0: for (i = 0; i < 7; i++) { if ( CHECKBOX_IsChecked(Checkbox_Handle_Test[i]) ) { CHECKBOX_Uncheck(Checkbox_Handle_Test[i]); CHECKBOX_Check(Checkbox_Handle_Test[0]); GUI_Exec(); MO_TypeMidVariable = _0to5V; break; } } break; case MY_GUI_ID_CHECK1: for (i = 0; i < 7; i++) { if ( CHECKBOX_IsChecked(Checkbox_Handle_Test[i]) ) { CHECKBOX_Uncheck(Checkbox_Handle_Test[i]); CHECKBOX_Check(Checkbox_Handle_Test[1]); GUI_Exec(); MO_TypeMidVariable = _0to10V; break; } } break; case MY_GUI_ID_CHECK2: for (i = 0; i < 7; i++) { if ( CHECKBOX_IsChecked(Checkbox_Handle_Test[i]) ) { CHECKBOX_Uncheck(Checkbox_Handle_Test[i]); CHECKBOX_Check(Checkbox_Handle_Test[2]); GUI_Exec(); MO_TypeMidVariable = _1to5V; break; } } break; case MY_GUI_ID_CHECK3: for (i = 0; i < 7; i++) { if ( CHECKBOX_IsChecked(Checkbox_Handle_Test[i]) ) { CHECKBOX_Uncheck(Checkbox_Handle_Test[i]); CHECKBOX_Check(Checkbox_Handle_Test[3]); GUI_Exec(); MO_TypeMidVariable = _0to10mA; break; } } break; case MY_GUI_ID_CHECK4: for (i = 0; i < 7; i++) { if ( CHECKBOX_IsChecked(Checkbox_Handle_Test[i]) ) { CHECKBOX_Uncheck(Checkbox_Handle_Test[i]); CHECKBOX_Check(Checkbox_Handle_Test[4]); GUI_Exec(); MO_TypeMidVariable = _4to20mA; break; } } break; case MY_GUI_ID_BUTTON0: GUI_EndDialog(hWin, 1); if (0 != MO_TypeMidVariable) { Inst_Prmt.MO_Signal_Type = MO_TypeMidVariable; MO_TypeMidVariable = 0; } GUI_Exec(); break; case MY_GUI_ID_BUTTON1: GUI_EndDialog(hWin, 1); hWin = NULL; GUI_Exec(); break; default: break; } break; default: WM_DefaultProc(pMsg); } }

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧