打印

极限编程题目C:大数组赋值

[复制链接]
2301|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanyong|  楼主 | 2013-4-30 09:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
   for(i=0;i<1536;i++)
   {array[i]=0xFF;
   }

pic18实现如上功能所需要的时间及rom空间。

用不同c编译器对比看看呢,看哪种编译器最优。
沙发
yklstudent| | 2013-4-30 10:10 | 只看该作者
欢迎楼猪出验证报告

使用特权

评论回复
板凳
lanyong|  楼主 | 2013-4-30 10:55 | 只看该作者
ccs:
23047指令周期。

824:                 for(i=0;i<1536;i++)
002DE    6A05     CLRF 0x5, ACCESS
002E0    6A04     CLRF 0x4, ACCESS
002E2    5005     MOVF 0x5, W, ACCESS
002E4    0805     SUBLW 0x5
002E6    E30B     BNC 0x2fe
825:                  {array[i]=0xFF;;
002E8    0E10     MOVLW 0x10
002EA    2404     ADDWF 0x4, W, ACCESS
002EC    6EE9     MOVWF 0xfe9, ACCESS
002EE    0E00     MOVLW 0
002F0    2005     ADDWFC 0x5, W, ACCESS
002F2    6EEA     MOVWF 0xfea, ACCESS
002F4    68EF     SETF 0xfef, ACCESS
826:                  }
002F6    2A04     INCF 0x4, F, ACCESS
002F8    B4D8     BTFSC 0xfd8, 0x2, ACCESS
002FA    2A05     INCF 0x5, F, ACCESS
002FC    D7F2     BRA 0x2e2

看来是比较蠢。哈哈。

使用特权

评论回复
地板
lanyong|  楼主 | 2013-4-30 10:58 | 只看该作者
for(i=0;i<1536;i++)
0013E:  CLRF   i+1
00140:  CLRF   i
00142:  MOVF   i+1,W
00144:  SUBLW  05
00146:  BNC   015E
....................    {array[i]=0xFF;;
00148:  MOVLW  array
0014A:  ADDWF  i,W
0014C:  MOVWF  FSR0L
0014E:  MOVLW  array+-16
00150:  ADDWFC i+1,W
00152:  MOVWF  FSR0H
00154:  SETF   INDF0
....................    }
00156:  INCF   04,F
00158:  BTFSC  STATUS.Z
0015A:  INCF   i+1,F
0015C:  BRA    0142

使用特权

评论回复
5
yklstudent| | 2013-4-30 20:13 | 只看该作者
micro C编译器多呢 楼主多试试啊 做个表格最好了

使用特权

评论回复
6
lanyong|  楼主 | 2013-4-30 21:16 | 只看该作者
Haha.其它没怎么玩过。有谁用过xc18,看这个怎么样?

使用特权

评论回复
7
huangxz| | 2013-4-30 23:25 | 只看该作者
c18 v3.45 (33824周期)

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
lanyong + 4
8
lanyong|  楼主 | 2013-5-1 07:27 | 只看该作者
ccs:16007 指令周期

