modified to use library functions (memcpy(), bzero())
This commit is contained in:
@@ -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'))
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -40,16 +40,8 @@ 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;
|
||||||
@@ -58,20 +50,12 @@ void *dma_memcpy(void *dst, void *src, size_t n)
|
|||||||
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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user