(48g/50g) CRC-32 - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: HP Software Libraries (/forum-10.html) +--- Forum: General Software Library (/forum-13.html) +--- Thread: (48g/50g) CRC-32 (/thread-1814.html) |
(48g/50g) CRC-32 - sirhecubus42 - 07-10-2014 05:02 PM This UserRPL program computes the CRC-32 of a hexadecimal string (e.g. "078F245BA1204C"). I use it at work to generate CRC's that match those generated by the DSU on the Atmel SAMD20 series of Cortex-M0+ microcontrollers. It is based on the implementation found here (since I didn't want a lookup table): http://www.hackersdelight.org/hdcodetxt/crc.c.txt My program differs in that the CRC at the end is in one's complement format because that's what the SAMD DSU produces. Adding NOT as the last program statement will give the correct format. I used "#0h NOT" as the value to initialize the CRC because it takes up fewer bytes than #FFFFFFFFh. Hex strings with an odd number of characters are assumed to have a leading "0". Edit: Replaced DUPDUP with two DUPs so it would work on the 48G...not sure about the 48S/SX...don't have one to test. « 32 STWS # 0h NOT SWAP DUP SIZE DUP 2 MOD IF 0 = THEN 2 / ELSE 2 / 1 - END 0 SWAP FOR i DUP DUP SIZE i 2 * - DUP 1 - SWAP SUB "#" SWAP + "h" + STR-> ROT XOR 0 7 FOR j DUP # 1h AND NEG # EDB88320h AND SWAP SR XOR NEXT SWAP NEXT SWAP » |