Problemas encontrados al depurar CCD

Advertencia de salida de la interfaz de conmutación LVGL

inserte la descripción de la imagen aquí
Active un temporizador para actualizar la fuente de la imagen en tiempo real, genere una advertencia una vez que se cambia la interfaz y la advertencia desaparece después de bloquear 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();
}

Solución

Keil encontró el siguiente error

inserte la descripción de la imagen aquí

Solución

Método 1

Cambie el formato de codificación de ingeniería a GB2312

Método 2

Haga clic en el icono de la varita mágica, cambie a la barra de opciones de C/C++ y agregue opciones de compilación a Misc Controls:

--no-multibyte-chars

inserte la descripción de la imagen aquí

Cómo convertir por lotes la codificación de archivos keil a utf-8

inserte la descripción de la imagen aquí

El cambio de página de la interfaz con animación está bloqueado

inserte la descripción de la imagen aquí
En la interfaz principal, la visualización de la animación se realiza a través de anim. Si hace clic en la configuración para cambiar de página, la máquina se bloqueará.

//目标刷新
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);
}

Solución

Al analizar el programa anterior, después de cambiar de página, se liberará el espacio de estructura de componentes de la página principal, lo que hará que ui->main_img_1, ui->main_label se conviertan en punteros salvajes, pero la función de devolución de llamada img_anim_event_handler aún se llamará regularmente para actualizar la imagen. , lo que provoca un bloqueo, por lo que cuando se usa antes de ui->main_img_1, el puntero ui->main_label juzga si es un puntero salvaje, a través de la función 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);
}

Supongo que te gusta

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