当前位置:首页>java>MCU编程9:在STM32F429上移植LVGL

MCU编程9:在STM32F429上移植LVGL

  • 2026-01-28 13:10:58
MCU编程9:在STM32F429上移植LVGL

通过前2篇的文章《MCU编程7:移植ST的LTDC官方例程驱动LCD显示器》和《MCU编程8:ST的LTDC结合SDRAM交替显示RGB三原色》,我们大概了解了STM32F429I-DISCO开发板上的TFT LCD的驱动方法。从这2篇文章我们可以知道,TFT LCD驱动的核心主要就是要配置好STM32的LTDC驱动,使其驱动时序和LCD显示器所需要的时序相匹配,同时分配一个帧缓存,该缓存保存LCD要显示的颜色数据,之后LTDC驱动器就会按照配置好的时序,周期地从帧缓存中读取数据,并发送给LCD显示器来显示对应的图像。
有了前面TFT LCD驱动的基础代码后,我们现在就可以开始移植开源的LVGL图像界面库的代码到我们的工程中了。这篇文章我们就来讲解LVGL代码的移植步骤。

1 LVGL源码下载

LVGL的官方网址是:LVGL。从官网上我们可以获取到LVGL的相关说明文档,也可以获取到源代码的下载链接。
LVGL的源代码的仓库地址是:LVGL repository
截至目前最新的release版本的下载地址是:LVGL Release v9.4.0
这篇文章就以目前最新的v9.4.0版本为例,介绍LVGL代码的移植步骤。我们先从上面LVGL Release v9.4.0地址下载对应的源代码。

2 LVGL源码目录结构

将下载下来的源码压缩包解压之后,LVGL源码的主要目录结构如下图所示。

其中src目录是LVGL源码的核心目录,包含了LVGL所有的功能部件代码。另外,根目录下的lv_conf_template.hlv_version.hlvgl.hlvgl_private.h文件也是后续移植所需要的文件。我们这次移植也只需要图中高亮显示的文件夹和文件即可,所以实际移植工作其实非常简单。

3 LVGL代码移植

LVGL的代码移植工作非常简单,我们只需要将第2节中提到的那些高亮文件拷贝到我们自己工程的对应目录下即可。
LVGL为第三方开源代码,所以我们在自己工程STM32F429I_PRJ的Middlewares目录下新建文件夹lvgl,用于放置LVGL的相关代码文件。
接着,我们将LVGL源码的src整个目录拷贝到我们新建的lvgl目录下,然后再将第2节中提到的lv_conf_template.hlv_version.hlvgl.hlvgl_private.h这4个文件也拷贝到我们新建的lvgl目录下。
lv_conf_template.h改名为lv_conf.h,然后打开该文件,将最开始的#if 0代码改成#if 1,使该文件下的代码生效。该文件用来配置LVGL的相关设置项,我们这次移植使用默认配置即可。
lv_version.h文件定义LVGL当前的版本号。
lvgl.h文件用于包含LVGL所需要的所有头文件。
lvgl_private.h文件用于包含LVGL所需要的所有私有头文件。
以上文件就是我们本次移植所需的所有文件了,接着我们开始编写LVGL的应用代码。

4 LVGL应用代码编写

LVGL应用代码编写我们可以直接参考前面下载的LVGL源代码根目录下的README.md文档中的使用说明,直接按照Integrating LVGL章节中的说明进行操作即可,集成操作也很简单。
我们先在lcd_func.h文件中包含lvgl.h文件,并定义LCD显示器的水平和垂直分辨率,之后声明函数vLvglCfg()用于对LVGL进行初始化。对应的代码示例如下。

#include"lvgl/lvgl.h"/*Define LV_LVGL_H_INCLUDE_SIMPLE to include as "lvgl.h"*/#define TFT_HOR_RES 240#define TFT_VER_RES 320voidvLvglCfg(void);

我们在lcd_func.c文件中实现上面提到的LVGL的初始化函数vLvglCfg(),具体的函数代码如下。

