t113-c-lvgl-anim篇

有时候我们需要在anim结束后释放一些空间那么这个时候应该怎么做的?

其实官方已经给了函数给我们了

动画结束后回调函数

1.lv_anim_set_deleted_cb()

这个函数表示的是当anim被删除的时候回调的函数,实际运行会自己调用,可以在这个回调函数里面添加东西去删除或者改动什么的,但这个毕竟是个系统函数不好改

2.lv_anim_set_ready_cb

这个函数是当动画空闲的时候调用的回调函数,动画结束了不就空闲了嘛

基本上就这俩个了

但是有的时候我们需要在整个程序(好几个动画什么的)运行完成后操作一些东西,这个时候就要自己设计事件函数了,那么我来简单设计一个eventsready的函数试一下

设计发送事件函数

1._ui_set_get_events_num

我们在之前提到的readycb中加入一个能够计数的函数(自己设计的)

这样就能在运行完一定的步骤之后回调发送给先前的函数

2.ui_event____initial_actions0

在这个函数中我门就可以运行我们想做的东西了

移植之前的摄像头代码

现在ui做好了那么移植一下之前的代码吧:

代码:

首先之前的代码已经不适宜现在的情况了,必须得改一下

其实并没有改很多,只是把main函数改掉了;

int get_camera(void *img)
{
    unsigned char buf[240*240*4];
    unsigned char rgbbuf[240*240*3];
    if(!udp_rec(rgbbuf))
    {
        rgb_to_argb(rgbbuf,(unsigned int *)img,240*240*3);
    }
    else{
        return -1;
    }
    return 0;
    // udp_end();
}

同时监听的时候我做个一个小型的超时返回,虽然这样还是会有一小段的卡顿,但是终究还是解决卡死的情况

int udp_rec(unsigned char *ucRecvBuf)
{
	int size,total_size=0;
    iAddrLen = sizeof(struct sockaddr);
	iRecvLen = 0;
	unsigned int time_try;
	time_try = 0;
	while(total_size<(240*240*3))
	{
		iRecvLen = recvfrom(iSocketServer, ucRecvBuf+total_size, 240*240*3, MSG_DONTWAIT, (struct sockaddr *)&tSocketClientAddr, &iAddrLen);
		if (iRecvLen > 0){
			total_size+=iRecvLen;
			udp_send_ack();
		}
		else{
			time_try++;
		}
		if(time_try >= 500000)
		{
			printf("ERROR TO RECV,CHEAK CONNET!\r\n");
			return -1;
		}
	}
    return 0;
}

cmake

cmake我添加了文件搜寻下的所有.c文件,这样更方便

cmake_minimum_required(VERSION 3.12.4)

SET(CMAKE_C_COMPILER /home/momo/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-gcc)
SET(CMAKE_CXX_COMPILER /home/momo/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-g++)

project(lvgl_run VERSION 1.2)

set(CMAKE_INSTALL_PREFIX /home/momo/Tina-Linux/exsample/lcd_run/build)

file(GLOB_RECURSE allc ${PROJECT_SOURCE_DIR}/img/*.c
${PROJECT_SOURCE_DIR}/app/*.c
)

message("${allc}")

#包含lvgl的子库
add_subdirectory(lvgl)
add_subdirectory(camera)

#创建exe的可执行程序
add_executable(lcd_run lcd_run.c ui.c ui_events.c ui_helpers.c animation.c ${allc})

#链接所需要的库
target_link_libraries(lcd_run PUBLIC lvgl camera)
#target_link_libraries(lvgl_ui PUBLIC lvgl_demos)

 

posted @ 2023-08-19 18:36  悠闲的小莫  阅读(550)  评论(0编辑  收藏  举报