brainelectronics / micropython-modbus

MicroPython Modbus RTU Slave/Master and TCP Server/Slave library
GNU General Public License v3.0
104 stars 45 forks source link

CRC16_TABLE memory footprint #81

Closed florentbr closed 1 year ago

florentbr commented 1 year ago

Description

The current implementation is using a tuple to store the lookup table for the checksum. Using a typed array would reduce the memory usage by 2032 bytes:

import array

CRC16_TABLE = array.array('H', 
b"\x00\x00\xC0\xC1\xC1\x81\x01\x40\xC3\x01\x03\xC0\x02\x80\xC2\x41"
b"\xC6\x01\x06\xC0\x07\x80\xC7\x41\x05\x00\xC5\xC1\xC4\x81\x04\x40"
b"\xCC\x01\x0C\xC0\x0D\x80\xCD\x41\x0F\x00\xCF\xC1\xCE\x81\x0E\x40"
b"\x0A\x00\xCA\xC1\xCB\x81\x0B\x40\xC9\x01\x09\xC0\x08\x80\xC8\x41"
b"\xD8\x01\x18\xC0\x19\x80\xD9\x41\x1B\x00\xDB\xC1\xDA\x81\x1A\x40"
b"\x1E\x00\xDE\xC1\xDF\x81\x1F\x40\xDD\x01\x1D\xC0\x1C\x80\xDC\x41"
b"\x14\x00\xD4\xC1\xD5\x81\x15\x40\xD7\x01\x17\xC0\x16\x80\xD6\x41"
b"\xD2\x01\x12\xC0\x13\x80\xD3\x41\x11\x00\xD1\xC1\xD0\x81\x10\x40"
b"\xF0\x01\x30\xC0\x31\x80\xF1\x41\x33\x00\xF3\xC1\xF2\x81\x32\x40"
b"\x36\x00\xF6\xC1\xF7\x81\x37\x40\xF5\x01\x35\xC0\x34\x80\xF4\x41"
b"\x3C\x00\xFC\xC1\xFD\x81\x3D\x40\xFF\x01\x3F\xC0\x3E\x80\xFE\x41"
b"\xFA\x01\x3A\xC0\x3B\x80\xFB\x41\x39\x00\xF9\xC1\xF8\x81\x38\x40"
b"\x28\x00\xE8\xC1\xE9\x81\x29\x40\xEB\x01\x2B\xC0\x2A\x80\xEA\x41"
b"\xEE\x01\x2E\xC0\x2F\x80\xEF\x41\x2D\x00\xED\xC1\xEC\x81\x2C\x40"
b"\xE4\x01\x24\xC0\x25\x80\xE5\x41\x27\x00\xE7\xC1\xE6\x81\x26\x40"
b"\x22\x00\xE2\xC1\xE3\x81\x23\x40\xE1\x01\x21\xC0\x20\x80\xE0\x41"
b"\xA0\x01\x60\xC0\x61\x80\xA1\x41\x63\x00\xA3\xC1\xA2\x81\x62\x40"
b"\x66\x00\xA6\xC1\xA7\x81\x67\x40\xA5\x01\x65\xC0\x64\x80\xA4\x41"
b"\x6C\x00\xAC\xC1\xAD\x81\x6D\x40\xAF\x01\x6F\xC0\x6E\x80\xAE\x41"
b"\xAA\x01\x6A\xC0\x6B\x80\xAB\x41\x69\x00\xA9\xC1\xA8\x81\x68\x40"
b"\x78\x00\xB8\xC1\xB9\x81\x79\x40\xBB\x01\x7B\xC0\x7A\x80\xBA\x41"
b"\xBE\x01\x7E\xC0\x7F\x80\xBF\x41\x7D\x00\xBD\xC1\xBC\x81\x7C\x40"
b"\xB4\x01\x74\xC0\x75\x80\xB5\x41\x77\x00\xB7\xC1\xB6\x81\x76\x40"
b"\x72\x00\xB2\xC1\xB3\x81\x73\x40\xB1\x01\x71\xC0\x70\x80\xB0\x41"
b"\x50\x00\x90\xC1\x91\x81\x51\x40\x93\x01\x53\xC0\x52\x80\x92\x41"
b"\x96\x01\x56\xC0\x57\x80\x97\x41\x55\x00\x95\xC1\x94\x81\x54\x40"
b"\x9C\x01\x5C\xC0\x5D\x80\x9D\x41\x5F\x00\x9F\xC1\x9E\x81\x5E\x40"
b"\x5A\x00\x9A\xC1\x9B\x81\x5B\x40\x99\x01\x59\xC0\x58\x80\x98\x41"
b"\x88\x01\x48\xC0\x49\x80\x89\x41\x4B\x00\x8B\xC1\x8A\x81\x4A\x40"
b"\x4E\x00\x8E\xC1\x8F\x81\x4F\x40\x8D\x01\x4D\xC0\x4C\x80\x8C\x41"
b"\x44\x00\x84\xC1\x85\x81\x45\x40\x87\x01\x47\xC0\x46\x80\x86\x41"
b"\x82\x01\x42\xC0\x43\x80\x83\x41\x41\x00\x81\xC1\x80\x81\x40\x40")

Reproduction steps

na

MicroPython version

v1.18

MicroPython board

pyboard

MicroPython Modbus version

v2.3.7

Relevant log output

No response

User code

No response

Additional informations

No response

florentbr commented 1 year ago

Closing as the difference is no longer significant with MicroPython v1.20 compared to v1.18 .