voidvLvglCfg(void){  /*Initialize LVGL*/  lv_init();  /*Set millisecond-based tick source for LVGL so that it can track time.*/  lv_tick_set_cb(HAL_GetTick);  /*Create a display where screens and widgets can be added*/  lv_display_t * display = lv_display_create(TFT_HOR_RES, TFT_VER_RES);  /*Add rendering buffers to the screen.    *Here adding a smaller partial buffer assuming 16-bit (RGB565 color format)*/  static uint8_t buf[TFT_HOR_RES * TFT_VER_RES / 10 * 2]; /* x2 because of 16-bit color depth */  lv_display_set_buffers(display, buf, NULLsizeof(buf), LV_DISPLAY_RENDER_MODE_PARTIAL);  /*Add a callback that can flush the content from `buf` when it has been rendered*/  lv_display_set_flush_cb(display, my_flush_cb);  /*Create an input device for touch handling*/  lv_indev_t * indev = lv_indev_create();  lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER);  lv_indev_set_read_cb(indev, my_touch_read_cb);  /*The drivers are in place; now we can create the UI*/#if 1  lv_obj_t * label = lv_label_create(lv_screen_active());  lv_label_set_text(label, "Hello world");  lv_obj_center(label);#elif 1  lv_obj_t * button = lv_button_create(lv_screen_active());  lv_obj_center(button);  lv_obj_add_event_cb(button, button_clicked_cb, LV_EVENT_CLICKED, NULL);  lv_obj_t * label = lv_label_create(button);  lv_label_set_text(label, "Hello from LVGL!");#elif 1  static lv_subject_t subject_value;  lv_subject_init_int(&subject_value, 35);  lv_subject_add_observer(&subject_value, my_observer_cb, NULL);  lv_style_t style_base;  lv_style_init(&style_base);  lv_style_set_bg_color(&style_base, lv_color_hex(0xff8800));  lv_style_set_bg_opa(&style_base, 255);  lv_style_set_radius(&style_base, 4);  lv_obj_t * slider = lv_slider_create(lv_screen_active());  lv_obj_center(slider);  lv_obj_set_size(slider, lv_pct(80), 16);  lv_obj_add_style(slider, &style_base, LV_PART_INDICATOR);  lv_obj_add_style(slider, &style_base, LV_PART_KNOB);  lv_obj_add_style(slider, &style_base, 0);  lv_obj_set_style_bg_opa(slider, LV_OPA_50, 0);  lv_obj_set_style_border_width(slider, 3, LV_PART_KNOB);  lv_obj_set_style_border_color(slider, lv_color_hex3(0xfff), LV_PART_KNOB);  lv_slider_bind_value(slider, &subject_value);  lv_obj_t * label = lv_label_create(lv_screen_active());  lv_obj_align(label, LV_ALIGN_CENTER, 0-30);  lv_label_bind_text(label, &subject_value, "Temperature: %d °C");#elif 1  /*Create a new screen and load it*/  lv_obj_t * scr = lv_obj_create(NULL);  lv_screen_load(scr);  /*Set a column layout*/  lv_obj_set_flex_flow(scr, LV_FLEX_FLOW_COLUMN);  lv_obj_set_flex_align(scr, LV_FLEX_ALIGN_SPACE_EVENLY, /*Vertical alignment*/                LV_FLEX_ALIGN_START,	       /*Horizontal alignment in the track*/                LV_FLEX_ALIGN_CENTER);      /*Horizontal alignment of the track*/  /*Create 5 checkboxes*/  const char * texts[5] = {"Input 1""Input 2""Input 3""Output 1""Output 2"};  for(int i = 0; i < 5; i++) {    lv_obj_t * cb = lv_checkbox_create(scr);    lv_checkbox_set_text(cb, texts[i]);  }  /*Change some states*/  lv_obj_add_state(lv_obj_get_child(scr, 1), LV_STATE_CHECKED);  lv_obj_add_state(lv_obj_get_child(scr, 3), LV_STATE_DISABLED);#endif}

