硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8473|回复: 41
收起左侧

[ThreadX全家桶] ThreadX GUIX直驱方案搞定,任何显示屏,低资源的MCU都可以跑了,不再需要画布,附工程下载

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
发表于 2021-6-4 07:48:27 | 显示全部楼层 |阅读模式
说明:
1、有了这个方案,各种低配,低资源的小MCU都可以跑了,并且可以跑GUIX Studio生成的代码。生成的时候不要选择静态画布。
2、当前还有点小瑕疵,后面有时间了继续优化,刷圆环控件,这个控件可以看到撕裂感,这个有待优化。需要官方提供个toggle接口函数的直驱方案或者可以变相实现的方案,否则刷16bpp之类的颜色图无法发挥最高性能。

案例下载:

基于我们V5的STM32F407开发板配RA8875

V5-2001_ThreadX GUIX 的RGB565格式模板(支持MDK,IAR和GCC ).7z (2.49 MB, 下载次数: 752)

评分

参与人数 1金币 +20 收起 理由
mangge2020 + 20

查看全部评分

回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2021-6-4 09:02:21 | 显示全部楼层

666
代码不规范,亲人两行泪!
回复

使用道具 举报

3

主题

90

回帖

99

积分

初级会员

积分
99
发表于 2021-6-4 09:41:13 | 显示全部楼层
官方原文链接:http://lodev.org/lodepng/
LodePNG是一个集合了PNG图像解码器和编码器的代码文件,不依赖于诸如zlib和libpng的外部链接/库,提供方便友好的PNG编解码器调用方法。LodePNG主要是采用C(ISO C90)编写的,并提供了C++的接口。LodePNG的使用非常简单,只要在项目文件中包含lodepng.cpp和lodepng.h或者lodepng.c和lodepng.h就可以。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2021-6-4 09:47:45 | 显示全部楼层
lib钱 发表于 2021-6-4 09:41
官方原文链接:http://lodev.org/lodepng/
LodePNG是一个集合了PNG图像解码器和编码器的代码文件,不依赖 ...

这个相比libpng有啥优势
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2021-6-4 09:51:30 | 显示全部楼层
非常好!非常好!非常好!非常好!
回复

使用道具 举报

15

主题

87

回帖

132

积分

初级会员

积分
132
发表于 2021-6-4 09:59:26 | 显示全部楼层
我的也画出图来了,画图速度超级慢,5个英文,要差不多一秒钟,明显看到一个字一个显示出来,先能显示再说,后面再改驱动
回复

使用道具 举报

3

主题

90

回帖

99

积分

初级会员

积分
99
发表于 2021-6-4 10:00:13 | 显示全部楼层
eric2013 发表于 2021-6-4 09:47
这个相比libpng有啥优势

硬汉哥,我现在遇到个问题。
TFT屏(和H7-TOOL开发工具的屏一样),图片数量比较多,如果直接用LCD取模软件做数组;
存到MCU的内部flash中,占用空间大;

请问你,能不能把jpg或者png的图片存到flash中,节省flash空间;

mcu的flash=512K,RAM=256K;图片最大240*240;

解压图片文件,需要多少RAM,多少时间;

我这样想有没有意义?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2021-6-4 10:04:57 | 显示全部楼层
yuntian 发表于 2021-6-4 09:59
我的也画出图来了,画图速度超级慢,5个英文,要差不多一秒钟,明显看到一个字一个显示出来,先能显示再说 ...

我这个快,做了2D加速。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2021-6-4 10:07:44 | 显示全部楼层
lib钱 发表于 2021-6-4 10:00
硬汉哥,我现在遇到个问题。
TFT屏(和H7-TOOL开发工具的屏一样),图片数量比较多,如果直接用LCD取模 ...

1、PNG解码慢,不适合实时展示,如果采用类似emWin,GUIX那种绘制到存储设备的方式,是可以的。
2、需要快速展示还是推荐MCU+QSPI Flash的内存映射模式,速度快捷方便。
回复

使用道具 举报

3

主题

90

回帖

99

