嵌入式GUI移植小结

几天来,移植了一个小型的GUI,代码小,但是五脏俱全,基本体现了GUI的理念,值得推荐学习。下面就移植的方方面面总结如下:

1.GUI的设计理念:我们知道,当我们不去动键盘,不去动触摸屏鼠标的时候,是不会有GUI动作的,中断信号时钟信号除外。所以,GUI的设计出发点,实际上是事件,或者说是信号,当然也可以说是消息-包装过的信号或者事件,有目的地并且有参数。所以说,GUI的一种自然的设计理念是:事件驱动。那么有了应用在没有得到消息时候在干什么呢?答案你已经猜到了,什么也没干,只是在那等着消息,也就是一个等待消息的循环。综上,我们看出:GUI自然的设计理念是:事件驱动,消息循环。

2.GUI的组成部分:我们知道,鼠标键盘触摸屏是和用户互动的设备,他们从用户那里得到用户的意图,通过中断或者其他方式告诉处理器;处理器允许我们用软件写一个中断服务函数来响应响应的中断,当然所有的中断处理器已经知道了,只是什么时候来不知道;比如触摸屏被按下了,中断被通知给了处理器,处理器调用了软件的中断服务函数,这是我们用各种方式获取硬件的数据。到此,我们知道触摸屏被按下,这是事件,我们获得的数据经过包装后,这是消息,应为现在应用已经在等着我们的消息了,所以现在要做的只是应用我们事先约定的方式,把消息投递给应用就好了。所以,GUI的一个重要组成部分是输入层次,即GUI要有个线专门负责收集事件,包装消息,投递给其他部分。我们要显示给用户,当然屏幕输出必不可少。有了输入,有了输出,我们还有个把输入编程输出的部分,那就是GUI的服务器部分了,说桌面也行,但是不一定看的见,他负责所有的请求,发送分派所有的消息等等。综上,我们看出:GUI的组成部分是:输入,输出以及桌面服务器。

3.GUI的依赖关系:我们知道,不可能要我们从处理器启动代码开始写个GUI,没有意义,更失去了模块化的优势。所以,GUI下层要建立在一个不大不小的操作系统之上,有多任务可以,没有也可以。我们要输出,一定要有显示驱动的支持,最小也要一个画像素函数;我们要输入,一定要有输入驱动,最小也要有一个事件的坐标点。综上,我们看出:GUI依赖一个不大不小的系统,一个输入驱动,一个输出驱动。

4.GUI设计要求:我们知道,根据应用不同,对GUI的要求也不一样。有的场合要求处理速度快,界面相对简陋也无妨;有的场合要求界面华丽,处理器速度不在考虑范围内;综上,我们看出:GUI的设计不可能面面俱到,只能侧重于一个应用要求最高的方面,而往往设计的结果是方方面面因素的综合和折中。

5.基于linux的GUI的移植优势:我们知道,linux性能卓越,源码开放,不是商业运营。而且方方面面都在不断的提升。完美支持多种处理器,硬件驱动丰富,性能和稳定性高,现代操作系统的所有特性都给予支持。熟悉内核的话,裁剪和修改也很方便。高层次的抽象级别,针对输出的FrameBuffer抽象,一系列的输入设备支持,好用的设备文件系统,完美的多线程,多进程支持,为GUI的移植铺平了道路。写GUI这样的系统软件,似乎和写应用软件几乎无差别。

6.基于linux的GUI的移植须知:

(1)linux提供了FrameBuffer来抽象输出设备,我们所有的输出基于FrameBuffer就好,但是有些linux发行版默认没有开启FrameBuffer功能,这时GUI并没有输出;而且在发行版的图形界面下针对FrameBuffer的输出会不正常,一定要进入到字符模式。FrameBuffer相关的问题参照:http://efaq.blogbus.com/logs/48889260.htmlhttp://efaq.blogbus.com/logs/48326728.html

(2)GUI要获取输入设备的信息,linux提供了输入设备文件,GUI的相关部分只要从相应设备文件获取相应格式的数据即可。比如触摸屏驱动ts0,我们在GUI中打开,读取,之后封装成消息分派个GUI的其他部分。

(3)注意已有GUI的屏幕大小,环境变量依赖,文件系统依赖等~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值