RT-Thread的RT-GUI在神舟开发板上移植.doc_第1页
RT-Thread的RT-GUI在神舟开发板上移植.doc_第2页
RT-Thread的RT-GUI在神舟开发板上移植.doc_第3页
RT-Thread的RT-GUI在神舟开发板上移植.doc_第4页
RT-Thread的RT-GUI在神舟开发板上移植.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

RT-Thread的RTGUI移植步骤 (1.10RC版本)一.写好液晶屏幕的 画点ssd1289_lcd_set_pixel, 获得点ssd1289_lcd_get_pixel, 画横线 ssd1289_lcd_draw_hline,/ 画竖线ssd1289_lcd_draw_vline, 原始水平线ssd1289_lcd_draw_raw_hline 以上函数的参数要参考rtgui_graphic_driver_ops结构体 液晶初始化函数ili9320_Initializtion(); 六个底层驱动函数二.准备好三个结构体1.结构体原型struct rtgui_graphic_driver_ops/* set and get pixel in (x, y) */void (*set_pixel) (rtgui_color_t *c, int x, int y);void (*get_pixel) (rtgui_color_t *c, int x, int y);void (*draw_hline)(rtgui_color_t *c, int x1, int x2, int y);void (*draw_vline)(rtgui_color_t *c, int x , int y1, int y2);/* draw raw hline */void (*draw_raw_hline)(rt_uint8_t *pixels, int x1, int x2, int y); 结构体使用例子struct rt_device_graphic_ops lcd_ili_ops = /图形驱动接口 ssd1289_lcd_set_pixel, /画点自己实现ssd1289_lcd_get_pixel, /获得点 自己实现ssd1289_lcd_draw_hline,/画横线 自己实现ssd1289_lcd_draw_vline, /画竖线 自己实现ssd1289_lcd_draw_raw_hline /原始水平线 自己实现; 2.结构体原型struct rt_devicestruct rt_object parent; /* inherit from rt_object */enum rt_device_class_type type; /* device type */rt_uint16_t flag; /* device flag */rt_uint16_t open_flag; /* device open flag */rt_uint8_t device_id; /* 0 - 255 */* device call back */rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size);rt_err_t (*tx_complete)(rt_device_t dev, void *buffer);/* common device interface */rt_err_t (*init) (rt_device_t dev);rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag);rt_err_t (*close) (rt_device_t dev);rt_size_t (*read) (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);rt_size_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);rt_err_t (*control)(rt_device_t dev, rt_uint8_t cmd, void *args);#ifdef RT_USING_DEVICE_SUSPENDrt_err_t (*suspend) (rt_device_t dev);rt_err_t (*resumed) (rt_device_t dev);#endifvoid *user_data; /* device private data */;使用例子void rt_hw_lcd_init(void) _lcd_device.type = RT_Device_Class_Graphic; /Graphic类 设备驱动_lcd_device.init = lcd_init; /设备初始化自己实现_lcd_device.open = lcd_open; /设备打开约菏迪? _lcd_device.close = lcd_close; /设备关闭自己实现_lcd_device.control = lcd_control; /设备控制自己实现_lcd_device.read = RT_NULL; /设备读_lcd_device.write = RT_NULL; /设备写_lcd_device.user_data = &lcd_ili_ops; /lcd设备私有特性ili9320_Initializtion(); /初始化液晶ili9320_Clear(500);/清屏rt_device_register(&_lcd_device, lcd, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STANDALONE); /注册一个设备名字叫lcd 3.结构体原型struct rt_device_graphic_info rt_uint8_t pixel_format; /* graphic format */ rt_uint8_t bits_per_pixel; /* bits per pixel */ rt_uint16_t reserved; /* reserved field */ rt_uint16_t width; /* width of graphic device */ rt_uint16_t height; /* height of graphic device */ rt_uint8_t *framebuffer; /*bits_per_pixel = 16; info-pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB565P; info-framebuffer = RT_NULL; info-width = 240; info-height = 320; break; case RTGRAPHIC_CTRL_RECT_UPDATE: /* nothong to be done */ break; default: break; return RT_EOK; 三.在应用层启动lcd设备rt_hw_lcd_init();/* find lcd device */lcd = rt_device_find(lcd);/* set lcd device as rtgui graphic driver */rtgui_graphic_set_device(lcd);/* init rtgui system server */rtgui_system_server_init();神舟开发板stm32f107移植代码struct rt_device_graphic_ops lcd_ili_ops = ssd1289_lcd_set_pixel, ssd1289_lcd_get_pixel, ssd1289_lcd_draw_hline, ssd1289_lcd_draw_vline, ssd1289_lcd_draw_raw_hline ; struct rt_device _lcd_device; static rt_err_t lcd_init(rt_device_t dev) return RT_EOK; static rt_err_t lcd_open(rt_device_t dev, rt_uint16_t oflag) return RT_EOK; static rt_err_t lcd_close(rt_device_t dev) return RT_EOK; static rt_err_t lcd_control(rt_device_t dev, rt_uint8_t cmd, void *args) switch (cmd) case RTGRAPHIC_CTRL_GET_INFO: struct rt_device_graphic_info *info; info = (struct rt_device_graphic_info*) args; RT_ASSERT(info != RT_NULL); info-bits_per_pixel = 16; info-pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB565P; info-framebuffer = RT_NULL; info-width = 240; info-height = 320; break; case RTGRAPHIC_CTRL_RECT_UPDATE: /* nothong to be done */ break; default: break; return RT_EOK; void rt_hw_lcd_init(void) _lcd_device.type = RT_Device_Class_Graphic; _lcd_device.init = lcd_init; _lcd_device.open = lcd_open; _lcd_device.close = lcd_close; _lcd_device.control = lcd_control; _lcd_device.read = RT_NULL; _lcd_device.write = RT_NULL; _lcd_device.user_data = &lcd_ili_ops; ili9320_Initializtion();ili9320_Clear(500);rt_device_register(&_lcd_device, lcd, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STANDALONE); 以上代码都要自己编写总体步骤如下配置struct rtgui_graphic_driver_ops;struct rt_device _lcd_device;struct rt_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论