积分

初级会员

积分
99
发表于 2021-6-4 10:08:58 | 显示全部楼层
eric2013 发表于 2021-6-4 10:07
1、PNG解码慢,不适合实时展示,如果采用类似emWin,GUIX那种绘制到存储设备的方式,是可以的。
2、需要 ...

谢谢你的回复
回复

使用道具 举报

15

主题

87

回帖

132

积分

初级会员

积分
132
发表于 2021-6-4 10:19:50 | 显示全部楼层
esp32 lvgl 驱动起来都可以打游戏,还是spi的,240MHz 主屏
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2021-6-4 10:25:30 | 显示全部楼层
yuntian 发表于 2021-6-4 10:19
esp32 lvgl 驱动起来都可以打游戏,还是spi的,240MHz 主屏

刷个游戏不是轻轻松松,F1刷SPI屏跑游戏都飞起了。

只有刷DOOM驱动电脑显示屏需要比较高的性能。

我这里很流畅啊,还是800*480分辨率的,168MHz主频。
回复

使用道具 举报

15

主题

87

回帖

132

积分

初级会员

积分
132
发表于 2021-6-4 14:46:30 | 显示全部楼层

void stm324xg_16bpp_pixel_direct_blend(GX_DRAW_CONTEXT *context,
    INT x, INT y, GX_COLOR fcolor, UCHAR alpha)
{
   
    UCHAR fred, fgreen, fblue;
    UCHAR bred, bgreen, bblue;
    UCHAR balpha;

    GX_COLOR bcolor;
    GX_COLOR *put;

    if (alpha > 0)
    {
        fred = REDVAL(fcolor);
        fgreen = GREENVAL(fcolor);
        fblue = BLUEVAL(fcolor);
      
      lcd_write_reg(0x2A);   //内联 inline
      lcd_write_dat(x >> 8);
      lcd_write_dat(x);
      lcd_write_dat(x >> 8);
      lcd_write_dat(x);
      
      lcd_write_reg(0x2b);
      lcd_write_dat(y >> 8);
      lcd_write_dat(y);
      lcd_write_dat(y >> 8);
      lcd_write_dat(y);
      

        bcolor = lcd_read_dat();//(x ,y);
        //LCD_SetCursor(x, y);
        
        //bcolor = LCD_ReadRAM();
        
        bred = REDVAL(bcolor);
        bgreen = GREENVAL(bcolor);
        bblue = BLUEVAL(bcolor);

        balpha = 256 - alpha;

        fred = ((bred * balpha) + (fred * alpha)) >> 8;
        fgreen = ((bgreen * balpha) + (fgreen * alpha)) >> 8;
        fblue = ((bblue * balpha) + (fblue * alpha)) >> 8;
        
        //LCD_WriteRAM_Prepare();
        lcd_write_dat(ASSEMBLECOLOR(fred, fgreen, fblue));
    }

}



这样改造一下,刷屏快了很多,
还要继续改造
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-6-4 16:02:33 | 显示全部楼层
      
回复

使用道具 举报

5

主题

519

回帖

534

积分

金牌会员

积分
534
发表于 2021-6-4 16:45:56 | 显示全部楼层
103使用GUIX的春天来了。。。。。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2021-6-5 08:56:24 | 显示全部楼层
hqgboy 发表于 2021-6-4 16:45
103使用GUIX的春天来了。。。。。。。

可以搞起来了。
回复

使用道具 举报

6

主题

636

回帖

654

积分

金牌会员

积分
654
QQ
发表于 2021-6-7 20:55:44 | 显示全部楼层
大佬 牛逼plus
回复

使用道具 举报

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-6-9 23:03:20 | 显示全部楼层
100K左右片上内存也能用吗?下载了你的案例看不懂啊.大神能否出个教程?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2021-6-10 08:50:06 | 显示全部楼层
jiaoxiake 发表于 2021-6-9 23:03
100K左右片上内存也能用吗?下载了你的案例看不懂啊.大神能否出个教程?

