硬汉嵌入式论坛

 找回密码
 立即注册
查看: 435|回复: 1
收起左侧

[emWin] GUI_Exec1和帧率

[复制链接]

7

主题

13

回帖

34

积分

新手上路

积分
34
发表于 2025-1-4 09:17:46 | 显示全部楼层 |阅读模式
大佬们,下面是项目的GUI绘制任务,红色部分是我添加的显示帧率的代码,思路就是计算1s内GUI_Exec1()函数的执行次数
请问这个思路对吗?

void GUITask(void *pArg)
{
    static INT32U LastWDTTime = 0;
        static INT32U lastFrameTime = 0;   
        static INT32U frameCount = 0;   
        static INT32U refreshRate = 0;

    GUIParaPowerConfig();
    GUI_Init();
    GUI_SetDefaultFont(&GUI_DEFAULT_FONT);
           WIDGET_SetDefaultEffect(&WIDGET_Effect_None);
    WM_SetCallback(WM_HBKWIN,_cbBackgoundWin);
    GUI_UC_SetEncodeUTF8();
    g_CurPageId.Page = PAGE_LOGO;
    g_CurPageId.Id = SUBID0;
    TurnToFocus();

        // 清屏并设置字体   
        GUI_Clear();   
        GUI_SetFont(&DESK_LITE_FONT);
    for(;;)
    {
                INT32U currentTime = xTaskGetTickCount();
       
        DeskTopSowDataUpdata();
        PCReqStartTaskProcess();
        while(GUI_Exec1())
        {
            GUIWDTUpdate();
            if(xTaskGetTickCount() > LastWDTTime)
            {
                LastWDTTime = xTaskGetTickCount() +  1000 / portTICK_PERIOD_MS;
                GUI_X_Delay(5);
            }
        }
        RunParaChangeDelaySave();
        GUI_X_Delay(2);
        LastWDTTime = xTaskGetTickCount() +  1000 / portTICK_PERIOD_MS;
                // 刷新率计算        
                frameCount++;        
                if (currentTime - lastFrameTime >= 1000 / portTICK_PERIOD_MS)        
                {            
                        refreshRate = frameCount;            
                        frameCount = 0;            
                        lastFrameTime = currentTime;            
                        // 清屏并绘制帧率信息            
                        GUI_ClearRect(0, 0, 160, 20);  // 清除显示区域,确保更新不被覆盖            
                        INT8S fpsText[20];            
                        l_snprintf((char *)fpsText, sizeof(fpsText), "FPS: %d", refreshRate);
                        //l_snprintf((char *)g_DispBuf,sizeof(g_DispBuf),"%dpcs",whole_cnt);
                        GUI_SetColor(GUI_GREEN);// 设置文本颜色            
                        GUI_DispStringAt((const char *)fpsText, 1, 1); // 在屏幕左上角位置显示帧率
                        }
         //
        //电流锁定时不处理
        //
        if(!Ch1BatteryManager->GetCurrentShowHoldStatus() && !Ch2BatteryManager->GetCurrentShowHoldStatus())
        {
            g_PowerAllocation.Scheduling(E_AC_MODE_NONE);
        }
                if(ShowGetMachineState() == BoardMaster)
                {
                if((bOCP_cout_num_CH1==1)||(bOCP_cout_num_CH1==2)||(g_GUIPara.Continuous_mode&&Continuous_CH1))
                {
                       
                        if(bctBalanceAndSerial==Ch1BatteryManager->HardwareInteface->GetBatteryConnectionType()&&(g_ShowDataCh1.SysStatus==UI_STATUS_STANDBY))
                        {
                                                                Ch1BatteryManager->OSInterface->BlockTime(3000);
                                                                StartTask(SHOW_CHANNEL_1);
                                                                g_bReDrawPage = TRUE;
                        }
               
                }
                if((bOCP_cout_num_CH2==1)||(bOCP_cout_num_CH2==2)||(g_GUIPara.Continuous_mode&&Continuous_CH2))
                {
                       
                        if(bctBalanceAndSerial==Ch2BatteryManager->HardwareInteface->GetBatteryConnectionType()&&(g_ShowDataCh2.SysStatus==UI_STATUS_STANDBY))
                        {
                                                                Ch2BatteryManager->OSInterface->BlockTime(3000);
                                                                StartTask(SHOW_CHANNEL_2);
                                                                g_bReDrawPage = TRUE;
                        }
               
                }
                if((bOCP_cout_num_CH3==1)||(bOCP_cout_num_CH3==2)||(g_GUIPara.Continuous_mode&&Continuous_CH3))
                {
                        if((bctBalanceAndSerial==g_ShowDataCh3.ConnectionType)&&(g_ShowDataCh3.SysStatus==UI_STATUS_STANDBY))
                        {
                                                                //Ch2BatteryManager->OSInterface->BlockTime(3000);
                                                                vTaskDelay(1500 / portTICK_PERIOD_MS);
                                                                StartTask(SHOW_CHANNEL_3);
                                                                //GUI_X_Delay(3000);
                                                                g_bReDrawPage = TRUE;
                        }
                }
                if((bOCP_cout_num_CH4==1)||(bOCP_cout_num_CH4==2)||(g_GUIPara.Continuous_mode&&Continuous_CH4))
                {
                        if((bctBalanceAndSerial==g_ShowDataCh4.ConnectionType)&&(g_ShowDataCh4.SysStatus==UI_STATUS_STANDBY))
                        {
                                                                vTaskDelay(1500 / portTICK_PERIOD_MS);
                                                                //Ch2BatteryManager->OSInterface->BlockTime(3000);
                                                                StartTask(SHOW_CHANNEL_4);
                                                                //GUI_X_Delay(3000);
                                                                g_bReDrawPage = TRUE;
                        }
                }
                        }
    }
}


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116230
QQ
发表于 2025-1-6 01:28:59 | 显示全部楼层
可以作为简单参考。

这个是官方提供的测试Demo


第7期:官方提供专业的LCD驱动性能测试功能BASIC_DriverPerformance
https://www.armbbs.cn/forum.php? ... 3891&fromuid=58
(出处: 硬汉嵌入式论坛)



回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-10 22:04 , Processed in 0.255824 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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