avr-libc-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-libc-commit] [2133] Add test scripts for <util/crc16.h>.


From: Joerg Wunsch
Subject: [avr-libc-commit] [2133] Add test scripts for <util/crc16.h>.
Date: Tue, 08 Jun 2010 11:10:44 +0000

Revision: 2133
          http://svn.sv.gnu.org/viewvc/?view=rev&root=avr-libc&revision=2133
Author:   joerg_wunsch
Date:     2010-06-08 11:10:43 +0000 (Tue, 08 Jun 2010)
Log Message:
-----------
Add test scripts for <util/crc16.h>.

I tried to find 3rd party test vectors, or independent implementations
to verify against wherever possible.  Couldn't find one for X-modem
though.

Modified Paths:
--------------
    trunk/avr-libc/ChangeLog

Added Paths:
-----------
    trunk/avr-libc/tests/simulate/util/
    trunk/avr-libc/tests/simulate/util/crc16-1.c
    trunk/avr-libc/tests/simulate/util/crc16-2.c
    trunk/avr-libc/tests/simulate/util/crc16-3.c
    trunk/avr-libc/tests/simulate/util/crc16-4.c

Modified: trunk/avr-libc/ChangeLog
===================================================================
--- trunk/avr-libc/ChangeLog    2010-06-08 08:45:56 UTC (rev 2132)
+++ trunk/avr-libc/ChangeLog    2010-06-08 11:10:43 UTC (rev 2133)
@@ -1,5 +1,13 @@
 2010-06-08  Joerg Wunsch <address@hidden>
 
+       Add test scripts for <util/crc16.h>
+       * tests/simulate/util/crc16-1.c: New file.
+       * tests/simulate/util/crc16-2.c: (Ditto.)
+       * tests/simulate/util/crc16-3.c: (Ditto.)
+       * tests/simulate/util/crc16-4.c: (Ditto.)
+
+2010-06-08  Joerg Wunsch <address@hidden>
+
        Submitted by Don Kinzer:
        bug #29950: ATtiny167 SPM_PAGESIZE Discrepancy
        * include/avr/iotn167.h: Bump SPM_PAGESIZE.

Added: trunk/avr-libc/tests/simulate/util/crc16-1.c
===================================================================
--- trunk/avr-libc/tests/simulate/util/crc16-1.c                                
(rev 0)
+++ trunk/avr-libc/tests/simulate/util/crc16-1.c        2010-06-08 11:10:43 UTC 
(rev 2133)
@@ -0,0 +1,86 @@
+/* Copyright (c) 2010  Joerg Wunsch
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   * Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+   * Neither the name of the copyright holders nor the names of
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id$ */
+
+/* Test the various CRC algorithms.
+   Part 1: CRC-16, x^16 + x^15 + x^2 + 1 (0xa001), ANSI X3.28 */
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __AVR__
+# include <util/crc16.h>
+#else  /* host computer */
+
+static uint16_t
+_crc16_update(uint16_t crc, uint8_t a)
+{
+    int i;
+
+    crc ^= a;
+    for (i = 0; i < 8; ++i)
+    {
+        if (crc & 1)
+            crc = (crc >> 1) ^ 0xA001;
+        else
+            crc = (crc >> 1);
+    }
+
+    return crc;
+}
+
+#endif  /* AVR */
+
+const char message[] = "Hello, world!";
+const size_t mlen = 13;
+
+/*
+ * See MODBUS Over Serial Line FOR LEGACY APPLICATIONS ONLY
+ *
+ * http://www.modbus.org/docs/PI_MBUS_300.pdf
+ *
+ * for an alternate (table based) reference implementation.  Note that
+ * this implementation internally byte swaps the CRC, so the result
+ * there is 0x4971.
+ */
+const uint16_t crc_result = 0x7149;
+
+int main(void)
+{
+    uint16_t crc = 0xffff;
+    uint8_t i;
+
+    for (i = 0; i < mlen; i++)
+        crc = _crc16_update(crc, message[i]);
+    if (crc != crc_result) return __LINE__;
+
+    return 0;
+}
+


Property changes on: trunk/avr-libc/tests/simulate/util/crc16-1.c
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Author Id Date
Added: svn:eol-style
   + native

