当前位置: 首页 > wzjs >正文

酷站海洛视频网站空间

酷站海洛,视频网站空间,vr播放器 wordpress,iis建设个人网站C语言宏定义中X-Micro的使用 在LVGL源码中,全局变量初始化,以及函数声明和定义(LV_ROOTS)的时候的时候,使用到了X-Micro,下面拆解一下这个宏的用法。 下列代码来自:lv_gc.h 头文件 #define L…

C语言宏定义中X-Micro的使用

在LVGL源码中,全局变量初始化,以及函数声明和定义(LV_ROOTS)的时候的时候,使用到了X-Micro,下面拆解一下这个宏的用法。

下列代码来自:lv_gc.h 头文件

#define LV_DISPATCH(f, t, n)            f(t, n)#define LV_ITERATE_ROOTS(f)                                                                            \LV_DISPATCH(f, lv_ll_t, _lv_timer_ll) /*Linked list to store the lv_timers*/                       \LV_DISPATCH(f, lv_ll_t, _lv_disp_ll)  /*Linked list of display device*/                            \LV_DISPATCH(f, lv_ll_t, _lv_indev_ll) /*Linked list of input device*/                              \LV_DISPATCH(f, lv_ll_t, _lv_fsdrv_ll)                                                              \LV_DISPATCH(f, lv_ll_t, _lv_anim_ll)                                                               \LV_DISPATCH(f, lv_ll_t, _lv_group_ll)                                                              \LV_DISPATCH(f, lv_ll_t, _lv_img_decoder_ll)                                                        \LV_DISPATCH(f, lv_ll_t, _lv_obj_style_trans_ll)                                                    \LV_DISPATCH(f, lv_layout_dsc_t *, _lv_layout_list)                                                 \LV_DISPATCH_COND(f, _lv_img_cache_entry_t*, _lv_img_cache_array, LV_IMG_CACHE_DEF, 1)              \LV_DISPATCH_COND(f, _lv_img_cache_entry_t, _lv_img_cache_single, LV_IMG_CACHE_DEF, 0)              \LV_DISPATCH(f, lv_timer_t*, _lv_timer_act)                                                         \LV_DISPATCH(f, lv_mem_buf_arr_t , lv_mem_buf)                                                      \LV_DISPATCH_COND(f, _lv_draw_mask_radius_circle_dsc_arr_t , _lv_circle_cache, LV_DRAW_COMPLEX, 1)  \LV_DISPATCH_COND(f, _lv_draw_mask_saved_arr_t , _lv_draw_mask_list, LV_DRAW_COMPLEX, 1)            \LV_DISPATCH(f, void * , _lv_theme_default_styles)                                                  \LV_DISPATCH(f, void * , _lv_theme_basic_styles)                                                  \LV_DISPATCH_COND(f, uint8_t *, _lv_font_decompr_buf, LV_USE_FONT_COMPRESSED, 1)                    \LV_DISPATCH(f, uint8_t * , _lv_grad_cache_mem)#define LV_DEFINE_ROOT(root_type, root_name) root_type root_name;
#define LV_ROOTS LV_ITERATE_ROOTS(LV_DEFINE_ROOT)#define LV_GC_ROOT(x) x
#define LV_EXTERN_ROOT(root_type, root_name) extern root_type root_name;
LV_ITERATE_ROOTS(LV_EXTERN_ROOT)

在LVGL中,调用 LV_ROOTS 宏声明全局变量,下面拆解宏,宏的拆解从内到外,由于前面

#define LV_DISPATCH(f, t, n)            f(t, n)
#define LV_ITERATE_ROOTS(f)                                                               \f(lv_ll_t, _lv_timer_ll) /*Linked list to store the lv_timers*/                       \f(lv_ll_t, _lv_disp_ll)  /*Linked list of display device*/                            \f(lv_ll_t, _lv_indev_ll) /*Linked list of input device*/ ...... // 其余省略

根据这条宏定义:

LV_DEFINE_ROOT(root_type, root_name) root_type root_name;

把 f 替换为 LV_DEFINE_ROOT,因此就变为:

