一款机器显示方案(用于工业上的)大家帮忙用什么方案?这个能用RT_THREAD系统实现吗?
要求:液晶屏:5~7寸 TFT 65536色
sd卡:存储机器运行数据
usb:usb client
Ethernet:通过远程监控
rs485:2个(用modbus协议,一个主机,一个从机) 有没有提个建议的 建议用 你没说硬件平台,或者说你也希望让别人推荐个硬件平台?
GUI上,RT-Thread/GUI的开发人员之一,禾兰豆,已经把RT-Thread/GUI用于大屏显示的产品。 我现在只提出功能要求,硬件平台没定 回复【3楼】ffxz
你没说硬件平台,或者说你也希望让别人推荐个硬件平台?
gui上,rt-thread/gui的开发人员之一,禾兰豆,已经把rt-thread/gui用于大屏显示的产品。
-----------------------------------------------------------------------
能给我们展示一下吗?看看效果就成啊。 看看效果!~ 很久没上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) 在大尺寸液晶屏使用GUI,首先需要支持FrameBuffer,否则难以发挥GUI的性能,并且会影响整个系统的效率。
像手机液晶屏这样的应用场合,很多时候都是整屏的进行处理,所以使用窗口的机会很小。一般窗口都用来显示提示消息窗口。而在大液晶上编程,侧重的则是窗口系统,很多应用程序都会独占一个窗口,而且窗口还分MDI形式,SDI形式,有主窗口,子窗口,对话空,提示框等多种分类。所以实现起来会有点难度。RTGUI在将来支持大尺寸显示屏是必然的,目前还在内部测试阶段,还没有定好如何具体的发展方向。 这个效果很牛叉啊 回复【8楼】amsl
在大尺寸液晶屏使用gui,首先需要支持framebuffer,否则难以发挥gui的性能,并且会影响整个系统的效率。
像手机液晶屏这样的应用场合,很多时候都是整屏的进行处理,所以使用窗口的机会很小。一般窗口都用来显示提示消息窗口。而在大液晶上编程,侧重的则是窗口系统,很多应用程序都会独占一个窗口,而且窗口还分mdi形式,sdi形式,有主窗口,子窗口,对话空,提示框等多种分类。所以实现起来会有点难度。rtgui在将来支持大尺寸显示屏是必然的,目前还在内部测试阶段,还没有定好如何具体的发展方向。
-----------------------------------------------------------------------
禾兰豆做的东西果真酷!下一步让我们把UI Builder做好吧,有了这个,那么写起代码来会得心应手很多 非飞,现在感觉有个问题,要更好的使用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会更方便。睡觉去了 必须mark 希望汉字多字体支持早日实现 上例代码中buf = (rt_uint8_t*)gd->get_framebuffer;漏贴了一对括号应该是
buf = (rt_uint8_t*)gd->get_framebuffer();特此更正一下.
楼上 hejian, RTGUI已经支持TTF了,汉字多字体可以的 看起来真不错,能放点上面效果的代码学学吗?SETUP的效果。 最重要的是可视化编程环境,类似VB一样的 这是禾兰豆的id呀~mark一下吼吼 不错, 有了专门的UI设计环境, RTT离商用又近了一步 先留个记号。 越来越 强大了,顶 mark 记号 这个真的是太牛叉了!赞一个。支持输入法吗?
页:
[1]