Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
请教关于最新版RTT+rtGUI的hello world实现
发布于 2013-04-08 17:51:15 浏览:5996
订阅该版
新版的RTT和rtGUI 0.6.1已经出来了,而且新版本和老版本的区别还是挺大的。现在网上能找到的RTT+rtGUI示例估计就个网络收音机,但该程序是在老版本的基础上实现的。小弟折腾了很久还是没能让新版的rtGUI在我的板子上跑起来。我的板子是STM32F103VET6,液晶驱动是ili9328,当前只做到了在无rtGUI的时候让板子在开机时能显示一个蓝色背景。 ``` void rt_hw_lcd_init(void) { /* register lcd device */ _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; /* set user privated data */ _lcd_device.user_data = &lcd_ili_ops; lcd_Initializtion(); /* register graphic device driver */ rt_device_register(&_lcd_device, "lcd", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STANDALONE); lcd_backlight_init(); } ``` 下面代码参考的是RTGUI-0.6.1demoexamplesdemo_application.c ``` static void gui_init_entry(void *parameter) { struct rtgui_app *app; struct rtgui_rect rect; rtgui_server_init(); app = rtgui_app_create("gui_demo"); if (app == RT_NULL) { rt_kprintf("rtgui_app_create failed! "); return; } //注:(1) /* create a full screen window */ rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect); main_win = rtgui_win_create(RT_NULL, "demo_win", &rect, RTGUI_WIN_STYLE_NO_BORDER | RTGUI_WIN_STYLE_NO_TITLE); if (main_win == RT_NULL) { rt_kprintf("rtgui_win_create failed! "); rtgui_app_destroy(app); return; } } ``` 现在的问题是:如果将 注:(1)以下的程序注释,则程序并不出错,finsh输出内容如下: ``` | / - RT - Thread Operating System / | 1.2.0 build Apr 8 2013 2006 - 2012 Copyright by rt-thread team LCD Device ID : 9328 data bus test.... data bus test pass! LCD GRAM test.... TEST PASS! RTGUI: creating the server app 200038fc. RTGUI: creating the server app 20003f44. RTGUI: create server: 20003f44finsh>>list_thread() thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- rtgui 0x0f suspend 0x000000e8 0x00000800 0x000000f8 0x00000004 000 tidle 0x1f ready 0x00000040 0x00000100 0x0000005c 0x00000006 000 timer 0x04 suspend 0x00000058 0x00000200 0x00000058 0x00000009 000 tshell 0x14 ready 0x00000088 0x00000800 0x000001b0 0x00000007 000 0, 0x00000000 finsh>> ``` 如果将 注:(1)以下程序取消注释,则程序出错,finsh输出内容如下: ``` | / - RT - Thread Operating System / | 1.2.0 build Apr 8 2013 2006 - 2012 Copyright by rt-thread team LCD Device ID : 9328 data bus test.... data bus test pass! LCD GRAM test.... TEST PASS! RTGUI: creating the server app 20003904. post when server is not running create win: demo_win failed rtgui_win_create failed! (app != RT_NULL) assert failed at rtgui_send_sync:599 ``` 不知有谁研究过新版的程序,如果要让它先跑起来,弹个小窗口,显示hello world应该如何实现? 下载附件 [test.rar](https://oss-club.rt-thread.org/uploads/5500_4158c32a6a9d8888a103eed27310cf5f.rar) ![hello.png](https://oss-club.rt-thread.org/uploads/5702_bf03507c3e4b45af7d323c1acbadfb9f.png)
查看更多
5
个回答
默认排序
按发布时间排序
grissiom
2013-04-09
这家伙很懒,什么也没写!
1,貌似 app 的优先级太高了,导致 server 没有跑起来…… 2,window 没有 show,所以不会有窗口显示…… 3,demo 就是完整的示例,网络收音机太老了
microtomato
2013-04-09
这家伙很懒,什么也没写!
谢谢grissiom大侠帮忙,现在helloworld已搞定,实现了在开机时弹出1个窗口,显示Hello world。现分享工程文件,给有需要的童鞋下载。
nigulavy
2013-06-09
这家伙很懒,什么也没写!
照理不应该发这种“先顶后看”的没营养帖子。但是,感觉有点“久旱逢甘霖”。所以还是发了。回头再仔细说明过程。我是在STM32F4上面做东西。
nigulavy
2013-06-10
这家伙很懒,什么也没写!
谢谢microtomato提供的代码。参考你的代码我终于也见到了hello world窗口。 补充一些信息,见下图: [attach]1886[/attach] **LCD 驱动和设备对象的实现主要参考:** [http://wenku.baidu.com/view/6dde352f0722192e4536f6d7.html](http://wenku.baidu.com/view/6dde352f072 ... 6f6d7.html) 需要注意的是这个文档稍老,其中一个函数已经改名:void (*draw_raw_hline)(rt_uint8_t *pixels, int x1, int x2, int y); 改为 void blit_line(const char *pixel, int x, int y, rt_size_t size); 这个函数的第一个参数是一个像素数组的指针,函数的作用的画一条水平线,这条水平线的每一点对应参数数组里的一个元素。 **关于线程优先级,需尤其注意。** 首先一个基本的概念是如果高优先级的线程不主动让出线程的话,低优先级的线程是没有机会执行的。gui_init 线程如果优先级太低(thread priority 值太大),就有可能没有机会执行。因此需要仔细检查各个线程的优先级值。 **相同优先级的线程调度疑惑** 我遇到的问题是,我用STM32F4 Discovery的板子,rt-thread 本身有一个操作led的演示线程,我将其优先级设为gui_init 一样,但是gui_init还是没有办法显示一个窗口。 ``` //------- init led1 thread rt_thread_init(&thread_led1, "led1", rt_thread_entry_led1, RT_NULL, &thread_led1_stack[0], sizeof(thread_led1_stack),16,5); rt_thread_startup(&thread_led1); rt_hw_lcd_init(); lcd = rt_device_find("lcd"); if (lcd != RT_NULL) { rtgui_graphic_set_device(lcd); rtgui_system_server_init(); } gui_init_tid = rt_thread_create("gui_init",gui_init_entry,RT_NULL,2048,16,20); if (gui_init_tid != RT_NULL) rt_thread_startup(gui_init_tid); ``` ``` ALIGN(RT_ALIGN_SIZE) static char thread_led1_stack[1024]; struct rt_thread thread_led1; static void rt_thread_entry_led1(void* parameter) { GPIO_InitTypeDef GPIO_InitStructure; /* GPIOD Periph clock enable */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); /* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOD, &GPIO_InitStructure); f_var1 = 3.141592653; f_var2 = 123.456; f_var3 = 0.123456789; f_var4 = 1.00001; while (1) { rt_thread_delay(RT_TICK_PER_SECOND); rt_thread_yield(); } } ``` 如果见led的创建线程代码放到gui_init 之后则可以显示窗口。另外如果将led线程的优先级设为17,也可以工作。 不知为何? 另外rt_thread_delay 函数好像不会让出CPU? 哪位大侠可否指点一二。
撰写答案
登录
注册新账号
关注者
0
被浏览
6k
关于作者
microtomato
这家伙很懒,什么也没写!
提问
2
回答
5
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
在RT-Thread Studio中构建前执行python命令
2
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
3
CherryUSB开发笔记(一):FSDEV USB IP核的 HID Remote WakeUp (USB HID 远程唤醒) 2025-01-18 V1.1
4
RT-thread 缩写字典
5
RT Thread 源码分析笔记 :线程和调度器
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
聚散无由
2
篇文章
14
次点赞
catcatbing
2
篇文章
4
次点赞
Wade
2
篇文章
2
次点赞
Ghost_Girls
1
篇文章
4
次点赞
xiaorui
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部