382383706 发表于 2011-3-15 18:18:08

一款机器显示方案(用于工业上的)大家帮忙用什么方案?这个能用RT_THREAD系统实现吗?

要求:
液晶屏:5~7寸 TFT 65536色
sd卡:存储机器运行数据
usb:usb client
Ethernet:通过远程监控
rs485:2个(用modbus协议,一个主机,一个从机)

382383706 发表于 2011-3-16 09:37:57

有没有提个建议的

itspy 发表于 2011-3-17 16:43:35

建议用

ffxz 发表于 2011-3-18 08:11:48

你没说硬件平台,或者说你也希望让别人推荐个硬件平台?

GUI上,RT-Thread/GUI的开发人员之一,禾兰豆,已经把RT-Thread/GUI用于大屏显示的产品。

382383706 发表于 2011-3-18 11:39:52

我现在只提出功能要求,硬件平台没定

waterx3 发表于 2011-3-18 11:45:03

回复【3楼】ffxz
你没说硬件平台,或者说你也希望让别人推荐个硬件平台?
gui上,rt-thread/gui的开发人员之一,禾兰豆,已经把rt-thread/gui用于大屏显示的产品。
-----------------------------------------------------------------------

能给我们展示一下吗?看看效果就成啊。

ljt8015 发表于 2011-3-18 13:52:20

看看效果!~

amsl 发表于 2011-3-18 20:28:36

很久没上ID了。
目前的RTGUI在小屏幕上更有优势,主要是设置之初没有考虑大屏幕的场合。
以后RTGUI会考虑出个大屏幕的版本吧,这个版本尽量使用PC上编程的特性,
这样会大大提高开发效率。下面我贴出在800*600的屏幕上使用RTGUI的效果。
首先要写一个抓屏函数,来抓屏。


#ifdef RT_USING_FINSH
#include <finsh.h>

void print_screen(char *name)
{/* 抓取屏幕,保存为HDC格式 */       
    #include <dfs_def.h>
    #include <dfs_file.h>

    const struct rtgui_graphic_driver *gd = rtgui_graphic_driver_get_default();
    struct rtgui_filerw* file;
    rt_uint8_t *buf;

    struct hdcSt
    {/* HDC图片格式的文件头 */
      char magic;
      rt_uint32_t width;
      rt_uint32_t height;
      rt_uint32_t res1;
      rt_uint32_t res2;
    };
    struct hdcSt hdcHeader;

    hdcHeader.magic = 'H';
    hdcHeader.magic = 'D';
    hdcHeader.magic = 'C';
    hdcHeader.magic = 0x00;
    hdcHeader.width = gd->width;
    hdcHeader.height= gd->height;
    hdcHeader.res1 = 0;
    hdcHeader.res2 = 0;

    buf = (rt_uint8_t*)&hdcHeader;
    file = rtgui_filerw_create_file(name, "w");
    if(file == RT_NULL) return;

    rtgui_filerw_write(file, buf, sizeof(hdcHeader), 1);
    buf = (rt_uint8_t*)gd->get_framebuffer;
    rtgui_filerw_write(file, buf, 600*800*2, 1);
    rtgui_filerw_close(file);

    rt_kprintf("Print Screen Succ!\n");
}
FINSH_FUNCTION_EXPORT(print_screen, print screen);;
#endif

这个函数在大部分使用FrameBuffer的平台上一般都能跑起来,用非内视shell调用即可.
如果你的系统中有SD卡,那么很方便编辑这些图片了,就像我这样:
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_623677B9SHZ3.JPG
使用hdc-conversion工具查看HDC格式的图片(RT-Thread系统) (原文件名:bmp1.JPG)
嗯,这些节目的效果怎么看都像PC上的GUI,其实这些都是RTGUI的效果
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_623678ZQ8HTS.JPG
RTGUI的一个文件管理窗口 (原文件名:bmp2.JPG)
RTGUI的控件一直在持续完善之中。
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_623679UNY40M.JPG
RTGUI中的组合框控件效果 (原文件名:bmp3.JPG)
非内视下看看
finsh />list_win()
window'name      thread'name      modal            window'id
---------------- ---------------- ---------------- ----------
New File         NewDlg         MODAL_OK         0x307210a8
test             Panel            MODAL_CANCEL   0x30720de8
test             Panel            MODAL_CANCEL   0x30720b28
test             Panel            MODAL_CANCEL   0x30720a78
test             Panel            MODAL_CANCEL   0x30720918
test             Panel            MODAL_CANCEL   0x30720bd8
test             Panel            MODAL_CANCEL   0x30720c88
test             Panel            MODAL_CANCEL   0x30720f48
test             Panel            MODAL_CANCEL   0x30720e98
test             Panel            MODAL_CANCEL   0x30720d38
test             Panel            MODAL_CANCEL   0x307209c8
test             Panel            MODAL_CANCEL   0x30720868
test             Panel            MODAL_CANCEL   0x307207b8
        0, 0x00000000
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_623680NR5B9O.JPG
RTGUI中打开多个窗口的效果,焦点窗口是模式窗口 (原文件名:bmp4.JPG)

