modified to use library functions (memcpy(), bzero())

This commit is contained in:
Markus Fröschle
2013-08-21 08:55:47 +00:00
parent 188f229132
commit b84d4c4e9b
4 changed files with 20 additions and 23 deletions

View File

@@ -18,6 +18,7 @@ extern char *strcat(char *dst, const char *src);
extern char *strncat(char *dst, const char *src, int max); extern char *strncat(char *dst, const char *src, int max);
extern int atoi(const char *c); extern int atoi(const char *c);
extern void *memcpy(void *dst, const void *src, size_t n); 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 isdigit(c) (((c) >= '0') && ((c) <= '9'))
#define isupper(c) ((c) >= 'A' && ((c) <= 'Z')) #define isupper(c) ((c) >= 'A' && ((c) <= 'Z'))

View File

@@ -19,6 +19,15 @@ void *memcpy(void *dst, const void *src, size_t n)
return dst; 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 strncmp(const char *s1, const char *s2, int max)
{ {
int i; int i;

View File

@@ -40,38 +40,22 @@ void *dma_memcpy(void *dst, void *src, size_t n)
start = MCF_SLT0_SCNT; start = MCF_SLT0_SCNT;
/* first check if we can do a "traditional" memcpy() to the destination and measure speed */ /* 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; end = MCF_SLT0_SCNT;
time = (start - end) / 132; time = (start - end) / 132;
xprintf("memcpy() took %d ms (%d.%d Mbytes/second)\r\n", xprintf("memcpy() took %d ms (%d.%d Mbytes/second)\r\n",
time, n / time / 1000, n / time % 1000); time, n / time / 1000, n / time % 1000);
flush_and_invalidate_caches(); flush_and_invalidate_caches();
//#endif //#endif
flush_and_invalidate_caches();
{
uint32_t *dl = (uint32_t *) dst;
xprintf("clear target area after memcpy():"); xprintf("clear target area after memcpy():");
do bzero(dst, n);
{ flush_and_invalidate_caches();
*dl++ = 0;
} while (dl < (uint32_t *) (dst + n));
xprintf(" finished, flush caches: "); xprintf(" finished, flush caches: ");
flush_and_invalidate_caches(); flush_and_invalidate_caches();
xprintf("finished\r\n"); xprintf("finished\r\n");
}
start = MCF_SLT0_SCNT; 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); 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);

View File

@@ -24,6 +24,9 @@ void fault_handler(uint32_t pc, uint32_t format_status)
xprintf("format_status: %lx\r\n", format_status); xprintf("format_status: %lx\r\n", format_status);
xprintf("pc: %lx\r\n", pc); xprintf("pc: %lx\r\n", pc);
/*
* extract info from format-/status word
*/
format = (format_status & 0b11110000000000000000000000000000) >> 28; format = (format_status & 0b11110000000000000000000000000000) >> 28;
fault_status = ((format_status & 0b00001100000000000000000000000000) >> 26) | fault_status = ((format_status & 0b00001100000000000000000000000000) >> 26) |
((format_status & 0b00000000000000110000000000000000) >> 16); ((format_status & 0b00000000000000110000000000000000) >> 16);