今天晚上做了这么一件事情,贴出来给大家讨论:
评估内容: 为了使用同一段代码在不同的平台上编译,使用了和硬件无关的代码。这里我选取了加密算法AES。这个算法中包含大量的数据搬移、查表、异或和移位等运算。程序流程上循环处理比较多。 另外,在程序中使用了标准库函数rand()和memset()。 详细代码见附件中源文件Cryp1.c。
评估平台: 1) MPLAB version 7.40 + C30 version 2.01。硬件选择dsPIC33FJ128GP706。 2) MPLAB version 7.40 + mcc18 version 3.02。硬件选择PIC18F67J10。 3) CodeWarrior version 6.0。硬件选用MC9S08QE128 (所有HCS08都具有同样的结果)。 4) CodeWarrior version 6.0。硬件选用MCF51QE128。
所有上述平台下,均使用编译器的各自默认设置,未增加任何优化措施。
评估结果: 从编译结果可以看出,相同AES代码在V1上生成的机器码尺寸约为PIC18上的一半,即使比dsPIC也要节省30%左右。当然,不同的代码的情况可能不一样,但是由此也可以证明,有赖于V1的CPU架构的优势,其代码效率还是很不错的。甚至HCS08内核的代码效率,也相当令人满意。 具体数据请参考后面的map文件摘录。 (注:此代码在HCS08和V1上验证了运行的正确性,在dsPIC和PIC18上未经验证。)
--------------------------------------------------------------------- 在dsPIC33FJ128GP706上编译的结果 (dsPIC): Program Memory Usage
section address length (PC units) length (bytes) (dec) ------- ------- ----------------- -------------------- .reset 0 0x4 0x6 (6) .ivt 0x4 0xfc 0x17a (378) .aivt 0x104 0xfc 0x17a (378) .text 0x200 0x1c0 0x2a0 (672) .const 0x3c0 0x428 0x63c (1596) code1 0x7e8 0xb60 0x1110 (4368) .dinit 0x1348 0x16e 0x225 (549) .isr 0x14b6 0x2 0x3 (3)
Total program memory used (bytes): 0x1f0e (7950) 6%
Data Memory Usage
section address alignment gaps total length (dec) ------- ------- -------------- ------------------- page1 0x800 0 0x130 (304) .nbss 0x930 0 0x88 (136) .ndata 0x9b8 0 0x78 (120) myData2 0xa30 0 0x22 (34) page 0xa52 0 0x10 (16) .ndata 0xa62 0 0xa (10)
Total data memory used (bytes): 0x26c (620) 3%
--------------------------------------------------------------------- 在PIC18F67J10上编译的结果 (PIC18): Program Memory Usage Start End --------- --------- 0x000000 0x000005 0x00002a 0x002b53 11056 out of 131072 program addresses used, program memory utilization is 8%
--------------------------------------------------------------------- 在MC9S08QE128上编译的结果 (HCS08): Summary of section sizes per section type: READ_ONLY (R): 1C27 (dec: 7207) READ_WRITE (R/W): 22E (dec: 558) NO_INIT (N/I): CF (dec: 207)
ExeFile: -------- Number of blocks to be downloaded: 3 Total size of all blocks to be downloaded: 7207
--------------------------------------------------------------------- 在MCF51QE128上编译的结果 (ColdFire V1): # Memory map: v_addr p_addr size name 00000410 00000410 00000000 .code code 00000410 00000410 00001628 .text code (5672) 00800000 00800000 00000000 .userram userram 00800000 00001A38 00000080 .data userram 00800080 00800080 00000278 .bss userram 008002F8 008002F8 00000000 .custom userram 008002F8 00001AB8 00000018 .romp userram
---------------------------------------------------------------------
https://bbs.21ic.com/upfiles/img/200710/20071011231413999.rar 相关链接:https://bbs.21ic.com/upfiles/img/200710/20071011231413999.rar |