for(j=128;j>0;j--)
00166:  MOVLW  80
00168:  MOVWF  j
0016A:  MOVF   j,F
0016C:  BZ    0262
.................... {   array[i]=0xFF;
0016E:  MOVLW  array
00170:  ADDWF  i,W
00172:  MOVWF  FSR0L
00174:  MOVLW  array+-16
00176:  ADDWFC i+1,W
00178:  MOVWF  FSR0H
0017A:  SETF   INDF0
....................    i++;
0017C:  INCF   04,F
0017E:  BTFSC  STATUS.Z
00180:  INCF   i+1,F
....................    array[i]=0xFF;
00182:  MOVLW  array
00184:  ADDWF  i,W
00186:  MOVWF  FSR0L
00188:  MOVLW  array+-16
0018A:  ADDWFC i+1,W
0018C:  MOVWF  FSR0H
0018E:  SETF   INDF0
....................    i++;
00190:  INCF   04,F
00192:  BTFSC  STATUS.Z
00194:  INCF   i+1,F
....................    array[i]=0xFF;
00196:  MOVLW  array
00198:  ADDWF  i,W
0019A:  MOVWF  FSR0L
0019C:  MOVLW  array+-16
0019E:  ADDWFC i+1,W
001A0:  MOVWF  FSR0H
001A2:  SETF   INDF0
....................    i++;
001A4:  INCF   04,F
001A6:  BTFSC  STATUS.Z
001A8:  INCF   i+1,F
....................    array[i]=0xFF;
001AA:  MOVLW  array
001AC:  ADDWF  i,W
001AE:  MOVWF  FSR0L
001B0:  MOVLW  array+-16
001B2:  ADDWFC i+1,W
001B4:  MOVWF  FSR0H
001B6:  SETF   INDF0
....................    i++;
001B8:  INCF   04,F
001BA:  BTFSC  STATUS.Z
001BC:  INCF   i+1,F
....................  
....................    array[i]=0xFF;
001BE:  MOVLW  array
001C0:  ADDWF  i,W
001C2:  MOVWF  FSR0L
001C4:  MOVLW  array+-16
001C6:  ADDWFC i+1,W
001C8:  MOVWF  FSR0H
001CA:  SETF   INDF0
....................    i++;
001CC:  INCF   04,F
001CE:  BTFSC  STATUS.Z
001D0:  INCF   i+1,F
....................    array[i]=0xFF;
001D2:  MOVLW  array
001D4:  ADDWF  i,W
001D6:  MOVWF  FSR0L
001D8:  MOVLW  array+-16
001DA:  ADDWFC i+1,W
001DC:  MOVWF  FSR0H
001DE:  SETF   INDF0
....................    i++;
001E0:  INCF   04,F
001E2:  BTFSC  STATUS.Z
001E4:  INCF   i+1,F
....................    array[i]=0xFF;
001E6:  MOVLW  array
001E8:  ADDWF  i,W
001EA:  MOVWF  FSR0L
001EC:  MOVLW  array+-16
001EE:  ADDWFC i+1,W
001F0:  MOVWF  FSR0H
001F2:  SETF   INDF0
....................    i++;
001F4:  INCF   04,F
001F6:  BTFSC  STATUS.Z
001F8:  INCF   i+1,F
....................    array[i]=0xFF;
001FA:  MOVLW  array
001FC:  ADDWF  i,W
001FE:  MOVWF  FSR0L
00200:  MOVLW  array+-16
00202:  ADDWFC i+1,W
00204:  MOVWF  FSR0H
00206:  SETF   INDF0
....................    i++;
00208:  INCF   04,F
0020A:  BTFSC  STATUS.Z
0020C:  INCF   i+1,F
....................  
....................    array[i]=0xFF;
0020E:  MOVLW  array
00210:  ADDWF  i,W
00212:  MOVWF  FSR0L
00214:  MOVLW  array+-16
00216:  ADDWFC i+1,W
00218:  MOVWF  FSR0H
0021A:  SETF   INDF0
....................    i++;
0021C:  INCF   04,F
0021E:  BTFSC  STATUS.Z
00220:  INCF   i+1,F
....................    array[i]=0xFF;
00222:  MOVLW  array
00224:  ADDWF  i,W
00226:  MOVWF  FSR0L
00228:  MOVLW  array+-16
0022A:  ADDWFC i+1,W
0022C:  MOVWF  FSR0H
0022E:  SETF   INDF0
....................    i++;
00230:  INCF   04,F
00232:  BTFSC  STATUS.Z
00234:  INCF   i+1,F
....................    array[i]=0xFF;
00236:  MOVLW  array
00238:  ADDWF  i,W
0023A:  MOVWF  FSR0L
0023C:  MOVLW  array+-16
0023E:  ADDWFC i+1,W
00240:  MOVWF  FSR0H
00242:  SETF   INDF0
....................    i++;
00244:  INCF   04,F
00246:  BTFSC  STATUS.Z
00248:  INCF   i+1,F
....................    array[i]=0xFF;
0024A:  MOVLW  array
0024C:  ADDWF  i,W
0024E:  MOVWF  FSR0L
00250:  MOVLW  array+-16
00252:  ADDWFC i+1,W
00254:  MOVWF  FSR0H
00256:  SETF   INDF0
....................    i++;
00258:  INCF   04,F
0025A:  BTFSC  STATUS.Z
0025C:  INCF   i+1,F
....................  
....................  
.................... }
0025E:  DECF   j,F
00260:  BRA    016A
....................  

