[MID project][Graphics] Daily Report from HELLO_MAX
1.硬件为mw2440的板子,然后编译相应kernel。
2.下载最新的g-bios编译烧写,然后用nfs方式挂载rootfs,启动kernel测试kernel,
kernel虽然能进如shell命令提示行,但是启动界面有关mtd的报错,以及文件及命令提示行颜色不变问题(未解决)。
3.写了个画矩形的函数,并在g-bios 初始化lcd的时候调用,有问题待完善。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
本帖最后由 HELLO_MAX 于 2010-03-08 22:06 编辑
今天所做的内容主要是在g-bios的平台下操作lcd,具体内容为:
1.在g-bios的app目录下建立lcd目录,从app的其他目录拷贝个Makefile文件,并修改app目录下的Makefile,添加对app/lcd目录下文件编译的支持。
(刚开始的时候,忘记了拷贝Makefile和修改app目录下的Makefile,结果是多次烧录g-bios下半部分,也没有相应的命令,郁闷 :( )
2.解决了昨天画矩形函数的bug,并且画了个矩形中可以填充颜色的函数,基本通过测试。(不过有问题的,网络中断等原因会导致循环画矩形宕机;另外为了特殊用途,我在画矩形的循环中加了个变量,由于处理不当,导致lcd的前端显存溢出。。。)
3.画圆的函数画出来的是方的,然后宕机掉, 。
4.我们所用的arm-linux-gcc还不支持浮点计算。
5.菜鸟的日子是痛苦的,还有draw_line, draw_triangle, rotate要写,还有很多的,只是菜鸟还没想起来。。。。
6.明天要做涉及lcd的中断的东东,最好得把相关函数给整理下。
世界上最遥远的距离,不是生与死的距离,而是给我两点,我却不知道怎么将两点连成线段。
今天主要想法和结果如下:
lcd分辨率 480 * 272
1.arm中不支持浮点计算,所以计算出来的斜率小于1时,应该适当乘以一个基数,如果只考虑向下取整(暂时不考虑四舍五入和向上取整),那么作为480*272的最大斜率和最小斜率分别为272和1/480(斜率无穷大和斜率为零另论)。
2.显示屏只有有限的点数,480 * 272,但是我们画出来的线段应该视觉上是连续的,所以应该以变化块的最为基准。
如果按照上午的计划来做的话,应该不用走多久的弯路的,可惜中途在写程序的时候想法一改再改,结果弄到吃晚饭的时候还是没有多大进展,吃饭的时候重新整理下了思路,没多久就搞定了,悲哀啊。(高中时候老师曾说如果做选择题没把握的话,还是填最先的答案,直觉有时候还是蛮准的。。。)
另外在小平同志的帮助下解决了昨天宕机的问题,不过网络还是容易导致宕机,应该是中断的原因。
今天主要打算是先做完三角形填充的,最初方案有2个:
方案1:
由于已经有画线段的方法,不如以三角形的某一边平行填充,思想比较简单,但是每画完
一条线段都得重新计算起始和结束坐标,实在是太麻烦,另外有可能会导致有的点填充不到的情况
。
方案2:
三条直线的公共面积,这方法在高中数学中应用过很多,另外反向填充也可以实现。2点构
成一线后,判断另外一点在该2点说构成线的上方还是下方。另外得判断该三点是否在同一条直线上
,以及误差估计。
后来突然想到windows的画图工具栏中有个填充颜色的工具,可以自动识别任何形状并填充,这
种方法更具有通用性,可惜很久都没想出来判断边界的条件。无奈,只能修改整理下昨天画线的代
码,精简后,准备用画线段的方法画出MAXWIT,烧录后屏幕显示的A的撇捺居然都是虚线,修改后重
新烧录屏幕显示的A的撇捺变成了,一虚一实,“虚虚实实”,我郁闷。检查后发现犯了个只有脑袋
被驴踢了的情况下才会犯的错误!重新修改后搞定。
另外,今天胜哥和taoxie跟我讲了他们做的双缓冲。今天没什么大的进展,希望明天会有突破!
本帖最后由 HELLO_MAX 于 2010-03-11 23:40 编辑
今天一直陷在了点如何扩散这方面,一直都没有什么大的进展。其原理为:对于任意一点而言,其扩散方向有4个方向,每次变化一个像素点,根据颜色值是否相同来判断扩散要不要停止,对于任意形状的图形应当都适用。
原地踏步踏一天,脚疼,受挫,无精神。。。
今天主要工作:
1.点的任意区域填充尝试失败,先搁置等以后有机会再做。于是采用前天第二个填充三角形的方案,调试了大半天都没调试出来,只有一条直线的约束条件起作用了,怀疑是类型不对导致越界了,可是还是没调试对,明天打算继续做下去。
2.还有把画圆以及圆的填充给做了,采用的是中点判断,做的时候用了一个小技巧 ,比如x加上0.5来进行判断,由于不支持浮点,所以通常情况得左移放大再右移缩小,但是今天的情况比较特殊,(x + 0.5)^2 = x^2 + x + 0.25,所以我用x ^2 + x近似值代替。
3.晚上,主要和taoxie再调试lcd个别点显示异常的时序问题,明天还得接着调试。双缓存和中断我还没在程序里做,前两天只听胜哥和tiaoxie讲了下,明天有时间弄下。
进展仍然缓慢。。。
今天主要工作:
1.上午看了下datasheet中关于lcd中断和时序相关的章节。
2.下午把昨天填充三角形的错误解决掉了,错误很幼稚,费神却不少。并且换了另外一种方法填充三角形,但是有2个问题,一个是边界初有点没有填充到,另外就是在起始点结尾点出了问题,花了很长时间也没有彻底fix掉。
3.晚上主要是在弄lcd的中断和双缓存,在taoxie的帮助下中断程序测试成功,但是双缓存应该有很大的问题在里面。
明天计划:
检查今天三角形填充程序和双缓存以及阅读6410的datasheet,有时间想画下椭圆。
DONE:
1.阅读、填写并测试lcd的时序,但测试启动logo失败。
2.编译了6410的kernel,nfs挂载打开失败,网卡型号不对,修改后仍然打开失败,应该还是nfs或者网卡问题。
TODO:
1.测试6410的lcd时序。
2.将在2440下的画点和线等程序移到6410板子上测试。
DONE:
1.6410板子的lcd时序调试成功,以及测试了画线和画圆等程序。
2.编译6410的kernel,用nfs的rootfs测试成功,kernel自带的framebuffer程序跑的时候提示系统太慢。。。,应该是寄存器没有设置好。
3.自己在kernel中增加framebuffer的驱动程序,调试很久,/dev/fb0始终没有出现。
TODO:
1.调试自己在kernel中增加的framebuffer程序。
2.测试6410的graphics 2D功能。
DONE:
1.kernel中简单的framebuffer驱动测试成功,/dev/fb0终于出现,用fbv打开g-bios.jpg成功,其中设置的时候出了个问题,调试了很久,郁闷额。
2.阅读6410的graphics 2D部分的datasheet,测试画线程序,屡试屡败,不知如何下手啊。
3.既然是“DONE”,当然犯的错误算了,又犯了2个sb错误,简称sb2....。
TODO:
1.明天上午继续测试graphics 2D的画线命令,如果没有进展,先搁置下了。
2.完善自己那超简单的framebuffer程序。