|
大佬们,下面是项目的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;
}
}
}
}
}
|
|