上面代码涉及到一些回调函数的注册,需要我们实现对应的回调函数功能。
vLvglCfg()函数的第7行代码用于设置获取时钟心跳个数的回调函数,LVGL需要有个心跳时钟来实现显示和输入的处理功能。这里我们将回调函数设置成ST官方提供的获取系统时钟心跳数的函数HAL_GetTick()
vLvglCfg()函数的第18行代码用于设置LVGL图形渲染的回调函数,LVGL通过该回调函数将要更新的显示更新到帧缓存中,然后在LCD上显示出来。该回调函数需要我们自己实现,这里实现的渲染回调函数my_flush_cb()代码如下。

staticvoidmy_flush_cb(lv_display_t * disp, constlv_area_t * area, uint8_t * px_map){  /*Write px_map to the area->x1, area->x2, area->y1, area->y2 area of the    *frame buffer or external display controller. */  /*Return if the area is out the screen*/  if(area->x2 < 0return;  if(area->y2 < 0return;  if(area->x1 > TFT_HOR_RES - 1return;  if(area->y1 > TFT_VER_RES - 1return;  /*Truncate the area to the screen*/  int32_t act_x1 = area->x1 < 0 ? 0 : area->x1;  int32_t act_y1 = area->y1 < 0 ? 0 : area->y1;  int32_t act_x2 = area->x2 > TFT_HOR_RES - 1 ? TFT_HOR_RES - 1 : area->x2;  int32_t act_y2 = area->y2 > TFT_VER_RES - 1 ? TFT_VER_RES - 1 : area->y2;  int32_t pxDataIdx = 0;  for(int32_t r = act_y1; r <= act_y2; r++) {    for(int32_t c = act_x1; c <= act_x2; c++) {      my_fb[r * TFT_HOR_RES + c] = *((uint16_t*)px_map + pxDataIdx++);    }  }  lv_disp_flush_ready(disp);}

my_flush_cb()函数有3个参数,其中第一个参数disp为显示对象的指针,第2个参数area为要更新的显示区域,第3个参数px_map为要更新的显示区域对应的显示数据的起始地址指针。
my_flush_cb()函数第2个参数的结构体类型lv_area_t定义如下。该结构体类型定义了一个显示的矩形区域,其中(x1,y1)对应矩形的左上角的点,(x2,y2)对应矩形的右下角的点。如果我们把LCD的像素点阵看成行列表示的阵列的话,那水平的240个像素点对应240列,垂直的320个像素点对应320行,整个LCD可以看成是320行*240列的阵列。那lv_area_t的x1对应LCD行列阵列的起始列,x2对应终止列,y1对应行列阵列的起始行,y2对应终止行。

/** Represents an area of the screen.*/typedef struct {    int32_t x1;    int32_t y1;    int32_t x2;    int32_t y2;lv_area_t;

my_flush_cb()函数代码的第6-9行用于判断显示区域是否在LCD的显示范围内,如果超出显示范围,则直接退出。第12-15行将显示区域限制在有效范围内。第16-22行将LVGL传递过来的显示数据更新到LTDC驱动器的帧缓存my_fb中。需要注意的是,这里的显示颜色数据为16位,所以需要将px_map指针类型强制转换成uint16_t类型。另外,area区域实际只是对应帧缓存my_fb中的一块区域,所以我们需要找到该area区域在帧缓存my_fb中的对应位置,然后将数据复制进去,而第16-22行的代码就是实现这个映射并复制数据。第24行代码用于通知LVGL已经完成了将要更新区域的数据复制到帧缓存中了,可以继续后续的数据更新操作。

vLvglCfg()函数第23行代码用于设置读取输入设备的输入位置和输入状态的回调函数,我们这次主要要实现LVGL的显示,暂时不需要实现输入功能,所以我们将输入的位置坐标固定为(0,0),将输入状态设置为释放状态。输入回调函数my_touch_read_cb()的具体代码如下。

int32_tmy_touch_is_pressed(void){  return 0;}staticvoidmy_touch_read_cb(lv_indev_t * indev, lv_indev_data_t * data){  int32_t touchpad_x = 0, touchpad_y = 0;  if (my_touch_is_pressed())  {    data->point.x = touchpad_x;    data->point.y = touchpad_y;    data->state = LV_INDEV_STATE_PRESSED;  }  else  {    data->state = LV_INDEV_STATE_RELEASED;  }}

vLvglCfg()函数第14-15行代码用于设置LVGL的渲染缓存大小,这里设置了一个最小的渲染缓存。当LCD上有要更新的区域时,LVGL会将更新的显示数据存放在该缓存中,再通过前面的渲染回调函数my_flush_cb()将显示数据复制到LTDC的帧缓存中。
vLvglCfg()函数第26-
83行代码用于显示具体的控件,这里的代码复制了LVGL工程目录下README.md文件中的一些例程代码,用于验证移植的代码是否能正常显示例程中的控件。

最后,我们需要在main.c文件中修改一些代码,以实现LVGL的初始化操作,并让LVGL的显示功能正常运行。首先,我们需要在main()函数中调用vLvglCfg()函数,实现LVGL的初始化操作,并创建显示对象及要显示的控件。最后,在while(1)主循环中周期调用LVGL的定时器处理函数lv_timer_handler(),使LVGL的各个功能能够正常地执行起来。对应代码片段如下。

int main(void){  // ... 省略其他代码  vLvglCfg();  /* Infinite loop */  while (1)  {    endTick = HAL_GetTick();    // ... 省略其他代码    if(endTick - lvglTick >= 5) {      lvglTick = endTick;      lv_timer_handler();    }  }}

5 CMake配置修改

为了确保编译链接能够正常执行,需要对CMakeLists.txt进行修改,主要添加LVGL的头文件包含路径以及源代码路径。
LVGL的头文件包含路径添加比较简单,只需要在include_directories中添加以下的头文件路径即可。

    ${PROJECT_SOURCE_DIR}/../Middlewares    ${PROJECT_SOURCE_DIR}/../Middlewares/lvgl

由于LVGL的源码文件非常多,手动添加对应的路径效率很低,所以我们参照网上的方法,编写了python脚本来自动生成源代码的包含路径,然后将生成的路径复制到DRV_SRCS列表中即可。该python脚本代码我们放置在新建的Script目录下,对应代码文件为gen_dir.py。如需查看具体的代码,可以下载附录链接中的代码进行查看。

6 编译并执行代码

使用Ctrl+Shift+B的快捷键或者Terminal/Run Build Task...菜单执行代码的编译链接操作。
如果想了解详细的编译和运行操作,可以参考之前的文章《MCU编程3:使用VS Code+GCC+OpenOCD搭建MCU程序开发环境(下)》。
开发板通过USB线连接到电脑的USB口,这时开发板正常上电,按下F5快捷键或Run/Start Debugging菜单执行代码在线调试,VS Code会自动通过ST-Link将代码下载到开发板的MCU上,并暂停在main()函数的开始处,再次按下F5按键全速运行代码即可。
这里对LVGL工程目录下的README.md文件中提到的4个显示例程分别进行了测试,对应的执行结果如下。

7 附录

更新后的工程代码依然保存在gitee的以下路径。
https://gitee.com/goodrenze/STM32F429I_PRJ

8 参考链接

1. https://blog.csdn.net/m0_57585228/article/details/146442897

2. https://github.com/lvgl/lv_port_stm32f429_disco

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 22:32:30 HTTP/2.0 GET : https://f.mffb.com.cn/a/465140.html
  2. 运行时间 : 0.119383s [ 吞吐率:8.38req/s ] 内存消耗:4,473.21kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b7601afeb5de6a9d2f68f9d3dd3bea78
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000822s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001549s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.002774s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000701s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001357s ]
  6. SELECT * FROM `set` [ RunTime:0.000599s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001613s ]
  8. SELECT * FROM `article` WHERE `id` = 465140 LIMIT 1 [ RunTime:0.001001s ]
  9. UPDATE `article` SET `lasttime` = 1770561150 WHERE `id` = 465140 [ RunTime:0.002785s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000671s ]
  11. SELECT * FROM `article` WHERE `id` < 465140 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001204s ]
  12. SELECT * FROM `article` WHERE `id` > 465140 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.006428s ]
  13. SELECT * FROM `article` WHERE `id` < 465140 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001664s ]
  14. SELECT * FROM `article` WHERE `id` < 465140 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002419s ]
  15. SELECT * FROM `article` WHERE `id` < 465140 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.013591s ]
0.122074s