Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
分析下为什么初学者很难上手RTGUI?
发布于 2011-01-14 20:01:14 浏览:19056
订阅该版
如题,经常听到有些初学者抱怨这个问题。 我分析了下,这个不能愿bernard把RTGUI设计的太绕了。主要问题应该还是出在初学者自己身上。最好的学习方法就是仔细的读代码。当遇到弄不明白的地方时,可以暂时放一放,当通篇读个大概时,一般的疑问也就解决了。尤其关于GUI,很多问题都是逻辑上的,并不是语法上的。当通篇读个3~4遍时,应该可以熟练地使用RTGUI了。达到这个程度,也仅仅可以正确使用很多函数,要想能够修改代码,在很多地方还要下功夫。一般理解不深的地方,读个10遍以上,其含义一般就自动明白了。 上面说的不是主要原因。对于很多初学者学RTGUI难,这与学校里的教学C语言的方法应该有很大关系。一般学习C语言时,都是按部就班的编程,一个一个函数的调用。理解能力强的,则对指针掌握的熟练,能够灵活的用指针。否则使用指针少,甚至很多学生都不会用指针,整个程序都是用函数拼起来的。这里面的区别就大了。很多西方院校学一门语言,就是去分析一个OS的源代码,中国的程序教学估计达不到这个层次。 因为上述的原因,所以造成初学者看到各种指针调用,就迷糊了。掌握指针的方法只能是多学,多试验。其实这也是体现bernard使用C语言功力深厚的地方。bernard为整个RTGUI乃至RTT设计了一个系统的框架,就像多条锁链一样,在每条锁链上都预留了相应的接口。这种方法在一些OS源码中是很常见的。这些接口实际上就是一些钩子,与我们常说的钩子函数的钩子是一个意思。这些钩子不钩函数也可以保证程序正常执行,当钩上了某个函数后,就可以去执行一种功能。所以我们会看到RTGUI中有很多空着的钩子。用户需要做的就是去编写这些钩子函数,然后配置好它就可以了。当然,在编写这些钩子函数之前,你应该已经通篇读过了几遍代码。否则你不能确定你写的函数被调用后,会不会引起与其他函数的冲突,这也是很多人修改代码时,频繁遭遇死机的原因。 讲这些,希望对一些初学者有点帮助。记住,最有效的学习方法,就是读代码,很多老手都是这么走过来的。 ![WP_000065 (1).jpg](https://oss-club.rt-thread.org/uploads/2052_5777efbc767cb996eb01041b685ba169.jpg)
查看更多
28
个回答
默认排序
按发布时间排序
bernard
2011-01-15
这家伙很懒,什么也没写!
赞,很不错的一篇学习笔记! 不过也汗一个,原来RT-Thread/GUI需要通读10遍后才能上手,以后得多考虑下如何易用了。
totest
2011-01-15
这家伙很懒,什么也没写!
我觉得RTGUI相比UCGUI框架清晰多了,对于有一定基础的人是比较好理解的。 RTT和RTGUI确实用了比较多的指针和指针函数,但这也是它灵活的地方。初学者如果能消化下,肯定会在编程思想和水平上有一个很大的提高。
longxiguang
2011-06-15
这家伙很懒,什么也没写!
我并不同意一楼的说法,你懂什么叫面向对象设计吗?你知道为什么要有面向对象设计吗?面向对像设计的目的就是为了节省时间,提高效率,你用的windows或者linux是不是还要求你一遍又一遍的去看代码啊?你用VC的时候是不是每个控件都要去研究一下它是怎么实现的啊?你老板是不是让你在上班时间去研究linux源代码啊?你老板能不能给你10年的时间去做一个项目啊? 做项目不比做学术研究,做项目看重的是目的,做学术研究看的是过程,一个项目用什么语言做,用什么系统,用什么硬件平台等等,都有很多选择,但这些都不重要,重要的是什么样的选择能让我尽快的省时,省力,省钱同时又稳定的达到我想要的目的。这就是做老板的最高宗旨,而工程师存在的价值就是帮老板去实现这个宗旨。我为什么要用RTGUI? 他相对其它GUI有什么优势,让我省时了?省心了?还是省钱了?我是要拿他去做产品的,不是要拿他来玩的,玩那是学生做的事情。我是要一个拿来就能用的,不需要我花太多精力,想用什么就用什么,不用什么就减少程序空间的东西,我不是学生,如果还要研究半天,我用你干麻?原理都很简单,我自己写几个控件凑合调用一下不就完了?关键要用GUI就是为了节约时间,提高效率。 从我个人的角度,RT-thread以及GUI还有很大完善空间,但几个月了,发布版本还是0.3.1,我知道你们主要精力放在0.4.0上,但我建议不妨先把0.3.x这个版本的易用性做到极至了再去考虑那些花哨的功能,做产品不像做学习板,今天我加个彩色屏,明天我放个SD卡,后天我放个NAND flash,还不爽我放个以太网口在上面,做产品讲究的是能省就省,能用灰色屏我为什么放个彩屏,CPU 128K ROM可以实现的功能我为什么要放512? RAM 10K够了我为什么还要扩展1M? 128K的spi flash够了我为什么还要放个SD卡上去?OK我想将RT-thread和RTGUI做个裁减时,问题来了,一大堆盘根错节的函数依赖关系,这个文件不放不行,那个宏定义开关不打开不行,做软件最讲究的就是“高内聚,低耦合”,虽然rt-thread的功能比ucos多了很多,但人家每个功能性的宏开关,绝不会影响到其它功能,你要那么多功能有什么用?原本还想支持一下国内的开源软件的,但这个现状你让我如何决定?
bernard
2011-06-15
这家伙很懒,什么也没写!
仿佛遇上了咆哮体
amsl
2011-06-17
这家伙很懒,什么也没写!
RTT本身是用C语言写的,不可能实现真正的面向对象编程。在这个问题上推敲的意义不大。RTT的学习者中有很大的比例是在校学生。这篇帖子的目的是告诉这些学生在学习RTT时多掌握下C语言中指针的用法。当然使用者中应该有很多都是有一定开发经验的。楼上提到问题确实存在,不过对于熟手来说都是很容易解决的问题,网上有许多教新手如何移植RTT的例子。目前为止还没有哪一款嵌入式GUI能够拿来就用的,多少都要做些修改。想要实现全面的面向对象编程,OS就需要做的很完善,需要消耗非常庞大的资源。这个条件在大多数嵌入式设备中并不具备。前楼的朋友不防研究下GTK+,面向对象是需要编译器支持的。
mcz
2011-07-04
这家伙很懒,什么也没写!
缺少教程和文档呀。。。
knight_hu
2011-07-04
这家伙很懒,什么也没写!
小弟也是不才,GUI的代码看了虽然有段时间,但不免很多东西都是都是连猜带蒙的边做实验边验证想法,不过老实说,如果笔者能提供一个大致的数据流关系,或者其中的一些继承和数据传递关系,对初学者还是会有很大的帮助的!
bernard
2011-07-04
这家伙很懒,什么也没写!
是的,确实有待提高!我自己都不满意了。。。另外关于数据流,控件组织,在编程指南上写到有一些,你可以先看看,然后大家共同交流、探讨下。
amsl
2011-07-25
这家伙很懒,什么也没写!
>小弟也是不才,GUI的代码看了虽然有段时间,但不免很多东西都是都是连猜带蒙的边做实验边验证想法,不过老实说,如果笔者能提供一个大致的数据流关系,或者其中的一些继承和数据传递关系,对初学者还是会有很大的帮助的! --- 正如longxiguang说的那样,我也是一个为老板打工的人,没有太多的时间写文档.我在这里想提醒朋友们都忽略的一个问题:在嵌入式行业,没有多少是拿来就可以用的东西,很多知识都要亲自去钻研一下,起码也要知道如何使用拿来的东西.鲁迅先生曾经提到一个"拿来"主意,提倡去其糟粕,取其精华.但是在这背后是国人无数的努力和辛苦的汗水,再简单的事物也是要系统的研究一下才能变成自己的东西. 说到windows上的编程,win程序员没有多少人能够了解windows内部是如何运作的,除了微软自己的工程师.而很多使用linux的人,也会辛苦的去研究linux内核代码,即使再有经验的linux工程师也不敢说自己对linux都懂了.这些都是微机平台上的编程环境.对于程序员来说不需要太深入了解系统也能够编写代码. 在嵌入式方面的情况则不同.鉴于很多初学者使用RTGUI时遇到的问题,写了这些东西。 RTGUI是一个很小巧的嵌入式GUI平台。如果您很了解GUI方面的知识,并且能够很熟练的使用C语言编程,那么您可以很轻松愉快的使用RTGUI。如果在这方面是一个新手,使用RTGUI时可能会遇到一些问题,甚至会带来很多的烦恼。就像很多朋友抱怨的那样,RTGUI并不能够拿来就用,在使用之前有必要作一个系统的学习。 GUI是一组管理人机操作界面的程序。 RTGUI在RT-Thread中也是作为一个或几个线程来运行的。所以要很好的使用RTGUI,需要在RT-Thread平台上给它编写代码。 首先要了解,我们需要GUI给我们带来哪些功能。对于一般的产品,GUI程序一般都会提供按键输入、鼠标输入基本事件处理,此外还会提供字体管理、图像管理、多媒体管理、控件管理、窗口管理等功能。 GUI为了管理这些功能,让用户使用过程中不用关心具体的操作细节就可以使用它们,一般都会建立一种机制对这些行为进行一定的封装。这种操作模式就是GUI的透明访问模式。而这种封装机制我们称它为GUI架构。 先来看一个透明访问的例子。我们在一个“按钮”控件上点击一下鼠标或触摸屏,按钮控件马上作出了相应,边框编程凹下去的样子,并且绘制了一个焦点框。这个过程既是透明访问。 当一个应用程序员给按钮控件写“单击”事件时,只需要调用标准的按钮点击API即可以轻松的完成这个功能。从这个角度来看,使用GUI编程是很简单的。这也是对象编程的核心思想。 但是,如果你想站在系统程序员的角度去看这个例子,就不能简单视之了。 因为对于应用程序员来说是以一个使用者的身份应用某个模块功能,而对于系统程序员来说,身份则变成了模块的提供者。使用者与提供者的区别是显而易见的。就如上面的例子。使用者往往不必关心“点击”动作如何反馈到目标按钮控件上去,这恰恰就是提供者需要关心的问题。 在PC领域。一般人都是一个应用程序员的身份,操作系统已经提供了完善的系统编程接口和易用的API接口函数,人们可以使用这些接口函数快速的开发应用程序。 嵌入式领域的程序员不可能像PC程序员那样舒坦。当您希望在自己的平台上跑操作系统时,这种境况尤为突出。所以如果你已经决定了将未来的人生投入到嵌入式领域之中,那么在你的心里应该已经有了这种觉悟。或者你准备觉悟了,嵌入式平台上没有PC平台那么多的资源供程序员挥霍,所以没有PC程序员活的潇洒滋润。嵌入式平台必须由程序员搞定一切。
panyi1013
2011-08-04
这家伙很懒,什么也没写!
如何使用RTGUI是个问题,强调一下RTGUI要想走的更远必须拿出一个和RTT一样的文档出来
撰写答案
登录
注册新账号
关注者
0
被浏览
19.1k
关于作者
amsl
这家伙很懒,什么也没写!
提问
12
回答
137
被采纳
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
freemodbus主机在freertos的适配,参考rtthread例程
2
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
3
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
4
RT-Thread EtherKit开源以太网硬件正式发布
5
还在担心bsp不好维护吗?快使用yml管理主线bsp
热门标签
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
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部