打印

M4/M3 StellarisWare图形库(Grlib)入门系列(一)——基础知识

[复制链接]
6300|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TI_MCU|  楼主 | 2011-10-27 10:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 TI_MCU 于 2011-11-2 11:33 编辑

1.前言
TI Stellaris系列M3/M4之所以强大,StellarisWare软件库提供的快速软件开发解决方案功不可没。作为TI StellarisWare库的一部分,StellarisWare图形库提供了一套比较完整的MCU图形显示方案,即可以进行图形、文字的绘制,也可以轻松实现在PC机上常见的基于事件响应的控件。伴随着Stellaris LM4F系列的推出,StellarisWare图形库也将进一步升级,内置汉字字库(期待)。


不过由于Stellaris图形库没有相关的中文文档,有时候会让大家觉得入门非常困难,所以Richard决定写这篇文档,抛砖引玉,让对Stellaris感兴趣的朋友都能够通过阅读这篇文档,快速上手StellarisWare图形库,为我们的MCU世界增加更多美丽的应用本文所介绍的StellarisWare可以在M3/M4系列上运行。


下面图中就是用Stellaris图形库进行控件绘制的演示,Stellaris最高可支持24bit颜色,精心设计过的界面将非常有吸引力。




2.基础知识
虽然
Stellaris图形库应用起来比较简单,但理论知识还是要掌握一些的。下面谈谈Stellaris图形库的基本结构。

Stellaris图形库分成了三层,分别是:
    (1) 显示驱动层 (Display Driver Layer)
    (2) 基本图形层 (Graphics Primitives Layer)
    (3) 控件层 (Widget Layer)







其实结构非常简单,下面分别介绍下各层的大概作用。

2.1.显示驱动层 (Display Driver Layer)
2.1.1 基本功能
显示驱动层提供了和硬件通信的基本功能,这层直接和硬件直接通信。提供了两类驱动,分别是图形输出驱动、用户输入驱动。用户输入不是必须的。

辛苦的分层带来了巨大好处,当需要把程序从一个硬件平台移植到另一个新的时候,如果显示内容不变,开发者们只需要重新实现驱动层,而上层的代码可以保持不变。

2.1.2 图形输出驱动
图形输出驱动和显示屏控制器打交道,实现诸如在屏幕上画个点之类的基本作用(毕竟再复杂的图像也是一个点一个点画出来的),参考TI LM3S9B96开发板的驱动,有如下的显示驱动程序:
    kitronix320x240x16_ssd2119_8bit.c
    kitronix320x240x16_ssd2119_8bit.h

它们就是开发板上320x240彩色LCD显示屏的驱动。打开驱动程序,能找到如下对象:
    tDisplayg_sKitronix320x240x16_SSD2119

其中定义了显示相关的参数(如尺寸,屏幕的横竖等),并实现了下面的函数:
    Kitronix320x240x16_SSD2119PixelDraw
    Kitronix320x240x16_SSD2119PixelDrawMultiple
    Kitronix320x240x16_SSD2119LineDrawH
    Kitronix320x240x16_SSD2119LineDrawV
    Kitronix320x240x16_SSD2119RectFill
    Kitronix320x240x16_SSD2119ColorTranslate
    Kitronix320x240x16_SSD2119Flush

没错,它们实现了基本的绘图功能,在更上层的(2)基本图形层中,这些函数将会被调用,直接控制LCD,在屏幕上显示相应的点(Pixel)、线(Line)以及面(Rect)等。所以在移植的时候,这些函数需要调试,保证它们能正确画出所需图形。

2.1.3. 用户输入驱动
响应用户输入事件用的硬件驱动(如触摸屏幕),也算作显示的驱动的一部分,归在这一层。在9B96开发板上,提供了触摸屏的驱动:
    touch.c
    touch.h

里面的函数与Stellaris图形库直接相关,用户需要用到的主要是:
    TouchScreenCallbackSet

在触摸功能初始化的时候,这个函数通过回调,将用户动作事件和Stellaris图形库的事件响应函数连接在一起。

当用户动作时,输入驱动应调用Stellaris图形库的WidgetPointerMessage函数,并提供动作的信息(如动作的xy坐标,动作方式等)。WidgetPointerMessage则负责进行画面更新,响应用户的动作。

2.2.基本图形层 (Graphics Primitives Layer)
只能画点线面显然是不够用的。Stellaris图形库的基本图形层,调用了底层函数,实现了形状、文字以及图片的绘制功能。如果只需要基本的图形显示功能,仅使用该层也是可以的。

2.3. 控件层 (Widget Layer)
PC上的按钮、点选框等控件,想必各位应该相当熟悉了。控件层的作用就是实现这些类似的功能。Stellaris图形库可以实现的控件有:
    画布 (Canvas)
    控件容器 (Container)
    按钮(Push Button)
    选择/多选框 (Checkbox)
    单选框 (Radio Button)
    列表框(ListBox)
    拖滑/进度条 (Slider)

StellarisWare图形库中,实现了这些控件的绘制、事件响应两部分,为应用带来方便。后文会具体介绍如何使用这些控件。









评分
参与人数 1威望 +10 收起 理由
永远的不知 + 10 期待下文

相关帖子

沙发
中国无芯| | 2011-10-27 21:02 | 只看该作者
做的太漂亮了:victory:

使用特权

评论回复
板凳
永远的不知| | 2011-10-28 09:00 | 只看该作者
写的太好了,期待下文,TI M3用户的福音啊。

使用特权

评论回复
地板
xinyuhjj| | 2011-10-28 17:32 | 只看该作者
:)不错。虽然这个图形库用了好久,但一直没有仔细分析过。
要是能把这个图形库的结构,特别是图形库的数据结构,要是能够搞清楚,相信对自己的软件水平会有一个很大的提高。

使用特权

评论回复
5
luohua001| | 2011-11-30 10:48 | 只看该作者
兄台,写的太好了!能否将这三个文档转化成PDF格式?便于下载和分享呀!!!

使用特权

评论回复
6
TI_MCU|  楼主 | 2011-11-30 17:23 | 只看该作者
5# luohua001

其实还有一章没有写完,写完后会一起把PDF发出来的

使用特权

评论回复
7
guozhiyang| | 2011-12-2 13:47 | 只看该作者
很不错啊!

使用特权

评论回复
8
aass1| | 2011-12-2 13:56 | 只看该作者
如此酷帖 必须要顶起

使用特权

评论回复
9
aass1| | 2011-12-2 13:57 | 只看该作者
:handshake

使用特权

评论回复
10
kakio| | 2011-12-2 14:09 | 只看该作者
希望酷贴越来越多

使用特权

评论回复
11
kakio| | 2011-12-2 14:10 | 只看该作者
帮忙顶起

使用特权

评论回复
12
kf94297| | 2013-9-25 13:36 | 只看该作者
GOOD 期待更详细的说明 最好来个样例程序 真的感激不尽啊

使用特权

评论回复
13
ballack_linux| | 2013-9-25 15:33 | 只看该作者
不错的帖子哈  MARK

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

420

帖子

7

粉丝