OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5700|回复: 4

F407使用FreeRTOS+emWIN的FPU_IRQHandler问题

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-1-4
在线时间
11 小时
发表于 2017-1-7 17:00:06 | 显示全部楼层 |阅读模式
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。 而没有修改启动代码。 结果就出了这个问题,真的搞得头大。 正在吐血中。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-1-4
在线时间
11 小时
 楼主| 发表于 2017-1-7 17:00:07 | 显示全部楼层
调了2天,终于发现原因了。
移植操作系统的时候,偷了个懒,直接在stm32f4xx_it.c中定义的中断函数
SVC_Handler、PendSV_Handler、SysTick_Handler中调用了
vPortSVCHandler、xPortPendSVHandler、xPortSysTickHandler。
而没有修改启动代码。
结果就出了这个问题,真的搞得头大。

正在吐血中。。。
回复

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-1-4
在线时间
11 小时
 楼主| 发表于 2017-1-7 17:19:47 | 显示全部楼层
问题补充:如果屏蔽GUI_X_ExecIdle函数,则任务中无延时,此时任务可正常执行。所以猜测应该是GUI_Exec中的某种机制导致该现象。
回复

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-1-4
在线时间
11 小时
 楼主| 发表于 2017-1-8 00:49:27 | 显示全部楼层
问题再补充:
经过试验,在只有emWIN一个任务的时候,不管有没有延时,都不会死机,但加一个其他非emWIN任务,就会有死机的情况出现。
且加了其他任务后,emWIN任务中延时越长,死机概率越低,但还是会有。延时越短死机概率越高,不延时则上电就死机。
回复

使用道具 举报

19

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1873
金钱
1873
注册时间
2013-7-29
在线时间
276 小时
发表于 2020-10-15 20:25:56 | 显示全部楼层
没有明白啥意思。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 11:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表