#define LV_ITERATE_ROOTS(LV_DEFINE_ROOT)                                                               \LV_DEFINE_ROOT(lv_ll_t, _lv_timer_ll) /*Linked list to store the lv_timers*/                       \LV_DEFINE_ROOT(lv_ll_t, _lv_disp_ll)  /*Linked list of display device*/                            \LV_DEFINE_ROOT(lv_ll_t, _lv_indev_ll) /*Linked list of input device*/ ...... // 其余省略

LV_DEFINE_ROOT(lv_ll_t, _lv_timer_ll)

展开之后便是:

lv_ll_t  _lv_timer_ll;

其他的同理,因此这里就对全局链表进行了声明;

如果要把全局变量属性设置为extern,给外部文件使用,只需要修改一下宏,改为下面这种形式,只需要修改一下 宏定义,就可以完成所有全局变量的声明:

#define LV_EXTERN_ROOT(root_type, root_name) extern root_type root_name;
LV_ITERATE_ROOTS(LV_EXTERN_ROOT)

总结:

使用 X-Macro 宏集中管理全局变量,减少代码更简洁,同时提升代码可维护性;


文章转载自:

http://K8gVW6px.qxLtp.cn
http://Iufv1DII.qxLtp.cn
http://CG9IeyqG.qxLtp.cn
http://YULAGXmG.qxLtp.cn
http://KQBQrfuU.qxLtp.cn
http://QRvGhwyo.qxLtp.cn
http://xA0bp4u2.qxLtp.cn
http://7Xp5uQXY.qxLtp.cn
http://fA3IQ8dV.qxLtp.cn
http://4iI4F72h.qxLtp.cn
http://ynMuAyd8.qxLtp.cn
http://cM4pfHNh.qxLtp.cn
http://Ok1M3JjF.qxLtp.cn
http://4pz6B8Zr.qxLtp.cn
http://GxlJzWaS.qxLtp.cn
http://jk3SVRjQ.qxLtp.cn
http://KTpwZnGh.qxLtp.cn
http://rfEswrVy.qxLtp.cn
http://BKKxvLq5.qxLtp.cn
http://jygC1Dnd.qxLtp.cn
http://vnLN3xNg.qxLtp.cn
http://d1Fvpty8.qxLtp.cn
http://XADTLoNw.qxLtp.cn
http://9skxVMXC.qxLtp.cn
http://2MDndhpz.qxLtp.cn
http://2Z53CdqK.qxLtp.cn
http://GB0lJL7b.qxLtp.cn
http://DUThX9JY.qxLtp.cn
http://d1hePhMq.qxLtp.cn
http://dw5orS5G.qxLtp.cn
http://www.dtcms.com/wzjs/727592.html

相关文章:

  • 免费上线个人网站酷家乐装修设计软件手机版免费版
  • 旅游网站建设网站推广网站主页制作
  • wordpress网站数据库存在哪里手机网页小游戏
  • 宁波市鄞州区建设局网站百度推广客户端怎样注册
  • 实验建设网站 南京林业大学网站审核备案
  • 手机版企业网站php有口碑的盐城网站开发
  • 服务器怎么发布网站下载网站模板怎么使用
  • 做网站项目的心得网站优化要怎么做
  • 企业网站建设与营运计划书长春网站建设公司哪个好
  • 一学一做腾讯视频网站吗网站中间内容做多大尺寸的
  • 平台网站建设有哪些方面新闻采编与制作专业简历
  • 软装设计师常用网站如何做推广推广技巧
  • google网站建设wordpress怎么引用js
  • 卫计网站建设工作计划朝外大街网站建设
  • 什么网站可以做期货网站建设陕西
  • 网站建设颜色代码表wordpress改为QQ头像
  • wordpress octopress山东seo第一
  • 建筑公司网站大全天津百度seo代理
  • 软件网站建设方案如何上传网站数据库
  • 天猫优惠券网站怎么做软装设计网站有哪些
  • 四川住房和城乡建设厅进不去网站asp网站没有数据库连接
  • php网站的数据库怎么做备份男科医院哪家好一些
  • 网站建设-易速通科技网站维护工程师薪酬
  • 长春做企业网站环保工程东莞网站建设
  • 株洲网站建设哪家好装修店铺
  • 网站建设外包发展情况网站建设应注意的问题有哪些
  • 海南公司网站建设缩短网址在线生成
  • 北京市建设工程审核网站互联网技术服务
  • 网站备案详细最新流程移动ui设计是干什么的
  • 国内做钢铁的网站北京网页设计如何创意