dsp33xx c语言为操作转为汇编后太罗嗦啦

[复制链接]
3429|12
 楼主| ms 发表于 2008-7-30 10:42 | 显示全部楼层 |阅读模式
我定义了一个位变量&nbsp;MyFlag.bits.CalibrationOk<br />定义方法如下<br />union{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;FlagByte;<br />&nbsp;&nbsp;&nbsp;&nbsp;struct{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;Ch4CanRead:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;Ch2CanRead:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;Ch1CanRead:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;AdValCanRead:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;CalibrationOk:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}bits;<br />}MyFlag;<br /><br />可是在主程序按如下使用时<br />while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyFlag.bits.CalibrationOk&nbsp;=&nbsp;PORTBbits.RB11;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />他生成的汇编有一堆,<br /><img src="https://bbs.21ic.com/upfiles/img/20079/200791410550430.jpg"><br /><br />而不是简单的一两条位操作,是我的方法问题吗?<br />如何才能生成&nbsp;mov&nbsp;bit&nbsp;,bit&nbsp;类似的指令呢?
 楼主| ms 发表于 2008-8-2 08:29 | 显示全部楼层

处 女 地?

呵呵,举杯庆祝,我踏入了一片&nbsp;处&nbsp;女&nbsp;地.
xieyuanbin 发表于 2008-8-2 09:43 | 显示全部楼层

PIC30可能有这样的问题.

我也发现此类问题,不过MC18和PICC16没发现.
yewuyi 发表于 2008-8-2 10:42 | 显示全部楼层

可能和你的定义有关,

可能在直接bit定义位变量时可以生成,但你那是按照整型字节定义的,也许编译器未做这个优化。。。
su_mj000 发表于 2008-8-2 13:24 | 显示全部楼层

位操作运算的误区

C语言的结构(struct)允许用户自定义位结构(bit&nbsp;field)。从语言结构来看,<br />它在使用上(指源程序的表达)显得非常干净、利落。但实际上,它在指令级操作、实现上往往是非常低效的。以赋值操作而言(LZ的例子),源变量的位址(bit&nbsp;location)与目的变量的位址可以不同步。这就必须牵涉到截取、移位、清除(目的变量的位址)、装配等一系列的步骤。如果涉及到长位区(multiple-bit&nbsp;field)的运算(逻辑、算术),这问题就更加特出。追求高效的场合,可以牺牲<br />RAM空间换取较快的运算,以RAM换取ROM。比如用char代替bit&nbsp;field。<br />
machunshui 发表于 2008-8-2 21:00 | 显示全部楼层

搞编译器的大师出马解释就是非同一般

搞编译器的大师出马解释就是非同一般
machunshui 发表于 2008-8-3 19:56 | 显示全部楼层

优化了,没有?

优化了,没有?<br /><br />C30只要2级优化以后,代码简练很多.
 楼主| ms 发表于 2008-8-5 17:26 | 显示全部楼层

谢谢回复

<br /><b>回(yewuyi)</b><br /><b>dsPIC&nbsp;有&nbsp;BIT&nbsp;的用法吗?我用怎么编译不了?</b><br /><b>————————————————————————————</b><br /><b>回(machunshui)</b><br />我用了2级优化后<br /><img src="https://bbs.21ic.com/upfiles/img/20079/2007920173855524.jpg"><br />确实变少了,但还是不是我想要的mov&nbsp;bit,bit<br /><img src="https://bbs.21ic.com/upfiles/img/20079/2007920173930841.jpg"><br /><b>回(su_mj000&nbsp;)</b><br /><b>或许只能按你的说法来了,呵呵。</b>
yewuyi 发表于 2008-8-6 08:40 | 显示全部楼层

没用过DSPIC,不知道有没有BIT,呵呵,看来我需要看看了

  
兰天白云 发表于 2008-8-6 08:53 | 显示全部楼层

su_mj000 :如果我要求空间最小呢?怎么写?

DSPIC的空间确实小了点
machunshui 发表于 2008-8-6 11:47 | 显示全部楼层

8楼用的是S级别优化

从图片上看,8楼用的是S级别优化,主要是对代码尺寸优化,<br /><br />可以用2级优化,3级优化看看表现如何
zalin 发表于 2008-8-6 20:58 | 显示全部楼层

位变量结构体"bits"中的成员声明要使用逗号","

  
zuoyou 发表于 2008-8-7 13:22 | 显示全部楼层

re

位变量结构体&quot;bits&quot;中的成员声明要使用逗号&quot;,&quot;----甚么意思?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

ms

3

主题

31

帖子

0

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