diff --git a/include/bas_string.h b/include/bas_string.h index da02ffa..1359ff8 100644 --- a/include/bas_string.h +++ b/include/bas_string.h @@ -18,6 +18,7 @@ extern char *strcat(char *dst, const char *src); extern char *strncat(char *dst, const char *src, int max); extern int atoi(const char *c); extern void *memcpy(void *dst, const void *src, size_t n); +extern void bzero(void *s, size_t n); #define isdigit(c) (((c) >= '0') && ((c) <= '9')) #define isupper(c) ((c) >= 'A' && ((c) <= 'Z')) diff --git a/sources/bas_string.c b/sources/bas_string.c index b520dc9..3b02381 100644 --- a/sources/bas_string.c +++ b/sources/bas_string.c @@ -19,6 +19,15 @@ void *memcpy(void *dst, const void *src, size_t n) return dst; } +void bzero(void *s, size_t n) +{ + size_t i; + + for (i = 0; i < n; i++) + ((unsigned char *) s)[i] = '\0'; +} + + int strncmp(const char *s1, const char *s2, int max) { int i; diff --git a/sources/dma.c b/sources/dma.c index f597696..4dcbb02 100644 --- a/sources/dma.c +++ b/sources/dma.c @@ -40,38 +40,22 @@ void *dma_memcpy(void *dst, void *src, size_t n) start = MCF_SLT0_SCNT; /* first check if we can do a "traditional" memcpy() to the destination and measure speed */ - // memcpy(d, s, n); + memcpy(d, s, n); - { - uint32_t *dl = (uint32_t *) dst; - uint32_t *sl = (uint32_t *) src; - do - { - *dl++ = *sl++; - } while (dl < (uint32_t *) (dst + n)); - } end = MCF_SLT0_SCNT; time = (start - end) / 132; xprintf("memcpy() took %d ms (%d.%d Mbytes/second)\r\n", time, n / time / 1000, n / time % 1000); flush_and_invalidate_caches(); - //#endif +//#endif + xprintf("clear target area after memcpy():"); + bzero(dst, n); flush_and_invalidate_caches(); - - { - uint32_t *dl = (uint32_t *) dst; - - xprintf("clear target area after memcpy():"); - do - { - *dl++ = 0; - } while (dl < (uint32_t *) (dst + n)); - xprintf(" finished, flush caches: "); - flush_and_invalidate_caches(); - xprintf("finished\r\n"); - } + xprintf(" finished, flush caches: "); + flush_and_invalidate_caches(); + xprintf("finished\r\n"); start = MCF_SLT0_SCNT; ret = MCD_startDma(0, src, 4, dst, 4, n, 4, DMA_ALWAYS, 7, MCD_SINGLE_DMA|MCD_TT_FLAGS_CW|MCD_TT_FLAGS_RL|MCD_TT_FLAGS_SP, 0); diff --git a/sources/fault_vectors.c b/sources/fault_vectors.c index 06891c6..7b199f1 100644 --- a/sources/fault_vectors.c +++ b/sources/fault_vectors.c @@ -24,6 +24,9 @@ void fault_handler(uint32_t pc, uint32_t format_status) xprintf("format_status: %lx\r\n", format_status); xprintf("pc: %lx\r\n", pc); + /* + * extract info from format-/status word + */ format = (format_status & 0b11110000000000000000000000000000) >> 28; fault_status = ((format_status & 0b00001100000000000000000000000000) >> 26) | ((format_status & 0b00000000000000110000000000000000) >> 16);