OpenEdv-开源电子网

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

OLED实验,OLED_ShowString函数不理解

[复制链接]

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
发表于 2016-9-9 21:30:38 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 xiaokun 于 2016-9-9 21:47 编辑

OLED实验中,输出字符串函数有点看不懂,贴源代码如下:
//显示字符串
//x,y:起点坐标  
//size:字体大小
//*p:字符串起始地址
void OLED_ShowString(u8 x,u8 y,const u8 *p,u8 size)
{        
    while((*p<='~')&&(*p>=' '))//判断是不是非法字符!
    {      
        if(x>(128-(size/2))){x=0;y+=size;}
        if(y>(64-size)){y=x=0;OLED_Clear();}//超屏操作
        OLED_ShowChar(x,y,*p,size,1);         
        x+=size/2;
        p++;
    }  
        
}        



假如我要如下调用此函数:
OLED_ShowString(0,0,"ALIENTEK",24);  
在执行此函数到指针变量p指向最后一个字符“K”所在地址之后,p的地址继续+1,然后怎么判断这时p所指地址的内容不再' '与'~'之间呢

最佳答案

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

字符串是以\0结尾的,\0是非法字符,所以跳出来了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
262
金钱
262
注册时间
2019-5-27
在线时间
74 小时
发表于 2016-9-9 21:30:39 | 显示全部楼层
字符串是以\0结尾的,\0是非法字符,所以跳出来了
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-9-9 22:32:55 | 显示全部楼层

奇怪,为什么这么问,
while的条件不就在做判断吗?

这串字符是外界提前赋值的,赋值就要保证合理,
这里只是再加一道保险。



回复

使用道具 举报

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
 楼主| 发表于 2016-9-9 22:37:51 | 显示全部楼层
xuande 发表于 2016-9-9 22:32
奇怪,为什么这么问,
while的条件不就在做判断吗?

我知道while做出判断了,奇怪的是执行完K之后,p++,此时p指针所指地址的内容(即*p的值)

刚才请教了实验室一个前辈,他告诉我任何编译器执行完之后,*p的值就是空字符“NULL”(0x00),这里表示不解
回复

使用道具 举报

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
 楼主| 发表于 2016-9-9 22:44:22 | 显示全部楼层
xuande 发表于 2016-9-9 22:32
奇怪,为什么这么问,
while的条件不就在做判断吗?

现在想知道的是OLED_ShowString(0,0,"ALIENTEK",24);  这句函数执行到k 之后,*p的值是多少,
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-9-9 23:10:53 | 显示全部楼层

明白你意思了,
如果只写了5个字符,但第6个位置可能也合法,
是吗?

这段程序可能有bug,没有指明字符的数量,
也可能是用于特定环境。

如果不想显示第6个,看来只能往里面填非法数据,然后程序跳出。

回复

使用道具 举报

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
 楼主| 发表于 2016-9-9 23:29:26 来自手机 | 显示全部楼层
xuande 发表于 2016-9-9 23:10
明白你意思了,
如果只写了5个字符,但第6个位置可能也合法,
是吗?

是这个意思,就是想判断字符串最后一个字符显示之后的*p的值
回复

使用道具 举报

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
 楼主| 发表于 2016-9-10 11:55:15 | 显示全部楼层
@正点原子 原子哥,求助
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-11-12
在线时间
0 小时
发表于 2019-11-12 23:35:09 | 显示全部楼层
xiaokun 发表于 2016-9-10 11:55
@正点原子 原子哥,求助

建议去了解字符串的存储结构以及字符串指针的

楼主基础不太扎实啊
回复

使用道具 举报

9

主题

100

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1513
金钱
1513
注册时间
2016-7-28
在线时间
302 小时
 楼主| 发表于 2019-12-9 10:56:10 | 显示全部楼层
这是楼主三年前的帖子。。。。。
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2018-7-4
在线时间
18 小时
发表于 2020-3-12 15:01:56 | 显示全部楼层
肥肉君 发表于 2019-11-12 23:35
建议去了解字符串的存储结构以及字符串指针的

楼主基础不太扎实啊

既没起到帮助别人的实质作用,还美其名曰调侃了一下,显得自己比较牛逼,最烦这类人。。。
回复

使用道具 举报

0

主题

2

帖子

0

精华

高级会员

Rank: 4

积分
663
金钱
663
注册时间
2019-2-26
在线时间
47 小时
发表于 2021-11-26 11:31:23 | 显示全部楼层
11楼,9楼跟贴帮不到楼主。科普读物的作者正是大科学家。由此,还是以实力发表高见,通俗易懂为上。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 14:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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