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