From: Øyvind Harboe Date: Sat, 21 Nov 2009 22:45:36 +0000 (+0100) Subject: embedded: save stack X-Git-Tag: v0.4.0-rc1~458 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=31da0003dc6d307faa8fd66eb23319bd5e9ab7dd;p=openocd embedded: save stack and also do not recaluate the crc32_table upon every invocation. Signed-off-by: Øyvind Harboe --- diff --git a/src/target/image.c b/src/target/image.c index 8774c251..76c8cc90 100644 --- a/src/target/image.c +++ b/src/target/image.c @@ -1023,17 +1023,23 @@ int image_calculate_checksum(uint8_t* buffer, uint32_t nbytes, uint32_t* checksu uint32_t crc = 0xffffffff; LOG_DEBUG("Calculating checksum"); - uint32_t crc32_table[256]; + static uint32_t crc32_table[256]; - /* Initialize the CRC table and the decoding table. */ - int i, j; - unsigned int c; - for (i = 0; i < 256; i++) + static bool first_init = false; + if (!first_init) { - /* as per gdb */ - for (c = i << 24, j = 8; j > 0; --j) - c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1); - crc32_table[i] = c; + /* Initialize the CRC table and the decoding table. */ + int i, j; + unsigned int c; + for (i = 0; i < 256; i++) + { + /* as per gdb */ + for (c = i << 24, j = 8; j > 0; --j) + c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1); + crc32_table[i] = c; + } + + first_init = true; } while (nbytes > 0)