OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6497|回复: 11

关于lcd显存地址问题,解惑

[复制链接]

26

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2019-6-11
在线时间
52 小时
发表于 2020-3-11 11:21:22 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 lvye 于 2020-3-11 13:25 编辑

请教一下,前提条件,以下问题针对一帧数据方便形容问题:
在lcd实验中显存设定的是大约一秒60帧的刷新速率,第一帧的数据保存在(实验中的设定地址)0x89000000~0x89000000+(1023*599*4)范围内(使用的是7寸屏);所以换句话说,屏幕的第一个像素点范围就是0x89000000~0x89000003范围内,以后每个像素点就依次累加一一对应到相应地址上。那么理论上我往小于0x89000000这个地址写数据,应该不会显示到lcd中。
那么问题1就是如图 IMG20200310221539_01.jpg 我在主函数中将实验中画圆那一行代码的入口参数改成(0,0,500);比如在画第三象限的步骤中,画点的地址会到小于ox89000000的位置去,为什么会也显示到lcd上?图中的现象如何解释呢?
问题2:如果我不在显存的区域按照一定的公式像其中一个地址写数据,理论上不是不应该显示到lcd上吗?但是上图中的却显示到lcd上了。

最佳答案

查看完整内容[请看2#楼]

这个你就得好好分析分析这个函数了,看是不是有什么bug;如果你真要测试小于显存的地址能不能显示,那你把数据往小于显存的地址空间写,别用教程里边这个函数
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2178
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-3-11 11:21:23 | 显示全部楼层
lvye 发表于 2020-3-13 14:02
你这么说,就和我理解的一样了,那么我截图的图片圆圈是两个部分,右侧部分是如何出现的呢?

这个你就得好好分析分析这个函数了,看是不是有什么bug;如果你真要测试小于显存的地址能不能显示,那你把数据往小于显存的地址空间写,别用教程里边这个函数
森罗万象
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2178
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-3-11 12:08:46 | 显示全部楼层
TIM截图20200311120713.png

你这里是说啥呢? 那么理论上小于0x89000000这个地址的数据,不应该会显示到LCD中???
你是这个意思吗??
看不懂你的意思
森罗万象
回复

使用道具 举报

26

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2019-6-11
在线时间
52 小时
 楼主| 发表于 2020-3-11 13:23:20 | 显示全部楼层
xiaotaotao 发表于 2020-3-11 12:08
你这里是说啥呢? 那么理论上小于0x89000000这个地址的数据,不应该会显示到LCD中???
你是这个意思 ...

对是这个意思
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2178
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-3-11 14:36:39 | 显示全部楼层

显示数据肯定要在显存的地址范围空间中才行!
森罗万象
回复

使用道具 举报

26

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2019-6-11
在线时间
52 小时
 楼主| 发表于 2020-3-11 15:51:19 | 显示全部楼层
xiaotaotao 发表于 2020-3-11 14:36
显示数据肯定要在显存的地址范围空间中才行!

大佬你好,你说的是对的,但是现象我截图的现象不是我们所想的那样。
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2020-3-12 18:38:18 | 显示全部楼层
1、那是画圆的算法的问题, 要加入坐标判断。2、LCD显示的核心就是打点算法,也就是计算出某个点对应的显存地址,然后往这个显存地址写数据。
回复

使用道具 举报

26

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2019-6-11
在线时间
52 小时
 楼主| 发表于 2020-3-13 10:02:29 | 显示全部楼层
zuozhongkai 发表于 2020-3-12 18:38
1、那是画圆的算法的问题, 要加入坐标判断。2、LCD显示的核心就是打点算法,也就是计算出某个点对应的显存 ...

是的左工,你说的这些我认可,我也明白这是算法方面的了。
但是我打个比方哈:
比如在我们画圆的入口参数,我设定为(0,0,300);
那么第一次进到while循环内时候,且这个情况下
lcd_drawpoint(-x + mx, -y + my, tftlcd_dev.forecolor);此时的mx = my =0; x=0,y=300;
在进到画点函数:
*(unsigned int*)((unsigned int)tftlcd_dev.framebuffer +
                             tftlcd_dev.pixsize * (tftlcd_dev.width * y+x))=*(unsigned int*)(0x89000000+4*(1024*(-300)+0))= *(unsigned int*)(0x89000000 -300*1024*4) = color;
这样一眼就看出来了,这次写入的地址跟定不是在我们设定的0x89000000+2M的范围了,俄日是小于0x89000000的地址了。我的问题就是为啥我们往不是我们设定的缓存地址写数据还能显示出来到lcd呢?
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2178
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-3-13 13:51:50 | 显示全部楼层
lvye 发表于 2020-3-13 10:02
是的左工,你说的这些我认可,我也明白这是算法方面的了。
但是我打个比方哈:
比如在我们画圆的入口参 ...

你这个函数理解有误区,小于显存地址的数据肯定是显示不出来的,因为这是在裸机程序里边,你往显存空间之外的地址写数据是不会死掉的,但写了也没用,比如说这个(0, 0, 300)圆心在(0, , 0)处,那么最左边就是(-300, 0),最上边就是(0, -300),虽然在函数里边往这些地址写了数据,但是显示不出来呀 大哥,在裸机里边可以乱搞,在跑系统的时候 肯定是要判断的。
森罗万象
回复

使用道具 举报

26

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2019-6-11
在线时间
52 小时
 楼主| 发表于 2020-3-13 14:02:19 | 显示全部楼层
xiaotaotao 发表于 2020-3-13 13:51
你这个函数理解有误区,小于显存地址的数据肯定是显示不出来的,因为这是在裸机程序里边,你往显存空间之 ...

你这么说,就和我理解的一样了,那么我截图的图片圆圈是两个部分,右侧部分是如何出现的呢?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2020-3-13 18:31:13 | 显示全部楼层
lvye 发表于 2020-3-13 14:02
你这么说,就和我理解的一样了,那么我截图的图片圆圈是两个部分,右侧部分是如何出现的呢?

你可以计算一下本不应该显示到LCD上的点的显存地址,如果这个显存地址阴差阳错的处于LCD显存范围内,那么你向这个地址写数据肯定就可以显示到LCD上
开往春天的手扶拖拉机
回复

使用道具 举报

26

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2019-6-11
在线时间
52 小时
 楼主| 发表于 2020-3-16 09:28:27 | 显示全部楼层
zuozhongkai 发表于 2020-3-13 18:31
你可以计算一下本不应该显示到LCD上的点的显存地址,如果这个显存地址阴差阳错的处于LCD显存范围内,那么 ...

这个我回去在像你说的测试一下。哈哈这个竟然会映射到lcd的缓存中呢?真是神奇。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 07:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表