使用特权

评论回复
9
lanyong|  楼主 | 2013-5-1 07:28 | 只看该作者
        i=0;
        for(j=128;j>0;j--)
{        array[i]=0xFF;
        i++;
        array[i]=0xFF;
        i++;
        array[i]=0xFF;
        i++;
        array[i]=0xFF;
        i++;

        array[i]=0xFF;
        i++;
        array[i]=0xFF;
        i++;
        array[i]=0xFF;
        i++;
        array[i]=0xFF;
        i++;

        array[i]=0xFF;
        i++;
        array[i]=0xFF;
        i++;
        array[i]=0xFF;
        i++;
        array[i]=0xFF;
        i++;


}

使用特权

评论回复
10
lanyong|  楼主 | 2013-5-1 08:47 | 只看该作者
还是太慢,汇编极限是1536指令周期。根本就不在一个数量级,哈哈。

使用特权

评论回复
11
yewuyi| | 2013-5-2 11:46 | 只看该作者
那就嵌入汇编得了呗。

使用特权

评论回复
12
lanyong|  楼主 | 2013-5-2 18:39 | 只看该作者
结贴。

C只是工具而已,汇编才能解题。

使用特权

评论回复
13
Light_David| | 2013-5-3 23:46 | 只看该作者
lanyong 发表于 2013-5-1 08:47
还是太慢,汇编极限是1536指令周期。根本就不在一个数量级,哈哈。

即便使用18的预自增硬件指针,1536cyc可以给1536byte赋值。
不还是得去判断结尾吗?
请教1536 cyc 如何做到的?可否show出来看?

使用特权

评论回复
14
lanyong|  楼主 | 2013-5-4 10:48 | 只看该作者
哈哈,没什么技术含量,一个个拷

使用特权

评论回复
15
兰天白云| | 2013-5-4 14:49 | 只看该作者
有意思,你可以写一个接近汇编的c

使用特权

评论回复
16
Light_David| | 2013-5-5 00:53 | 只看该作者
lanyong 发表于 2013-5-4 10:48
哈哈,没什么技术含量,一个个拷

同哈哈,
即便你用硬指针结合TBLWT+*指令,这里也不再说判断结尾问题,你依然无法完成。
因为要跳转(回转),除非你呆呆写1536条同样的指令,
18F并没有24F那样的无开销循环架构。

现在给你1536 X 2个周期你依然无法完成.....

使用特权

评论回复
17
lanyong|  楼主 | 2013-5-5 07:50 | 只看该作者
Light_David 发表于 2013-5-5 00:53
同哈哈,
即便你用硬指针结合TBLWT+*指令,这里也不再说判断结尾问题,你依然无法完成。
因为要跳转(回 ...

要打赌不啊?稍微比1536多一点,还不至于3k啊。兰天,帮我顶下哈。哈哈。

使用特权

评论回复
18
lanyong|  楼主 | 2013-5-5 07:51 | 只看该作者
都说一个个copy 了,用1k5,哈哈。

使用特权

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

本版积分规则

19

主题

457

帖子

2

粉丝