初级会员
- 积分
- 86
- 金钱
- 86
- 注册时间
- 2017-1-4
- 在线时间
- 11 小时
|
1金钱
在F407下使用FreeRTOS+emWIN时,如果执行GUI_Exec()加上延时就没问题,不加延时的话,GUI任务就会进入FPU_IRQHandler,但其他任务不受影响。
代码如下:
static void panelRoutine(void* pArgs)
{
WM_HWIN hPanel, hCh1, hCh2;
char buf[30];
u32 tmp = 0;
GUI_Init();
hPanel = GUI_CreateDialogBox(_aPanelCreate, GUI_COUNTOF(_aPanelCreate), _cbPanel, WM_HBKWIN, 0, 0);
hCh1 = GUI_CreateDialogBox(_aCh1Create, GUI_COUNTOF(_aCh1Create), _cbChannel, hPanel, 0, 0);
hCh2 = GUI_CreateDialogBox(_aCh2Create, GUI_COUNTOF(_aCh2Create), _cbChannel, hPanel, 0, 0);
while(1)
{
// 获取屏幕按键
tmp = keyGet();
if(tmp)
{
sprintf(buf, "Key Value: 0x%08X", tmp);
TEXT_SetText(WM_GetDialogItem(hPanel, ID_TEXT_KEY_VALUE), buf);
}
// 刷新显示
GUI_X_ExecIdle();
}
}
void GUI_X_ExecIdle(void)
{
GUI_Exec();
vTaskDelay(30/portTICK_RATE_MS);
}
如果把GUI_X_ExecIdle中的延时部分去掉,上面的任务就不能正常执行,但其他任务不受影响。
通过仿真发现,任务不能正常执行是因为进入了FPU_IRQHandler中断。
对于这个问题,不知道有没有哪位大神有解决方法?
|
最佳答案
查看完整内容[请看2#楼]
调了2天,终于发现原因了。
移植操作系统的时候,偷了个懒,直接在stm32f4xx_it.c中定义的中断函数
SVC_Handler、PendSV_Handler、SysTick_Handler中调用了
vPortSVCHandler、xPortPendSVHandler、xPortSysTickHandler。
而没有修改启动代码。
结果就出了这个问题,真的搞得头大。
正在吐血中。。。
|