Added: trunk/avr-libc/tests/simulate/util/crc16-2.c
===================================================================
--- trunk/avr-libc/tests/simulate/util/crc16-2.c                                
(rev 0)
+++ trunk/avr-libc/tests/simulate/util/crc16-2.c        2010-06-08 11:10:43 UTC 
(rev 2133)
@@ -0,0 +1,75 @@
+/* Copyright (c) 2010  Joerg Wunsch
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   * Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+   * Neither the name of the copyright holders nor the names of
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id$ */
+
+/* Test the various CRC algorithms.
+   Part 2: CCITT-CRC x^16 + x^12 + x^5 + 1 (0x8408) */
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __AVR__
+# include <util/crc16.h>
+#else  /* host computer */
+
+static uint16_t
+_crc_ccitt_update (uint16_t crc, uint8_t data)
+{
+    data ^= crc & 0xff;
+    data ^= data << 4;
+
+    return ((((uint16_t)data << 8) | ((crc & 0xff00) >> 8))
+            ^ (uint8_t)(data >> 4)
+            ^ ((uint16_t)data << 3));
+}
+
+#endif  /* AVR */
+
+/*
+ * Test vector taken from IEEE 802.15.4 standard.  This is a complete
+ * frame that already includes the frame-check sequence (FCS), so
+ * recalculating it must yield 0.
+ */
+const char message[] = "\x02\x00\x6a\xe4\x79";
+const size_t mlen = 5;
+
+
+int main(void)
+{
+    uint16_t crc = 0;
+    uint8_t i;
+
+    for (i = 0; i < mlen; i++)
+        crc = _crc_ccitt_update(crc, message[i]);
+    if (crc != 0) return __LINE__;
+
+    return 0;
+}
+


Property changes on: trunk/avr-libc/tests/simulate/util/crc16-2.c
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Author Id Date
Added: svn:eol-style
   + native

Added: trunk/avr-libc/tests/simulate/util/crc16-3.c
===================================================================
--- trunk/avr-libc/tests/simulate/util/crc16-3.c                                
(rev 0)
+++ trunk/avr-libc/tests/simulate/util/crc16-3.c        2010-06-08 11:10:43 UTC 
(rev 2133)
@@ -0,0 +1,76 @@
+/* Copyright (c) 2010  Joerg Wunsch
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   * Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+   * Neither the name of the copyright holders nor the names of
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id$ */
+
+/* Test the various CRC algorithms.
+   Part 3: Xmodem-CRC x^16 + x^12 + x^5 + 1 (0x1021) */
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __AVR__
+# include <util/crc16.h>
+#else  /* host computer */
+
+static uint16_t
+_crc_xmodem_update (uint16_t crc, uint8_t data)
+{
+    int i;
+
+    crc = crc ^ ((uint16_t)data << 8);
+    for (i=0; i<8; i++)
+    {
+        if (crc & 0x8000)
+            crc = (crc << 1) ^ 0x1021;
+        else
+            crc <<= 1;
+    }
+
+    return crc;
+}
+
+#endif  /* AVR */
+
+const char message[] = "Hello, world!";
+const size_t mlen = 13;
+const uint16_t crc_result = 0x7ade;
+
+int main(void)
+{
+    uint16_t crc = 0;
+    uint8_t i;
+
+    for (i = 0; i < mlen; i++)
+        crc = _crc_xmodem_update(crc, message[i]);
+    if (crc != crc_result) return __LINE__;
+
+    return 0;
+}
+


Property changes on: trunk/avr-libc/tests/simulate/util/crc16-3.c
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Author Id Date
Added: svn:eol-style
   + native

Added: trunk/avr-libc/tests/simulate/util/crc16-4.c
===================================================================
--- trunk/avr-libc/tests/simulate/util/crc16-4.c                                
(rev 0)
+++ trunk/avr-libc/tests/simulate/util/crc16-4.c        2010-06-08 11:10:43 UTC 
(rev 2133)
@@ -0,0 +1,76 @@
+/* Copyright (c) 2010  Joerg Wunsch
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   * Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+   * Neither the name of the copyright holders nor the names of
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id$ */
+
+/* Test the various CRC algorithms.
+   Part 4: Dallas i-Button 8-bit CRC, x^8 + x^5 + x^4 + 1 (0x8C) */
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __AVR__
+# include <util/crc16.h>
+#else  /* host computer */
+
+static uint8_t
+_crc_ibutton_update(uint8_t crc, uint8_t data)
+{
+    uint8_t i;
+
+    crc = crc ^ data;
+    for (i = 0; i < 8; i++)
+    {
+        if (crc & 0x01)
+            crc = (crc >> 1) ^ 0x8C;
+        else
+            crc >>= 1;
+    }
+
+    return crc;
+}
+
+#endif  /* AVR */
+
+/* Dallas i-Button test vector (including CRC) */
+const char message[] = "\x02\x1c\xb8\x01\x00\x00\x00\xa2";
+const size_t mlen = 8;
+
+int main(void)
+{
+    uint8_t crc = 0;
+    uint8_t i;
+
+    for (i = 0; i < mlen; i++)
+        crc = _crc_ibutton_update(crc, message[i]);
+    if (crc != 0) return __LINE__;
+
+    return 0;
+}
+


Property changes on: trunk/avr-libc/tests/simulate/util/crc16-4.c
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Author Id Date
Added: svn:eol-style
   + native




reply via email to

[Prev in Thread] Current Thread [Next in Thread]