http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_623681KIOECX.JPG
RTGUI中的复选框效果 (原文件名:bmp5.JPG)
以后会支持更加复杂强大的控件,向PC上的GUI靠拢
http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_623682DYZYSP.JPG
RTGUI中的编辑框效果 (原文件名:bmp7.JPG)

amsl 发表于 2011-3-18 20:44:04

在大尺寸液晶屏使用GUI,首先需要支持FrameBuffer,否则难以发挥GUI的性能,并且会影响整个系统的效率。
像手机液晶屏这样的应用场合,很多时候都是整屏的进行处理,所以使用窗口的机会很小。一般窗口都用来显示提示消息窗口。而在大液晶上编程,侧重的则是窗口系统,很多应用程序都会独占一个窗口,而且窗口还分MDI形式,SDI形式,有主窗口,子窗口,对话空,提示框等多种分类。所以实现起来会有点难度。RTGUI在将来支持大尺寸显示屏是必然的,目前还在内部测试阶段,还没有定好如何具体的发展方向。

wu0232 发表于 2011-3-18 22:00:37

这个效果很牛叉啊

ffxz 发表于 2011-3-18 22:34:04

回复【8楼】amsl
在大尺寸液晶屏使用gui,首先需要支持framebuffer,否则难以发挥gui的性能,并且会影响整个系统的效率。
像手机液晶屏这样的应用场合,很多时候都是整屏的进行处理,所以使用窗口的机会很小。一般窗口都用来显示提示消息窗口。而在大液晶上编程,侧重的则是窗口系统,很多应用程序都会独占一个窗口,而且窗口还分mdi形式,sdi形式,有主窗口,子窗口,对话空,提示框等多种分类。所以实现起来会有点难度。rtgui在将来支持大尺寸显示屏是必然的,目前还在内部测试阶段,还没有定好如何具体的发展方向。
-----------------------------------------------------------------------

禾兰豆做的东西果真酷!下一步让我们把UI Builder做好吧,有了这个,那么写起代码来会得心应手很多

amsl 发表于 2011-3-19 01:11:46

非飞,现在感觉有个问题,要更好的使用UI Builder,需要将API函数进行整合统一,例如:

rtgui_rect_t rect;
rtgui_view_t* view;
demo_view_get_rect(view, &rect);
rect.x1 += 5;
rect.x2 = rect.x1 + 100;
rect.y1 += 5 + 25;
rect.y2 = rect.y1 + 20;
button = rtgui_button_create("Blue");
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button)) = blue;
rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect);
rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button));

上面这段代码实现在view中创建一个button子控件,如果将它们封装在一起,例如下面这个声明:
rtgui_button_t* rtgui_button_create(struct rtgui_widget parent, char* text,int left, int top, int w, int h);
使用时下面的方法可以完成同样的功能,但是这样更符合对象编程的思想,这也是多数GUI的API的习惯用法。
button = rtgui_button_create(RTGUI_WIDGET(view),"Blue",5,100,100,20);
这种用法也符合rc格式,解析rc会更方便。睡觉去了

utopiaprince 发表于 2011-3-22 11:06:54

必须mark

hejiang177 发表于 2011-3-22 22:11:19

希望汉字多字体支持早日实现

amsl 发表于 2011-3-23 08:36:40

上例代码中buf = (rt_uint8_t*)gd->get_framebuffer;漏贴了一对括号应该是
buf = (rt_uint8_t*)gd->get_framebuffer();特此更正一下.

楼上 hejian, RTGUI已经支持TTF了,汉字多字体可以的

waterx3 发表于 2011-3-23 16:56:48

看起来真不错,能放点上面效果的代码学学吗?SETUP的效果。

first_blood 发表于 2011-3-25 18:27:39

最重要的是可视化编程环境,类似VB一样的

zxztianying 发表于 2011-3-26 23:13:18

这是禾兰豆的id呀~mark一下吼吼

tinix 发表于 2011-3-30 21:33:55

不错, 有了专门的UI设计环境, RTT离商用又近了一步

lksat 发表于 2011-4-22 10:19:49

先留个记号。

tedden 发表于 2011-4-22 10:33:02

越来越 强大了,顶

lwy86 发表于 2011-4-22 11:27:35

mark

lugang_2920213 发表于 2011-5-10 16:45:24

记号

xue110592 发表于 2011-5-11 20:31:02

这个真的是太牛叉了!赞一个。支持输入法吗?
页: [1]
查看完整版本: 一款机器显示方案(用于工业上的)大家帮忙用什么方案?这个能用RT_THREAD系统实现吗?