tzz1983 发表于 2024-3-14 11:16:19

uGFX/GUI @STC32G 移植成功了 !

接下来准备出两个版本, @STC32G裸机 + uGFX,
                                    @STC32G-uCOSII + uGFX.
=== 不是说uGFX不支持uCOSII吗? 祼机能支持=啥O/S都能支持!

目前已验证部分内置字体, 简单画几何图形。
实验屏幕LCD为KS0108控制器的 LCD128*64,
虽然这个屏有点LOW, 但耐用,重要的是不用花钱,自己手上有
奉上效果图:

@STC32G裸机 + uGFX2.9,
@STC32G-uCOSII + uGFX2.9.
资料整理中,耐心等待几天,详细的移植过程和代码整理好后一起发出。





tzz1983 发表于 2024-3-14 20:53:13


STC32G 移植最新版uGFX2.9 详细过程

1. 官网下载文档,uGFX2.9解压后,放在项目文件下,添加两个文件:
\ugfx_2.9\src\gfx_mk.c
\ugfx_2.9\drivers\gdisp\KS0108\gdisp_lld_KS0108.c(跟据使用屏的控制器来选择)

2. uGFX提供了配制文件范例文件 \ugfx_2.9\gfxconf.example.h ,将其更名为 gfxconf.h备用,等会就用这个配制文件.

3. uGFX提供了LCD硬件接口范例文件 \ugfx_2.9\drivers\gdisp\KS0108\board_KS0108_example.h
(跟据使用屏的控制器来选择) 将其更名为board_KS0108.h,备用。

4. 以上提到的三个目录在项目中添加头文件搜索目录,避免编译器找不到头文件报错。

5. 需改写 board_KS0108.h, 提供LCD底层驱动接口。本例中真正用到的函数只有4个,用不到的可删除。详情查看代码文件。
提示:大多数的屏控制器,uGFX都有提供一个接口范例,比如本例中的 board_KS0108_example.h ,
范本中的代码虽然不能适应你的硬件,但是思路表达的很清楚。按范本的思路去做自己的接口。

6. 跟据需求修改配制文件 gfxconf.h。配制选项比较多, 三言两语难以说明白,官网:http://wiki.ugfx.io自行脑补。

7. 终于可以编译了, 一百多个error,几百个warning。有点夸张!

大部分时间都在处理编译error和warning。

罗列一部分编译报错及处理:

以下语句缺少分号,估计是故意,为了让移植者确认类型正确性性,加分号即可.

typedef signed   short                gI16
typedef unsigned short      gU16
typedef signed   short                gI16
typedef unsigned short      gU16

多处重复定义了数据类型,比如:
typedef gU8                   uint8_t;
typedef unsigned char   uint8_t;
保留一处即可

error C318: can't open file <stdbool.h>无法打开这个文件,定义两个宏替代
#define      true      1
#define      false      0

关键字与变量名冲突:
    data、bool、bit,code, sbit, 等的变量命名与KeilC251编译器关键字冲突,因此data替换为_data_ ........逐个替换

error C25: 如下所示,不知为何源码中多了一个逗号,删除逗号即可。
GFXINLINE void KS0108_goto(GDisplay* g, )

关键字inline:KeilC251对inline的支持不好,头文件 gfxconf.h中可以配制不使用inline,但仍消除的不够彻底,遇这种情况,定位到文档,手动删除.

编译报警的处理:

warning C2   不适用编译器的预处理直接注销
warning C138更改书写格式 如 (void)xxx;更改后 if(xxx);
warning C46: storage class 'register' ignored删除register关键字
warning C188: 跟据调用类型增加强制转换
warning C30: 解决方法:去除一个const关键字。

最后:uGFX是可裁剪的,当打开新的模块时,可能出现新的 error warning,无法一一列举,如果遇到可自行分析和处理。

项目代码放在1楼










tzz1983 发表于 2024-3-15 08:51:08

STC32G 移植uGFX补充几点使用注意:

项目中需要加START251.A51把edata区初始化为0, 因为uFGX定义的全局变量没有自己初始化。

uGFX本身没有uCOS-II的选项支持。uCOSII的uGFX是用的祼机实现选项。
如果只在一个任务中操作uGFX,则和祼机使用方法无异。
如果要在多个任务中操作uGFX,需要把uGFX当作互斥资源来使用,即同一时刻只一个任务操作屏。
或者直接使用守护任务,把所有屏操作汇集到一个任务,集中处理

神农鼎 发表于 2024-3-16 23:58:44

荣誉版主 威武 !!!

ageway 发表于 2024-3-18 08:44:12

{:4_250:}{:4_250:}{:4_250:}{:4_250:}

xxxevery 发表于 2024-3-18 11:28:27

期待成功

jwd 发表于 2024-3-18 13:00:10

{:4_174:}{:4_174:}

飞龙在天 发表于 2024-3-19 10:23:10

楼主辛苦!!!!!!!

lmyyjx 发表于 2024-4-29 14:30:57

ST7920控制器用哪个

lmyyjx 发表于 2024-5-3 12:23:20


ST7920参考它吗
页: 1 2 [3] 4 5 6
查看完整版本: 【uGFX/GUI + uC/OS-II】 @32G系列;uGFX/GUI@32G系列裸机