本人是小白 准备学习C语言 C语言水平就是简单的逻辑操作 复杂的不会 所以准备学习下lvgl顺便提高下C语言的水平 目前遇到的问题是这样的 具体上代码(代码不长)
void lv_port_disp_init(void)
{
static lv_disp_buf_t disp_buf_3;
static lv_color_t buf3_1[LV_HOR_RES_MAX * LV_VER_RES_MAX]; /*A screen sized buffer*/ //此处虽然是函数内部定义的局部量 但加上static后就是全局变量
static lv_color_t buf3_2[LV_HOR_RES_MAX * LV_VER_RES_MAX]; /*An other screen sized buffer*/ //此处虽然是函数内部定义的局部量 但加上static后就是全局变量
lv_disp_buf_init(&disp_buf_3, buf3_1, buf3_2, LV_HOR_RES_MAX * LV_VER_RES_MAX); /*Initialize the display buffer*/ //给前面定义的static全局静态变量分配内存 具体函数在下面的代码里
lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/ //此处定义了 一个局部结构变量
lv_disp_drv_init(&disp_drv); /*Basic initialization*/ //给上行定义的局部变量分配内存
(代码在下面,给局部变量分配内存是不是会变成全局变量)
/*Set the resolution of the display*/
disp_drv.hor_res = LV_HOR_RES_MAX;
disp_drv.ver_res = LV_VER_RES_MAX;
/*Used to copy the buffer's content to the display*/
disp_drv.flush_cb = disp_flush;
disp_drv.buffer = &disp_buf_3;
}
void lv_disp_buf_init(lv_disp_buf_t * disp_buf, void * buf1, void * buf2, uint32_t size_in_px_cnt)
{
_lv_memset_00(disp_buf, sizeof(lv_disp_buf_t));
disp_buf->buf1 = buf1;
disp_buf->buf2 = buf2;
disp_buf->buf_act = disp_buf->buf1;
disp_buf->size = size_in_px_cnt;
}
void lv_disp_drv_init(lv_disp_drv_t * driver)
{
_lv_memset_00(driver, sizeof(lv_disp_drv_t));
driver->flush_cb = NULL;
driver->hor_res = LV_HOR_RES_MAX;
driver->ver_res = LV_VER_RES_MAX;
driver->buffer = NULL;
driver->rotated = 0;
driver->color_chroma_key = LV_COLOR_TRANSP;
driver->dpi = LV_DPI;
driver->antialiasing = true;
driver->set_px_cb = NULL;
}
我的问题如下 主要有以下几点
1.void lv_port_disp_init(void) 函数返回值和参数多是void 内部虽然定义了static 结构变量
也通过void lv_disp_buf_init(lv_disp_buf_t * disp_buf, void * buf1, void * buf2, uint32_t size_in_px_cnt);
函数进行了指针操作,也就是在内存实现了操作实质上修改了需要修改的数据,但并没有返回分配了的内存地址
那么其他程序怎么知道这块地址是什么,如何共享数据(除编译器指定之外)。?
2.定义的局部结构体变量 在使用 _lv_memset_00(disp_buf, sizeof(lv_disp_buf_t));分配内存后 是不是就变成了了全局变量了?
以上是我的疑惑,还请大神解答下,谢谢各路大神。 |