可以的,后面会更新到教程中。
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2022-7-30 18:30:29 | 显示全部楼层
yuntian 发表于 2021-6-4 14:46
void stm324xg_16bpp_pixel_direct_blend(GX_DRAW_CONTEXT *context,
    INT x, INT y, GX_COLOR fcolo ...

可以帮忙做一个stm32H7平台的模板吗
回复

使用道具 举报

29

主题

231

回帖

318

积分

高级会员

积分
318
发表于 2022-8-1 08:23:58 | 显示全部楼层
国产芯片也能用吗?
回复

使用道具 举报

11

主题

122

回帖

160

积分

初级会员

积分
160
发表于 2022-8-1 09:54:09 | 显示全部楼层
做过类似的尝试,应该还有一个回调函数需要重写,display->gx_display_driver_simple_line_draw
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2022-8-1 10:45:04 | 显示全部楼层
guoxiang 发表于 2022-8-1 08:23
国产芯片也能用吗?

能,开源有源码的。可以移植。
回复

使用道具 举报

29

主题

231

回帖

318

积分

高级会员

积分
318
发表于 2022-8-1 17:25:05 | 显示全部楼层
eric2013 发表于 2022-8-1 10:45
能,开源有源码的。可以移植。

GUIX不是没有授权给国产芯片吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2022-8-3 09:53:15 | 显示全部楼层
guoxiang 发表于 2022-8-1 17:25
GUIX不是没有授权给国产芯片吧

对,国产的不行,没授权。
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
发表于 2022-8-28 08:01:27 | 显示全部楼层
画布 是什么意思?
回复

使用道具 举报

2

主题

63

回帖

69

积分

初级会员

积分
69
发表于 2022-9-1 17:08:04 | 显示全部楼层
移植到别的MCU时直接替换掉GUIX/source文件夹就行了?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2022-9-2 11:34:30 | 显示全部楼层
zhengwending 发表于 2022-8-28 08:01
画布 是什么意思?

就跟显存差不多。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2022-9-2 11:45:36 | 显示全部楼层
banzhangzzw 发表于 2022-9-1 17:08
移植到别的MCU时直接替换掉GUIX/source文件夹就行了?

仅替换这个不行,最好先做个模板,然后移植修改就方便很多了。
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
发表于 2023-1-29 17:19:12 | 显示全部楼层
eric2013 发表于 2022-8-1 10:45
能,开源有源码的。可以移植。

请问一下,商用收费吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2023-1-29 18:01:05 | 显示全部楼层
luy3728000 发表于 2023-1-29 17:19
请问一下,商用收费吗?

当前如下厂家免费商用

[C] 纯文本查看 复制代码
LICENSED HARDWARE LIST

Last Updated: 2021-04-01

Microsoft has entered into OEM Agreements with manufacturers of the following
microprocessors and microcontrollers (the “hardware”) to enable those
manufacturers to include and distribute Azure RTOS in certain hardware. If you
have obtained and/or are developing on microprocessor(s) and/or
microcontroller(s) (“hardware”) listed below you inherit the “Distribution and
Production Use” rights in Section 2 of the Microsoft Software License Terms for
Microsoft Azure RTOS. If hardware is not listed below, you do not have those
rights.


STMicroelectronics:

    STM32 MCUs
    STM32 MPUs

MediaTek:

    MT3620 MCU (Azure Sphere)

Microchip:

    PIC 32-bit MCUs
    SAM 32-bit MCUs
    SAM 32-bit MPUs

NXP:

    i.MX RT10xx and RT116x/7x series crossover MCUs
    LPC5500 series


Renesas:

    Synergy Platform
    RX Family of MCUs
    RA Family of MCUs
    RZ Family of MPUs

--------------------------------------------------------------------------------

More coming soon. Please check back frequently for updates.
回复

使用道具 举报

23

主题

34

回帖

103

积分

初级会员

积分
103
发表于 2023-1-31 11:13:15 | 显示全部楼层
捕获.PNG


捕获1.PNG


硬汉大哥,ThreadX GUIX直驱方案中,对于小内存的MCU,如何设置Canvas地址地址呢,对于ILI9488,SPI LCD屏,Canvas_Memory最少要多大合适?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2023-1-31 11:31:45 | 显示全部楼层
xxs65 发表于 2023-1-31 11:13
硬汉大哥,ThreadX GUIX直驱方案中,对于小内存的MCU,如何设置Canvas地址地址呢,对于ILI9488 ...

这个例子没有使用外部的,用的是内部定义的内存,开了20KB.

#define         GUI_NUMBYTES     20*1024  
uint8_t       MemoryBlock[GUI_NUMBYTES];/* 动态内存地址    */
回复

使用道具 举报

23

主题

34

回帖

103

积分

初级会员

积分
103
发表于 2023-1-31 12:09:40 | 显示全部楼层
eric2013 发表于 2023-1-31 11:31
这个例子没有使用外部的,用的是内部定义的内存,开了20KB.

#define         GUI_NUMBYTES     20*1024  

/*
*********************************************************************************************************
*        函 数 名: stm32f4_graphics_driver_setup_565rgb
*        功能说明: 驱动接口函数
*        形    参: ---
*        返 回 值: GX_SUCCESS
*********************************************************************************************************
*/

UINT stm32f4_graphics_driver_setup_565rgb(GX_DISPLAY *display)
{

        _gx_display_driver_565rgb_setup(display, (VOID*)STM32_SCREEN_HANDLE, stm324xg_16bpp_buffer_toggle);
       
       
        display -> gx_display_driver_horizontal_line_draw = stm324xg_16bpp_horizontal_line_direct_draw;
    display -> gx_display_driver_vertical_line_draw = stm324xg_16bpp_vertical_line_direct_draw;

    display -> gx_display_driver_pixel_write = stm324xg_16bpp_pixel_direct_write;
    display -> gx_display_driver_pixel_blend = stm324xg_16bpp_pixel_direct_blend;
//  display -> gx_display_driver_buffer_toggle = stm324xg_16bpp_buffer_toggle;

    display -> gx_display_handle =    STM32_SCREEN_HANDLE;

    return(GX_SUCCESS);
}


这个函数用到了这个宏 ,有点不明白。    #define STM32_SCREEN_HANDLE   0x68000000
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2023-1-31 12:28:33 | 显示全部楼层
xxs65 发表于 2023-1-31 12:09
/*
********************************************************************************************** ...

这个是个句柄ID区分,可以随意定义。
回复

使用道具 举报

23

主题

34

回帖

103

积分

初级会员

积分
103
发表于 2023-1-31 12:57:53 | 显示全部楼层
eric2013 发表于 2023-1-31 12:28
这个是个句柄ID区分,可以随意定义。

谢谢硬汉大哥指导
回复

使用道具 举报

20

主题

30

回帖

90

积分

初级会员

积分
90
发表于 2023-1-31 19:26:50 | 显示全部楼层
eric2013 发表于 2023-1-31 11:31
这个例子没有使用外部的,用的是内部定义的内存,开了20KB.

#define         GUI_NUMBYTES     20*1024  

请教一下,我直驱方式画线没问题,显示文字和图画不行,不知道为何?移植了gx_display_driver_pixel_write
gx_display_driver_horizontal_line_draw, gx_display_driver_vertical_line_draw 这几个函数。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2023-3-24 15:49:49 | 显示全部楼层
版主你好,这个例程请问用哪个版本的MDK编译?我的是MDK5.25 V6.9的,编译出很多错误
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106725
QQ
 楼主| 发表于 2023-3-24 19:10:42 | 显示全部楼层
wacos 发表于 2023-3-24 15:49
版主你好,这个例程请问用哪个版本的MDK编译?我的是MDK5.25 V6.9的,编译出很多错误

要用MDK5.3X编译。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2023-3-25 09:50:25 | 显示全部楼层
eric2013 发表于 2023-3-24 19:10
要用MDK5.3X编译。

感谢,已经编译成功了,非常感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 09:33 , Processed in 0.336593 second(s), 40 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表