资讯详情

资讯详情

uCGUIBulider 4.0.0.0安装配置与白屏排查

简介uCGUIBulider4.0.0.0 是配合 uCGUI 轻量级图形库使用的界面构建工具主要面向在单片机等资源受限设备上开发图形界面的嵌入式工程师和初学者。它能通过拖放控件、设置属性来完成 UI 设计并自动生成代码从而减少底层绘图与布局的编码量。压缩包共有 430 个文件约 7.87MB。其中215 个 .h 头文件提供控件与核心库接口19 个 .lib 与 12 个 .dll 提供编译链接所需的库19 个 .exe 和 18 个 .bat 组成构建与仿真启动脚本此外还有 .c 源码、layout 布局文件、ico/bmp 图像素材及 txt 说明。已有 178 人学习下载。解压后可以查阅控件头文件定义与工程配置对照布局文件理解界面元素与生成代码的映射关系并借助脚本了解构建流程。适合用来熟悉 uCGUI 控件体系、定位编译链接层面的问题。1. 一次“装完就能用”的错觉上周有个做 Cortex-M 项目的开发者找我说 uCGUIBulider 4.0.0.0 装好了界面画完代码也生成了但烧到板子上只有一块白屏串口一行日志都没吐。我去看了他的机器工具装在D:\我的工具\新建文件夹 (2)\uCGUIBulider生成代码丢在桌面工程里引的是另一份旧版 GUI 库。这类问题几乎每周都能碰到一次uCGUIBulider 本身是个绿色小工具双击就能开但它生成的 C 代码必须和一整套 GUI 库源码、一份移植层、一个匹配的分辨率与色深配置对上号任何一环错位编译能过运行就是黑屏或者花屏。所以这篇不谈界面怎么拖控件只谈这套环境怎么装、怎么配、装坏了怎么救适合第一次在 ARM 平台上跑嵌入式 GUI 的人也适合换机器重装时想少走两步的人。2. 装前环境清单uCGUIBulider 4.0.0.0 到底吃什么资源装 GUI 设计器最容易犯的错是把它当成一个独立软件来装装完就以为完事了。它其实只是“画图 吐代码”的前半段真正跑起来还依赖后半段的 GUI 库源码和目标板工程。所以动手之前先把三样东西列清楚宿主机的运行环境、工具自己的落地目录、目标工程里已有的 GUI 库版本。这三样任何一样没对齐后面都会以“编译通过但现象不对”的形式返工。先说我一般会做的第一步把机器上所有可能干扰的东西看清楚。判断标准不复杂——系统是不是干净的 Win32 桌面环境、有没有装过别的版本的设计器、目标工程用的是哪一版 GUI 库。下面这张表是我自己重装前必过一遍的清单你会看到它比官方那句“支持 Windows”要细得多。检查项合格标准不合格的表现操作系统64 位 Windows 10 / 11桌面完整版精简版系统缺 MFC/VC 运行库双击没反应安装路径全英文、无空格、层级不超过三层路径含中文时资源文件读写偶发失败目标 GUI 库与设计器同代的库源码且工程已能编译库版本错代生成的 API 在库里找不到目标工程至少能点亮一个纯色背景库本身没跑通设计器问题会被误判显示参数分辨率、色深、字节序三项已确认画的时候正常上板颜色反了或偏移磁盘与权限装在非系统盘当前账号有写权限生成代码时提示只读实际是 UAC 虚拟化2.1 系统与运行库那三个“缺了就静默退出”的组件uCGUIBulider 4.0.0.0 是典型的桌面窗口程序启动阶段就要加载一整套图形界面相关的运行库。这类工具最常见的情况是在开发机上好好的拷到一台刚重装的测试机上双击图标鼠标转一圈什么都没发生任务管理器里进程一闪而过。这基本不是工具坏了是缺运行库而它不会弹窗告诉你缺哪个。我的处理顺序是固定的。先确认系统位数再补运行库最后才去碰工具本身。# 确认系统架构与版本避免在 32 位系统上装 64 位依赖 [System.Environment]::Is64BitOperatingSystem (Get-CimInstance Win32_OperatingSystem).Caption (Get-CimInstance Win32_OperatingSystem).Version # 查看是否已有常见的 VC 运行库列出版本号能看出装没装全 Get-ChildItem C:\Windows\System32 -Filter msvcp*.dll | Select-Object Name Get-ChildItem C:\Windows\System32 -Filter vcruntime*.dll | Select-Object Name第一段返回True才继续返回False说明是 32 位系统这类 GUI 设计器在 32 位系统上即便能启动生成大尺寸资源文件时也容易内存吃紧。第二段列出msvcp140.dll、vcruntime140.dll这类文件名缺哪个就补哪一代的运行库注意是“对应年份”的那一版不是装最新的就万事大吉——新版运行库不向后兼容旧程序的情况在这类老工具上很常见。提示不要用第三方“运行库合集包”一次性糊上去。我见过装完合集包之后系统里同时存在三套不同版本的 msvcp工具反而启动报错。缺什么补什么补完重启一次再试。2.2 目录规划路径里的中文和空格是隐形炸弹这一条值得单独拿出来说因为它是血泪经验。uCGUIBulider 在保存工程时会写一批相对路径引用包括图片资源、字体文件、生成的.c文件。如果安装路径里有中文或者空格工具本身能启动、能画界面但保存时偶尔会写出半截路径或者生成代码里带上一串被截断的目录名。这种问题不会当场报错要等编译的时候才炸而且报错信息指向的是生成代码很容易让人以为是工具生成能力有问题。我固定的目录约定是这样# 推荐的目录结构Windows 下用资源管理器建或用 PowerShell D:\ucgui\ ├── tool\ucguibuilder4000\ # 设计器本体路径全英文无空格 ├── sdk\ucgui_lib\ # GUI 库源码跟目标工程共用一份 ├── prj\demo_hmi\ # 设计器工程文件与资源 └── out\gen\ # 生成代码输出目录工程里直接引用四个目录分开的理由很实际工具升级或重装时只动tool不影响工程库源码放sdk且只保留一份避免工程里引用到两份不同版本out\gen单独出来是为了让生成代码可以被版本管理工具忽略或者单独提交不至于和手写代码混在一个目录里分不清谁是谁。路径层级控制在三层以内是因为部分老工具对过长路径的处理不稳超过 200 字符的文件名拼接在 Windows 上有概率失败。检查方法很简单把完整路径贴到 PowerShell 里量一下长度$p D:\ucgui\prj\demo_hmi\resource\background_image_1024x600.bmp $p.Length # 超过 200 就要考虑缩短目录名 $p -match [\u4e00-\u9fa5] # 返回 True 说明路径含中文必须改第二行返回True就立刻改别抱侥幸。我吃过一次亏工程在开发机上一切正常拷到另一台机器后生成的代码里图片路径全变成乱码查了两个小时才发现是那台机器的用户名是中文而工具把用户目录拼进了临时路径。从那以后我所有 GUI 相关工程都强制放在D:\ucgui这种短路径下。2.3 目标库版本先让裸库跑通再谈设计器这条是顺序问题但顺序错了代价最大。很多人是先装设计器、画好界面、生成代码然后才去工程里编译一编译几十个错误分不清是库没配好还是生成代码有问题。正确的顺序反过来先在目标板上跑通一个最小 GUI 程序能显示纯色背景或者一行文字确认库、移植层、显示驱动这一整条链路是通的再引入设计器生成的代码。最小验证程序不用复杂把库初始化、清屏、进主循环三步走完就行。这段代码不需要设计器参与纯手写作用是给后面所有问题划一条基线——只要这段能跑后面出问题就一定是设计器侧或者配置侧的问题。/* 最小 GUI 冒烟测试验证库、LCD 驱动、GUI_X 移植层是否打通 */ #include GUI.h int main(void) { /* 硬件与 LCD 初始化由板级代码完成此处只做库侧初始化 */ GUI_Init(); /* 用纯色铺满整屏颜色值按目标色深取16bpp 下 0x001F 为蓝色 */ GUI_SetBkColor(GUI_BLUE); GUI_Clear(); /* 写一行文字字体用库里自带的最小字体避免额外资源依赖 */ GUI_SetColor(GUI_WHITE); GUI_SetFont(GUI_FONT_6X8); GUI_DispStringAt(GUI OK, 10, 10); while (1) { GUI_Exec(); /* 处理重绘与消息缺这一句界面不会刷新 */ } }三个关键点GUI_Init()之前必须完成 LCD 控制器和时钟的初始化这一步在板级代码里不在库里面GUI_Clear()用的是背景色色深不对时显示的颜色会明显偏GUI_Exec()必须进主循环很多“界面卡住不刷新”的问题根源就是主循环里只写了while(1);。这段跑通之后再往下走心里就有底了。3. 安装 uCGUIBulider 4.0.0.0从解压到首次启动环境清完就可以动手装了。这个版本的安装过程本身不复杂但没有签名校验、没有自动依赖检测装错了也不会拦你所以每一步都要自己确认结果。我把它拆成三步落地、向导、首启绑定。3.1 解压与目录结构确认拿到安装包之后先别急着双击。第一步是解压到一个临时目录看清楚里面到底有什么这一步能提前发现压缩包不完整、被杀毒软件截断、或者混进了不该有的东西。# 解压到临时目录并核对文件清单 $src D:\download\ucguibuilder4000.zip $tmp D:\download\_unpack Expand-Archive -Path $src -DestinationPath $tmp -Force # 列出顶层目录与文件数量确认结构完整 Get-ChildItem $tmp | Select-Object Mode, Length, Name (Get-ChildItem $tmp -Recurse -File | Measure-Object).Count正常情况下应该看到安装程序、若干说明文件、以及可能的示例工程目录。如果顶层只有一个 exe说明是自解压包直接运行即可如果有setup.exe加一堆资源文件就运行安装程序。文件数量明显偏少比如只有两三个通常意味着解压中断重新下一遍比修更省时间。注意解压目录不要直接选在目标安装目录。安装程序本身会往目标目录写文件如果源和目标混在一起卸载时容易残留重装时新旧文件互相覆盖出现“装了新版但行为像旧版”的玄学问题。3.2 安装向导里的三个决策点安装向导本身没什么可说的点下一步就行但有三处需要手动改默认值不要照单全收。第一处是安装路径。默认路径一般会放到系统盘的Program Files下我建议改到D:\ucgui\tool\ucguibuilder4000。原因有两个系统盘路径含空格前面说过风险装在Program Files下时工具往自己目录写配置文件会触发 UAC 虚拟化配置实际写到了用户目录的虚拟存储里你以为改了配置重启之后又变回去了这个坑我踩过一次查了半天以为工具不保存设置。第二处是组件选择。向导里通常会把示例工程、文档、源码模板一起勾上。我的做法是全勾但装完之后把示例工程单独挪到D:\ucgui\prj\samples下面不让它待在安装目录里。理由是示例工程是我用来对照“正确配置长什么样”的参照物放在安装目录里下次重装工具就被覆盖掉了。第三处是文件关联和快捷方式。文件关联建议勾上工程文件双击能直接打开设计器省一步开始菜单快捷方式随意但桌面快捷方式我不建桌面上的快捷方式多了之后很容易点到旧版本的那个图标然后困惑“为什么新功能没有”。安装完成之后先别启动。用命令行核对一下落地结果# 确认安装目录下的关键可执行文件与配置目录都在 D:\ucgui\tool\ucguibuilder4000\ ├── ucguibuilder.exe # 主程序 ├── config\ # 全局配置重点看这个目录 ├── templates\ # 代码生成模板 └── samples\ # 示例工程装完可挪走config目录存在很关键。这类工具的运行期配置最近打开的工程、库路径、默认色深都落在这个目录里。后面配置出问题想回滚直接备份和还原这个目录就行比重装快得多。我一般装完第一件事就是把config复制一份成config.bak这就是后悔药。3.3 首次启动库路径绑定这一步不能跳第一次启动时工具会做初始化多数情况下会引导你指定 GUI 库源码的位置或者在设置里让你填。这一步很多人跳过觉得“我生成了代码自己拷过去就行”结果生成的代码里带的是绝对路径引用换台机器就编译不过。配置界面的字段名字各版本不太一样但需要填的东西就三类配置项填什么填错的后果库源码根目录D:\ucgui\sdk\ucgui_lib生成代码里 include 路径错误编译找不到头文件生成代码输出目录D:\ucgui\out\gen代码散落在安装目录重装即丢失默认色深与分辨率与目标屏一致如 16bpp / 800x480预览正常上板偏色或界面错位填完之后我建议立刻做一次“空工程生成”验证新建一个空白工程不画任何控件直接点生成然后去看输出目录里有没有产生文件、文件里的 include 路径是不是相对路径。这一步花两分钟能提前暴露路径配置错误比画了半天界面才发现生成不出来要划算得多。/* 生成代码头部通常长这样重点看 include 段是不是相对路径 */ #include GUI.h #include DIALOG.h #include WM.h /* 如果这里出现 D:\ucgui\... 这种绝对路径说明库路径没配对 */看到绝对路径就回去改配置别将就。绝对路径的代码在单人开发时没问题一旦进版本库、换机器、或者给别人编译就是必炸的雷。4. 配置工程把生成代码接进目标工程装完工具只是有了“生产代码的机器”真正让它产出能跑的东西是在工程侧把参数对齐。这一章的四组参数——分辨率、色深、移植层、编译宏——任何一组不一致现象都不是报错而是画面不对所以只能靠对照表逐项核对。4.1 分辨率与色深先在工具里定死再在库里对齐设计器里新建工程时第一件事就是填分辨率和色深。这两个值不是“参考值”是硬约束必须和LCDConf里的配置逐位一致。分辨率对不上的典型现象是界面只显示左上角一块或者右侧、底部有一条重复的图像。原因是库认为屏幕比实际小或大绘制时按库里的尺寸裁剪超出的部分要么丢弃要么回绕。色深对不上的现象更明显16bpp 的界面按 8bpp 解释颜色会整体发绿或发紫看起来像“显卡坏了”。我一般按下面这个顺序对齐先改库再改工具/* LCDConf.h 片段这三个宏必须和设计器工程设置完全一致 */ #define LCD_XSIZE 800 /* 水平分辨率与设计器工程宽度一致 */ #define LCD_YSIZE 480 /* 垂直分辨率与设计器工程高度一致 */ #define LCD_BITSPERPIXEL 16 /* 色深与设计器工程色深一致 */ /* 色深不匹配时最典型的后果颜色通道错位 */ /* 16bpp 常见为 RGB565若目标屏是 BGR 排列需在此处额外做通道交换 */三个宏改完还要检查颜色格式。同样是 16bpp有的是 RGB565有的是 BGR565工具预览用的是标准 RGB目标屏如果是 BGR 排列画出来红蓝互换。这个不是设计器的问题是移植层要处理的事通常在LCDConf.c的像素写入函数里做一次交换或者在初始化时下发一条屏幕命令切换排列顺序。判断方法很简单画一个纯红矩形上板显示成蓝色就是通道顺序反了。4.2 生成代码的目录结构与工程引用生成代码一般包含三类文件界面资源描述、界面逻辑代码、以及一个把界面挂到窗口管理器上的入口。这些文件不要直接扔进工程根目录我按下面的结构放D:\ucgui\out\gen\ ├── inc\ # 生成的头文件工程 include 路径加这一条 ├── src\ # 生成的 .c 文件加入工程参与编译 └── res\ # 图片、字体等二进制资源烧录时放外部存储或转成数组工程侧要做三件事把inc加进头文件搜索路径把src下的.c全部加入编译列表如果资源是外部文件形式确认它们被正确打包进烧录镜像。第三件事最容易漏现象是界面框架出来了但图片位置是空的或者花屏因为读资源时地址越界或者文件根本没烧进去。资源这块我一般直接转成 C 数组编进固件虽然占 flash但省掉文件系统和地址对齐的一堆麻烦。转换之后记得同步更新生成代码里的资源引用方式否则代码还在按文件名找资源编译能过运行找不到。4.3 编译宏与移植层三个必须自己补的函数库要跑起来除了显示驱动还需要几个平台相关的底层函数通常被称作移植层。设计器不生成这部分它假定你已经有了。这三个函数不补链接阶段就会报未定义符号。/* GUI_X.c 移植层骨架时基、延时、临界区三个必补 */ #include GUI.h /* 1. 时基返回毫秒计数GUI 的动画、超时、闪烁全靠它 */ int GUI_X_GetTime(void) { return (int)bsp_get_tick_ms(); /* 对接板级毫秒 tick */ } /* 2. 延时部分控件做动画时会调用实现成忙等或系统延时均可 */ void GUI_X_Delay(int Period) { bsp_delay_ms(Period); } /* 3. 临界区单线程环境可留空但不要直接删多任务下必须实现 */ void GUI_X_Init(void) { /* 若使用 RTOS此处创建互斥量供 GUI_Lock/GUI_Unlock 使用 */ }三个函数的语义要清楚GUI_X_GetTime必须是单调递增的毫秒数不能受系统时间调整影响否则动画会跳GUI_X_Delay单位是毫秒实现成 CPU 空转会让低功耗场景功耗飙升一般对接系统延时GUI_X_Init在单线程裸机环境下可以空实现但如果工程里挂了 RTOS 且多个任务都会调 GUI 接口就必须在这里建互斥量否则偶发花屏——这类问题最难查因为复现概率低看起来像玄学。编译宏方面常见需要确认的是是否启用窗口管理器、是否启用内存设备、字体与图片的解码支持。启用窗口管理器是使用设计器生成代码的前提因为生成的多窗口界面依赖它管理层级和重绘内存设备能显著减少闪烁但会多吃一块 RAMRAM 紧张的板子上要算清楚再开。5. 常见问题排查装完打不开、生成代码编译不过的五个坑下面五条是我这些年重复遇到次数最多的按“现象 → 原因 → 解决”记遇到问题可以先在这里对一遍多数情况能直接定位。第一条双击图标没反应任务管理器里进程一闪而过。原因基本是缺运行库或者安装目录被杀软隔离了某个 DLL。这类工具启动时不弹错误框静默退出。解决方式是先用前面给的 PowerShell 命令查msvcp、vcruntime系列文件缺哪代补哪代补完还不行去杀软的隔离区看一眼把被隔离的文件恢复并加白名单。还有一种少见情况工具装在含中文的路径下启动时读配置失败直接退出改路径即可。第二条能启动但一保存工程就提示写入失败。多半是装在了Program Files下写配置时被 UAC 虚拟化拦了实际写到了用户目录的虚拟存储里。现象很迷惑这次保存成功重启工具后配置又变回去了。解决办法是把整个安装目录挪到非系统盘重新安装一遍更省事挪完记得把config目录的权限确认一下当前账号要有完全控制权。第三条生成代码编译报错说找不到DIALOG.h或者某个函数未定义。两个方向查。一是头文件搜索路径没加out\gen\inc编译时找不到生成的头文件二是库里根本没有窗口管理器模块工程里只加了核心绘图部分。后者的特征是报错集中在WM_、DIALOG_开头的符号上这时候要把库里的窗口管理器和对话框模块的源文件补进工程。还有一种情况是库版本比设计器老一代生成的代码用了新 API那就只能换库没有别的办法。第四条编译链接都过烧录后白屏串口无输出。先确认程序到底跑没跑起来——在main开头翻转一个 GPIO 或者打一行串口日志。如果连这行都没有问题在启动文件、时钟或者链接脚本跟 GUI 无关。如果日志有但GUI_Init()之后就没了重点查LCDConf里的初始化序列和分辨率配置分辨率配大了会导致显存越界有些平台直接触发硬件异常。我遇到过一次是LCD_XSIZE填成了 1024 而实际屏是 800库按 1024 分配显存写越界踩到了别的变量。第五条界面能显示但按钮点了没反应或者界面不刷新。两个常见原因。一是主循环里只调了GUI_Exec()但没有把触摸或按键事件喂给窗口管理器控件的回调永远不会触发二是GUI_X_GetTime返回的时间没有递增导致内部的超时和动画机制全乱。检查方法很直接在主循环里加一行计数打印确认GUI_Exec()真的在被周期调用再单独打一下GUI_X_GetTime()的返回值看它是不是在涨。这两行日志能排掉八成“界面卡死”的报障。提示这五条里第三条和第四条最容易互相误判。判断分界线是“编译期还是运行期”——编译期报错一律往路径和库模块上找运行期异常一律先确认裸库能跑通。6. 验证跑通从白屏到第一个能点的按钮装完配完最后一步是验证而且验证要分层做一层不过就不要往下一层走否则问题会叠在一起最后变成黑匣子。我固定走四层库层、显示层、界面层、交互层。第一层库层跑前面那段最小冒烟程序屏幕能变蓝、能显示 “GUI OK”说明库、驱动、移植层这条链路通了。这一层不过后面所有工作都是白费。第二层显示层在设计器里画一个纯色矩形加一行文字生成代码编译烧录。这一层验证的是生成代码能被工程正确引用以及分辨率和色深是否对齐。判断标准很直观矩形的位置和尺寸跟设计器里一致文字不糊、颜色不偏。位置偏了查分辨率颜色偏了查色深和通道顺序。第三层界面层画一个带标题栏和背景图的对话框验证资源加载和窗口层级。这一层容易暴露资源打包问题——图片位置空白或者花屏基本就是资源没烧进去或者地址算错了。第四层交互层放一个按钮回调里翻转一个标志位并在屏幕上打印计数。这一层验证事件能不能从触摸或按键一路传到控件回调。代码大概长这样/* 按钮回调验证事件链路是否打通同时用计数确认不是只触发一次 */ static int s_click_cnt 0; static void _cbButton(WM_MESSAGE *pMsg) { switch (pMsg-MsgId) { case WM_PI_CLICKED: /* 触摸/按键产生的点击消息 */ s_click_cnt; GUI_SetColor(GUI_WHITE); GUI_DispDecAt(s_click_cnt, 200, 200, 4); /* 屏上直接看计数 */ break; default: WM_DefaultProc(pMsg); /* 不处理的消息必须交回默认过程 */ break; } }两个细节值得说WM_DefaultProc那一行不能省否则控件的绘制、焦点管理都会失效表现是按钮画不出来但能点计数用屏上打印而不是串口是为了排除串口本身的问题干扰判断。点十下屏上数字从 1 涨到 10说明事件、重绘、时间基三条链路全部正常。四层都过完之后我还会做一次“换机复现”把整个D:\ucgui目录打包拷到另一台干净机器上解压后直接编译烧录。这一步专门用来抓绝对路径和隐式依赖能过这一关才算真的装好了。这个习惯是被坑出来的。早期我图快装完画个界面能显示就收工结果换机器、换同事接手、或者隔三个月重装系统总要再花半天重新排一遍。从那以后我每次装 GUI 环境都强制走一遍“四层验证 换机复现”宁可多花一小时也不给以后留隐患。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →