altos: Need to use 16-bit counts for ao_xmem functions
authorKeith Packard <keithp@keithp.com>
Fri, 14 Sep 2012 23:56:04 +0000 (16:56 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 14 Sep 2012 23:56:04 +0000 (16:56 -0700)
Trying to use 8-bit counts is a nice optimization which fails when the
count is larger than 255, as is the case with clearing the flash block
in the AT45 driver. This bug resulted in the inability to erase
flights on TeleMetrum v1.0 boards.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/cc1111/ao_arch.h
src/cc1111/ao_string.c

index a97515a7547509d31b1a4328d2f272fa7bd0e28e..7fdfad80825cbbd22fffe62d6e0b89e7d52bd0f3 100644 (file)
@@ -229,17 +229,17 @@ ao_button_clear(void) __critical;
 /* ao_string.c */
 
 void
 /* ao_string.c */
 
 void
-_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint8_t count);
+_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint16_t count);
 
 #define ao_xmemcpy(d,s,c) _ao_xmemcpy(d,s,c)
 
 void
 
 #define ao_xmemcpy(d,s,c) _ao_xmemcpy(d,s,c)
 
 void
-_ao_xmemset(__xdata void *dst, uint8_t value, uint8_t count);
+_ao_xmemset(__xdata void *dst, uint8_t value, uint16_t count);
 
 #define ao_xmemset(d,v,c) _ao_xmemset(d,v,c)
 
 int8_t
 
 #define ao_xmemset(d,v,c) _ao_xmemset(d,v,c)
 
 int8_t
-_ao_xmemcmp(__xdata void *a, __xdata void *b, uint8_t count);
+_ao_xmemcmp(__xdata void *a, __xdata void *b, uint16_t count);
 
 #define ao_xmemcmp(d,s,c) _ao_xmemcmp((d), (s), (c))
 
 
 #define ao_xmemcmp(d,s,c) _ao_xmemcmp((d), (s), (c))
 
index 3a07e47ed5c3d9effb73b37ef6d657c08375dd8d..85d6383e878c321b1aeb598b44eab63fb318a54d 100644 (file)
@@ -18,7 +18,7 @@
 #include "ao.h"
 
 void
 #include "ao.h"
 
 void
-_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint8_t count)
+_ao_xmemcpy(__xdata void *dst, __xdata void *src, uint16_t count)
 {
        while (count--) {
                *(__xdata uint8_t *) dst = *(__xdata uint8_t *) src;
 {
        while (count--) {
                *(__xdata uint8_t *) dst = *(__xdata uint8_t *) src;
@@ -28,7 +28,7 @@ _ao_xmemcpy(__xdata void *dst, __xdata void *src, uint8_t count)
 }
 
 void
 }
 
 void
-_ao_xmemset(__xdata void *dst, uint8_t v, uint8_t count)
+_ao_xmemset(__xdata void *dst, uint8_t v, uint16_t count)
 {
        while (count--) {
                *(__xdata uint8_t *) dst = v;
 {
        while (count--) {
                *(__xdata uint8_t *) dst = v;
@@ -37,7 +37,7 @@ _ao_xmemset(__xdata void *dst, uint8_t v, uint8_t count)
 }
 
 int8_t
 }
 
 int8_t
-_ao_xmemcmp(__xdata void *a, __xdata void *b, uint8_t count)
+_ao_xmemcmp(__xdata void *a, __xdata void *b, uint16_t count)
 {
        while (count--) {
                int8_t  d = *(__xdata int8_t *) a - *(__xdata int8_t *) b;
 {
        while (count--) {
                int8_t  d = *(__xdata int8_t *) a - *(__xdata int8_t *) b;