What stuck out what a bug in the UART swinging buffer and the mutex shared between the user program and the DMA Engine's ISR that releases that resource. Anyway ... I have it all squared away. Once I debug the memory peek and poke command (mdx and mwx) I can transition to phase 3
time for some much needed sleep
/* ***************************************************************** *description: string comparison *inputs: char *ptrStrSrc=string 1 * char *ptrStrDst=string 2 * int wdCount =number of characters to compare *output: int = 0 on success failing index on error *int *tclib_strcmp(unsigned char *ptrStrSrc,\ * unsigned char *ptrStrDst,\ * int wdCount) *{ *unsigned int wdIndex; * *for(wdIndex=0; wdIndex <wdCount; wdIndex++) * { * if (ptrStrSrc[wdIndex] == NULL || \ * ptrStrDst[wdIndex] == NULL || \ * (ptrStrSrc[wdIndex] - ptrStrDst[wdIndex]) !=0) * return wdIndex; * } * *return 0; *} ***************************************************************** */ .align 2 .global tclib_strcmp /* ***************************************************************** *r0 = ptrDst *r1 = ptrSrc *returns r0 strcmp value *r1 = src1 *r2 = src2 *r3 = scratch *r4 = scratch *r0 = cmp ***************************************************************** */ .thumb_func tclib_strcmp: push {r1-r4, lr} mov r2, r0 /*save src1 in r2*/ mov r0, #0 /*zero out r0*/ tclib_strcmp_loop: ldrb r3, [r1], #1 andS r3, r3, #0x0ff /*clear upper bits*/ orrS r3, r3, #0 /*end of string?*/ beq tclib_strcmp_exit ldrb r4, [r2], #1 andS r4, r4, #0x0ff /*clear upper bits*/ orrS r4, r4, #0 /*end of string?*/ beq tclib_strcmp_exit cmp r4, r3 it EQ beq tclib_strcmp_loop /*else*/ ite HI addhi r0, r0, #1 /*track strcmp results*/ subls r0, r0, #1 /*ditto*/ itt NE popne {r1-r4, lr} /*exit*/ movne pc, lr /*exit*/ tclib_strcmp_exit: itt EQ popeq {r1-r4, lr} /*exit*/ moveq pc, lr /*exit*/ b tclib_strcmp_loop
Finally this is what the command interpreter output looks like under minicom
..ie........ ..ieieie.... ..ie........ ..ieieie.... ..ie........ Igbo Embedded ..ieieie.... EGWU v1.1 (c) 2015 ..ie........ Samuel Igwe egwu-> help go address : jump to address ldusb address : load file to address using USB ldxmodem address : load file to address using xmodem+serial port help : display command table mdb|mdh|mdw addr len : display byte|word|dword at address mwb|mwh|mww addr val : write byte|word|dword to address reset : reset the lpc17 egwu-> mdb 0x10000000 invalid or non existent address egwu-> reset
No comments:
Post a Comment