Problemas encontrados na depuração do CCD

Aviso de saída da interface de comutação LVGL

insira a descrição da imagem aqui
Ative um cronômetro para atualizar a fonte da imagem em tempo real e emita um aviso assim que a interface for trocada, e o aviso desaparece após o bloqueio de lv_img_set_src

static void timer_event_handler(lv_timer_t * timer)
{
    
    
    //lv_img_set_src(guider_ui.main_img_1, &image_256x80);/*设置图片源 From variable*/
}

static void lv_timer_test()
{
    
    
    static uint32_t user_data = 10;
    lv_timer_t * timer1 = lv_timer_create(timer_event_handler,100,(void *)&user_data);
}

void GUI_APP(void)
{
    
    

    setup_ui(&guider_ui);
    lv_timer_test();
}

Solução

Keil encontrou o seguinte erro

insira a descrição da imagem aqui

Solução

Método 1

Mude o formato de codificação de engenharia para GB2312

Método 2

Clique no ícone da varinha mágica, mude para a barra de opções C/C++ e adicione opções de compilação aos controles diversos:

--no-multibyte-chars

insira a descrição da imagem aqui

Como converter em lote a codificação de arquivo keil para utf-8

insira a descrição da imagem aqui

A troca de página da interface com animação está travada

insira a descrição da imagem aqui
Na interface principal, a exibição da animação é realizada através do anim. Se você clicar na configuração para mudar de página, a máquina irá travar.

//目标刷新
static void tag_anim_event_handler(void *var, int32_t v)
{
    
    

}
//图片和label刷新
static void img_anim_event_handler(void *var, int32_t v)
{
    
    
    lv_ui *ui = (lv_ui *)var;

    lv_img_set_src(ui->main_img_1, &image_256x80);/*设置图片源 From variable*/
    lv_label_set_text_fmt(ui->main_label,"%d",v);
}

static void lv_anim_test(lv_ui *ui)
{
    
    
    lv_anim_t a;

    lv_anim_init(&a);
    lv_anim_set_var(&a, ui);
    lv_anim_set_exec_cb(&a, img_anim_event_handler);
    lv_anim_set_values(&a, 0, 10);					//设置开始和结束值
    lv_anim_set_time(&a, 2000);
    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
    lv_anim_start(&a);

    lv_anim_set_exec_cb(&a, tag_anim_event_handler);
    lv_anim_set_time(&a, 2000);
    lv_anim_start(&a);
}
void setup_scr_main(lv_ui *ui)
{
    
    
    ui->main = lv_obj_create(NULL);

	lv_anim_test(ui);

	//Init events for screen
	events_init_main(ui);
}

Solução

Analisando o programa acima, após a troca de página, o espaço da estrutura do componente da página principal será liberado, fazendo com que ui-> main_img_1, ui-> main_label se tornem ponteiros selvagens, mas a função de retorno de chamada img_anim_event_handler ainda será chamada regularmente para atualizar a imagem , resultando em uma falha, portanto, ao usar Before ui->main_img_1, o ponteiro ui->main_label julga se é um ponteiro selvagem, por meio da função lv_obj_is_valid(ui->main_img_1).

static void img_anim_event_handler(void *var, int32_t v)
{
    
    
    lv_ui *ui = (lv_ui *)var;

    if(!lv_obj_is_valid(ui->main_img_1)) return;			//如果是野指针,则退出

    lv_img_set_src(ui->main_img_1, &image_256x80);/*设置图片源 From variable*/
    lv_label_set_text_fmt(ui->main_label,"%d",v);
}

Acho que você gosta

Origin blog.csdn.net/m0_37187962/article/details/125784961
Recomendado
Clasificación