[51单片机] 单片机使用指针是否会提高代码的运行效率,why

[复制链接]
6324|24
 楼主| fangshu 发表于 2013-12-12 21:14 | 显示全部楼层 |阅读模式
单片机使用指针是否会提高代码的运行效率,why?
NE5532 发表于 2013-12-12 21:23 | 显示全部楼层
指针是C语言的精华,不只是单片机,所有的C用好指针都可以提高效率,因为数据不用考来考去,只用“哪里不会点哪里”就可以了。还可以处理链表、堆栈等数据结构问题,详细介绍,请参看谭浩强的C语言。
 楼主| fangshu 发表于 2013-12-12 21:38 | 显示全部楼层
NE5532 发表于 2013-12-12 21:23
指针是C语言的精华,不只是单片机,所有的C用好指针都可以提高效率,因为数据不用考来考去,只用“哪里不会 ...

:)“数据不用考来考去”是说“要是直接用变量做运算,这个变量先要考到特定的寄存器再运算,要是用指针运算,直接在对应的地址取数据运算?  另外,哪里不会点哪里是个什么意思?
NE5532 发表于 2013-12-12 22:02 | 显示全部楼层
用伪代码给你解释:

send (unsigned char i);



send (unsigned char* i);

这两个函数你觉得哪种快?指针带的是地址信息,而不是数据本身,特别是大数据量的缓冲区,有时候处理数据根本不需要把数据拷贝出来,只需要用指针指过去,就可以了,这个就是“哪里不会点哪里”
i55 发表于 2013-12-12 22:37 | 显示全部楼层
NE5532 发表于 2013-12-12 21:23
指针是C语言的精华,不只是单片机,所有的C用好指针都可以提高效率,因为数据不用考来考去,只用“哪里不会 ...

51就R0、R1两个间址寄存器,用指针会严重降低效率,无论是代码空间还是执行效率都会拖后腿!!!实际上8位机很少有用指针能提高效率的,完全是因为间址(indirect addressing)变址(index addressing)寄存器和相关指令匮乏导致的,在8位PIC单片机上尤为突出。

只有从8位机蜕变到32位机,pointers才会从癞**转型成白天鹅。
ayb_ice 发表于 2013-12-13 08:16 | 显示全部楼层
这个还与内核有关,
51的话特定指针还是可以的,通用指针效率就低了
ARM这类芯片效率就很高
yangfan19641964 发表于 2013-12-13 10:34 | 显示全部楼层
i55 发表于 2013-12-12 22:37
51就R0、R1两个间址寄存器,用指针会严重降低效率,无论是代码空间还是执行效率都会拖后腿!!!实际上8 ...

51中的指针并不是就只用R0、R1来实现的。如果是xdata类型的指针,编译时直接换成的是DPTR
i55 发表于 2013-12-13 14:25 | 显示全部楼层
yangfan19641964 发表于 2013-12-13 10:34
51中的指针并不是就只用R0、R1来实现的。如果是xdata类型的指针,编译时直接换成的是DPTR ...

DPTR更慢
dengxingling8 发表于 2013-12-13 15:22 | 显示全部楼层
这个还是要看具体情况的吧?
 楼主| fangshu 发表于 2013-12-13 15:35 | 显示全部楼层
NE5532 发表于 2013-12-12 22:02
用伪代码给你解释:

send (unsigned char i);

牛!好有意思的说法!懂了!
NE5532 发表于 2013-12-13 15:40 | 显示全部楼层
fangshu 发表于 2013-12-13 15:35
牛!好有意思的说法!懂了!

呵呵,你也得参考5楼的说法,指针是用好了才快,用不好也快不了,如果有兴趣,建议研究一些C的反汇编代码,可以看出究竟来。
 楼主| fangshu 发表于 2013-12-13 16:34 | 显示全部楼层
i55 发表于 2013-12-12 22:37
51就R0、R1两个间址寄存器,用指针会严重降低效率,无论是代码空间还是执行效率都会拖后腿!!!实际上8 ...

学了!
 楼主| fangshu 发表于 2013-12-13 16:35 | 显示全部楼层
NE5532 发表于 2013-12-13 15:40
呵呵,你也得参考5楼的说法,指针是用好了才快,用不好也快不了,如果有兴趣,建议研究一些C的反汇编代码 ...

嗯嗯,谢了!
xkq2001 发表于 2013-12-13 17:07 | 显示全部楼层
单片机的指针,可以指向一切你想看到的东西,包括数据,指令,功能寄存器,总之,没招的时候,指针就是好招,呵呵
原野之狼 发表于 2013-12-13 17:16 | 显示全部楼层
说到效率,既要从细节着手,更要从宏观上着手,这包括两方面: 更优的算法 以及 更优的架构
原野之狼 发表于 2013-12-13 17:16 | 显示全部楼层
本帖最后由 原野之狼 于 2013-12-13 17:20 编辑

说到效率,既要从细节着手,更要从宏观上着手,这包括两方面: 更优的算法 以及 更优的架构

比如说,排序:
从细节着手:指针操作,寄存器变量,逆向循环(i++还是i--的问题)...
从算法着手:冒泡排序,快速排序。
从架构着手:优化业务模型,让排序不再需要。


xkq2001 发表于 2013-12-13 20:30 | 显示全部楼层
原野之狼 发表于 2013-12-13 17:16
说到效率,既要从细节着手,更要从宏观上着手,这包括两方面: 更优的算法 以及 更优的架构

比如说,排序 ...

绝对的核心精华,常见的技术毛病就是局限于技巧或细节,结果忘了自己到底在追求什么结果,人生亦是如此啊,哲理啊
ZG11211 发表于 2013-12-13 22:04 | 显示全部楼层
我到现在都还没搞懂指针用法,不过我只是觉得只要能在单片机资源与自己的设计要求中寻找到平衡点就可以了。
xlsbz 发表于 2013-12-13 23:54 | 显示全部楼层
帮助文档里好像有  51指针效率不咋地  比数组要低
无名蚂蚁 发表于 2013-12-14 16:26 | 显示全部楼层
哪里不会点哪里;P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部