搜索
bottom↓
回复: 6

C蛋痛C1110之3,无意义的优化。

[复制链接]

出0入0汤圆

发表于 2010-8-11 09:47:40 | 显示全部楼层 |阅读模式
做“双100”通讯,无线和UART都是100K。
在仿真的时候,看编译生成的代码,结果又发现蛋痛的地方。
只要是在中断中,有对XDATA的操作,或者有3个以上的变量,就会调用一个叫enter xsp的函数,是编译器自己产生的,这个的功能就是把堆栈保存在XDATA中,指令60多条,push movx满天飞,完了还有exit xsp,60多条指令基本上是3~4个周期的,进出堆栈就是400多个周期。26M的单片机响应26K的中断事件,中断的CPU资源在1000个周期,乍一看很多,其实不多。1000个周期,对于chipcon的8051内核来说,做不了什么事。

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入42汤圆

发表于 2010-8-11 10:17:05 | 显示全部楼层
支持LZ“蛋痛”,期待蛋痛4

出0入0汤圆

 楼主| 发表于 2010-8-11 11:22:27 | 显示全部楼层
我的建议是,对于传输速率超过100K,即中断频率最大能上10K的通讯,采用DMA的方式。

出0入0汤圆

发表于 2010-8-12 14:31:29 | 显示全部楼层
楼主对C51的参数调用规则不是很熟悉.
在KEIL内(其它如何,未作了解),使用R0-R7传递参数,且最多三个.当有指针或长整形之类的数据时,还可能达不到三个.超过这个参数数量的,就得要通过XDATA进行堆栈处理.
建议楼主:
1\对于中断内调用的函数,严格的规划参数类型与数量.
2\对于有多个指针,多种数据,使部分参数不能通过R0-R7来传递的,通过数据结构的方式以减少参数数量.
3、对于多个整形参数,可以多个参数组合为整形参数,如两个字节参数组合为一个整形参数。毕竟通过拆分一个整数比栈操作省不少。
以上是本人常用的方法。

出0入0汤圆

发表于 2010-8-12 15:10:13 | 显示全部楼层
51 SP只有8位,保存到XDATA是防止SP溢出。

出0入0汤圆

发表于 2010-10-9 17:10:10 | 显示全部楼层
哈哈,有意思

出0入0汤圆

发表于 2010-10-22 09:49:54 | 显示全部楼层
还是要多找原因~!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 04:27

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

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