搜索
bottom↓
回复: 10

为什么说在小型的微型控制器上使用C函数指针是一种挑战

[复制链接]
头像被屏蔽

出0入0汤圆

发表于 2013-10-15 23:49:06 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-10-16 08:18:59 | 显示全部楼层
不懂,高手解答~

出0入4汤圆

发表于 2013-10-16 08:24:28 | 显示全部楼层
因为产品设计本身就是一种挑战

出0入0汤圆

发表于 2013-10-16 08:28:58 | 显示全部楼层
没有不能用的指针,只有用不好的指针~

出0入0汤圆

发表于 2013-10-16 08:40:32 | 显示全部楼层
“挑战”二字可以被解释成很多意思,这要看说这话的人指什么了

出0入0汤圆

发表于 2013-10-16 08:45:57 | 显示全部楼层
有小的,低端的芯片,编译器不支持函数指针。
以前看PIC就是。
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2013-10-17 09:41:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2013-10-18 11:16:46 | 显示全部楼层
不是挑战是方便,比如51用DPTR做指针,如有这样的一个函数调用fun("string");那个string是存放在flash中的ASCII码。编译器会用DPTR作为指针访问flash空间

出0入0汤圆

发表于 2013-10-19 07:26:33 | 显示全部楼层
本帖最后由 barryliu 于 2013-10-19 07:30 编辑

C里的指针翻译到汇编去后就是间接寻址,如果指针指向的是结构体,就还得有基址变址寻指。
如果CPU没有这两种指令,就需要用多条基础指令堆叠,其处理速度可想而知。
51有这两种指令,但只有一个16位寄存器(DPTR)和2个8位(R0 & R1)能参与该类指令的运行,如果一段语句中需要多个指针同时参与操作,就需要把数据往这个寄存器来搬来搬去。只有很有经验的人才知道如何写C代码才能提高这种操作效率,有些老程序员干脆放弃C,直接写汇编。
有些CPU根本就没有这类指令。

出0入0汤圆

发表于 2013-10-19 10:07:16 | 显示全部楼层
挑战谈不上,至少在51上使用函数指针是不合适的。
51功能上可以使用函数指针,但会使内存覆盖分析失效,结果就是内存占用大增。
传统方法是编译器根据函数调用关系,分析哪些局部变量可以公用内存。用到函数指针后,编译时就无法知道谁调用谁,从而编译器无法优化。

出0入0汤圆

发表于 2013-10-19 10:14:25 | 显示全部楼层
health 发表于 2013-10-19 10:07
挑战谈不上,至少在51上使用函数指针是不合适的。
51功能上可以使用函数指针,但会使内存覆盖分析失效,结 ...

对,所以需要手动设置好函数调用树的关系.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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