打印

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

[复制链接]
2539|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ms|  楼主 | 2008-7-30 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我定义了一个位变量 MyFlag.bits.CalibrationOk
定义方法如下
union{
    int FlagByte;
    struct{
          unsigned Ch4CanRead:1;
          unsigned Ch2CanRead:1;
          unsigned Ch1CanRead:1;
          unsigned AdValCanRead:1;
          unsigned CalibrationOk:1;
    }bits;
}MyFlag;

可是在主程序按如下使用时
while(1)
    {
        MyFlag.bits.CalibrationOk = PORTBbits.RB11;
    }
他生成的汇编有一堆,


而不是简单的一两条位操作,是我的方法问题吗?
如何才能生成 mov bit ,bit 类似的指令呢?
沙发
ms|  楼主 | 2008-8-2 08:29 | 只看该作者

处 女 地?

呵呵,举杯庆祝,我踏入了一片 处 女 地.

使用特权

评论回复
板凳
xieyuanbin| | 2008-8-2 09:43 | 只看该作者

PIC30可能有这样的问题.

我也发现此类问题,不过MC18和PICC16没发现.

使用特权

评论回复
地板
yewuyi| | 2008-8-2 10:42 | 只看该作者

可能和你的定义有关,

可能在直接bit定义位变量时可以生成,但你那是按照整型字节定义的,也许编译器未做这个优化。。。

使用特权

评论回复
5
su_mj000| | 2008-8-2 13:24 | 只看该作者

位操作运算的误区

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

使用特权

评论回复
6
machunshui| | 2008-8-2 21:00 | 只看该作者

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

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

使用特权

评论回复
7
machunshui| | 2008-8-3 19:56 | 只看该作者

优化了,没有?

优化了,没有?

C30只要2级优化以后,代码简练很多.

使用特权

评论回复
8
ms|  楼主 | 2008-8-5 17:26 | 只看该作者

谢谢回复


回(yewuyi)
dsPIC 有 BIT 的用法吗?我用怎么编译不了?
————————————————————————————
回(machunshui)
我用了2级优化后

确实变少了,但还是不是我想要的mov bit,bit

回(su_mj000 )
或许只能按你的说法来了,呵呵。

使用特权

评论回复
9
yewuyi| | 2008-8-6 08:40 | 只看该作者

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

使用特权

评论回复
10
兰天白云| | 2008-8-6 08:53 | 只看该作者

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

DSPIC的空间确实小了点

使用特权

评论回复
11
machunshui| | 2008-8-6 11:47 | 只看该作者

8楼用的是S级别优化

从图片上看,8楼用的是S级别优化,主要是对代码尺寸优化,

可以用2级优化,3级优化看看表现如何

使用特权

评论回复
12
zalin| | 2008-8-6 20:58 | 只看该作者

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

使用特权

评论回复
13
zuoyou| | 2008-8-7 13:22 | 只看该作者

re

位变量结构体"bits"中的成员声明要使用逗号","----甚么意思?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

ms

3

主题

31

帖子

0

粉丝