⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib_str.txt

📁 ucos2 is a file system for embedded applications which can be used on any media, for which you can p
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                  |L1.796|
00031c  e2600000          RSB      r0,r0,#0              ;747
000320  eafffff5          B        |L1.764|
;;;757    
                          ENDP

                  Str_Char PROC
;;;801    
;;;802        if (pstr == (CPU_CHAR *)0) {                                /* Rtn NULL if srch str ptr NULL (see Note #2a).        */
000324  e3500000          CMP      r0,#0
000328  0a00000b          BEQ      |L1.860|
;;;803            return ((CPU_CHAR *)0);
;;;804        }
;;;805    
;;;806    
;;;807        pstr_next = pstr;
;;;808        pstr_next++;
00032c  e2802001          ADD      r2,r0,#1
;;;809        while (( pstr_next != (CPU_CHAR *)0) &&                     /* Srch str until NULL ptr(s) (see Note #2b) ...        */
000330  ea000001          B        |L1.828|
                  |L1.820|
;;;810               (*pstr      != (CPU_CHAR  )0) &&                     /* ... or NULL char           (see Note #2c) ...        */
;;;811               (*pstr      != (CPU_CHAR  )srch_char)) {             /* ... or srch char found     (see Note #2d).           */
;;;812            pstr++;
000334  e2800001          ADD      r0,r0,#1
;;;813            pstr_next++;
000338  e2822001          ADD      r2,r2,#1
                  |L1.828|
00033c  e3520000          CMP      r2,#0                 ;809
000340  15d03000          LDRBNE   r3,[r0,#0]            ;810
000344  13530000          CMPNE    r3,#0                 ;810
000348  11530001          CMPNE    r3,r1                 ;811
00034c  1afffff8          BNE      |L1.820|
;;;814        }
;;;815    
;;;816    
;;;817        if (*pstr != srch_char) {                                   /* If srch char NOT found, str points to NULL; ...      */
000350  e5d02000          LDRB     r2,[r0,#0]
000354  e1520001          CMP      r2,r1
;;;818            return ((CPU_CHAR *)0);                                 /* ... rtn NULL (see Notes #2b & #2c).                  */
;;;819        }
;;;820    
;;;821        return (pstr);                                              /* Else rtn ptr to found srch char (see Note #2d).      */
;;;822    }
000358  012fff1e          BXEQ     lr
                  |L1.860|
00035c  e3a00000          MOV      r0,#0                 ;818
000360  e12fff1e          BX       lr
;;;823    
                          ENDP

                  Str_Char_N PROC
;;;879    
;;;880        if (pstr == (CPU_CHAR *)0) {                                /* Rtn NULL if srch str ptr NULL    (see Note #2a).     */
000364  e3500000          CMP      r0,#0
;;;881            return ((CPU_CHAR *)0);
;;;882        }
;;;883    
;;;884        if (len_max == (CPU_SIZE_T)0) {                             /* Rtn NULL if srch len equals zero (see Note #2e).     */
000368  13510000          CMPNE    r1,#0
00036c  e52de004          PUSH     {lr}
000370  0a00000e          BEQ      |L1.944|
;;;885            return ((CPU_CHAR *)0);
;;;886        }
;;;887    
;;;888    
;;;889        pstr_next = pstr;
;;;890        pstr_next++;
000374  e280c001          ADD      r12,r0,#1
;;;891        len_srch  = 0;
000378  e3a03000          MOV      r3,#0
;;;892        while (( pstr_next != (CPU_CHAR *)0)         &&             /* Srch str until NULL ptr(s)  (see Note #2b)  ...      */
00037c  ea000002          B        |L1.908|
                  |L1.896|
;;;893               (*pstr      != (CPU_CHAR  )0)         &&             /* ... or NULL char            (see Note #2c)  ...      */
;;;894               (*pstr      != (CPU_CHAR  )srch_char) &&             /* ... or srch char found      (see Note #2d); ...      */
;;;895               ( len_srch  <  (CPU_SIZE_T)len_max)) {               /* ... or max nbr chars srch'd (see Note #2e).          */
;;;896            pstr++;
000380  e2800001          ADD      r0,r0,#1
;;;897            pstr_next++;
000384  e28cc001          ADD      r12,r12,#1
;;;898            len_srch++;
000388  e2833001          ADD      r3,r3,#1
                  |L1.908|
00038c  e35c0000          CMP      r12,#0                ;892
000390  15d0e000          LDRBNE   lr,[r0,#0]            ;893
000394  135e0000          CMPNE    lr,#0                 ;893
000398  115e0002          CMPNE    lr,r2                 ;894
00039c  11530001          CMPNE    r3,r1                 ;895
0003a0  3afffff6          BCC      |L1.896|
;;;899        }
;;;900    
;;;901    
;;;902        if (*pstr != srch_char) {                                   /* If srch char NOT found, str points to NULL; ...      */
0003a4  e5d01000          LDRB     r1,[r0,#0]
0003a8  e1510002          CMP      r1,r2
0003ac  0a000000          BEQ      |L1.948|
                  |L1.944|
;;;903            return ((CPU_CHAR *)0);                                 /* ... rtn NULL (see Notes #2b & #2c).                  */
0003b0  e3a00000          MOV      r0,#0
                  |L1.948|
0003b4  e49de004          POP      {lr}
;;;904        }
;;;905    
;;;906        return (pstr);                                              /* Else rtn ptr to found srch char (see Note #2d).      */
;;;907    }
0003b8  e12fff1e          BX       lr
;;;908    
                          ENDP

                  Str_Char_Last PROC
;;;949                              CPU_CHAR   srch_char)
;;;950    {
0003bc  e1b03000          MOVS     r3,r0
0003c0  e1a0c001          MOV      r12,r1
0003c4  e52de004          PUSH     {lr}
;;;951        CPU_CHAR    *pstr_next;
;;;952        CPU_SIZE_T   str_len;
;;;953    
;;;954    
;;;955        if (pstr == (CPU_CHAR *)0) {                                /* Rtn NULL if srch str ptr NULL (see Note #2a).        */
0003c8  0a00000b          BEQ      |L1.1020|
;;;956            return ((CPU_CHAR *)0);
;;;957        }
;;;958    
;;;959    
;;;960        pstr_next  = pstr;
;;;961        str_len    = Str_Len(pstr);
0003cc  e1a00003          MOV      r0,r3
0003d0  ebfffffe          BL       Str_Len
;;;962        pstr_next += str_len;
0003d4  e0800003          ADD      r0,r0,r3
;;;963        while (( pstr_next != pstr) &&                              /* Srch str from end until beg (see Note #2c) ...       */
0003d8  ea000000          B        |L1.992|
                  |L1.988|
;;;964               (*pstr_next != srch_char)) {                         /* ... until srch char found   (see Note #2d).          */
;;;965            pstr_next--;
0003dc  e2400001          SUB      r0,r0,#1
                  |L1.992|
0003e0  e1500003          CMP      r0,r3                 ;963
0003e4  15d01000          LDRBNE   r1,[r0,#0]            ;964
0003e8  1151000c          CMPNE    r1,r12                ;964
0003ec  1afffffa          BNE      |L1.988|
;;;966        }
;;;967    
;;;968    
;;;969        if (*pstr_next != srch_char) {                              /* If srch char NOT found, str points to NULL; ...      */
0003f0  e5d01000          LDRB     r1,[r0,#0]
0003f4  e151000c          CMP      r1,r12
0003f8  0a000000          BEQ      |L1.1024|
                  |L1.1020|
;;;970            return ((CPU_CHAR *)0);                                 /* ... rtn NULL (see Notes #2b & #2c).                  */
0003fc  e3a00000          MOV      r0,#0
                  |L1.1024|
000400  e49de004          POP      {lr}
;;;971        }
;;;972    
;;;973        return (pstr_next);                                         /* Else rtn ptr to found srch char (see Note #2d).      */
;;;974    }
000404  e12fff1e          BX       lr
;;;975    
                          ENDP

                  Str_Str PROC
;;;1019                       CPU_CHAR  *psrch_str)
;;;1020   {
000408  e92d43f0          PUSH     {r4-r9,lr}
00040c  e1b06000          MOVS     r6,r0
000410  e1a09001          MOV      r9,r1
;;;1021       CPU_SIZE_T    str_len;
;;;1022       CPU_SIZE_T    srch_str_len;
;;;1023       CPU_SIZE_T    srch_len;
;;;1024       CPU_SIZE_T    srch_ix;
;;;1025       CPU_BOOLEAN   srch_done;
;;;1026       CPU_INT16S    srch_cmp;
;;;1027       CPU_CHAR     *pstr_srch_ix;
;;;1028   
;;;1029                                                                   /* Rtn NULL if str ptr(s) NULL (see Note #2a).          */
;;;1030       if (pstr == (CPU_CHAR *)0) {
;;;1031           return ((CPU_CHAR *)0);
;;;1032       }
;;;1033       if (psrch_str == (CPU_CHAR *)0) {
000414  13590000          CMPNE    r9,#0
000418  0a00001d          BEQ      |L1.1172|
;;;1034           return ((CPU_CHAR *)0);
;;;1035       }
;;;1036   
;;;1037   
;;;1038       str_len      = Str_Len(pstr);
00041c  e1a00006          MOV      r0,r6
000420  ebfffffe          BL       Str_Len
000424  e1a0c000          MOV      r12,r0
;;;1039       srch_str_len = Str_Len(psrch_str);
000428  e1a00009          MOV      r0,r9
00042c  ebfffffe          BL       Str_Len
;;;1040       if (srch_str_len > str_len) {                               /* If srch str len > str len, rtn NULL  (see Note #2b). */
000430  e150000c          CMP      r0,r12
000434  e1a05000          MOV      r5,r0                 ;1039
000438  8a000015          BHI      |L1.1172|
;;;1041           return ((CPU_CHAR *)0);
;;;1042       }
;;;1043       if (srch_str_len == 0) {                                    /* If srch str len = 0, srch str equal NULL str; ...    */
00043c  e3550000          CMP      r5,#0
;;;1044           pstr_srch_ix = (CPU_CHAR *)(pstr + str_len);            /* ... rtn ptr to NULL str found in str (see Note #2c). */
000440  0086000c          ADDEQ    r0,r6,r12
;;;1045           return (pstr_srch_ix);
000444  0a000013          BEQ      |L1.1176|
;;;1046       }
;;;1047   
;;;1048       srch_len  = str_len - srch_str_len;                         /* Determine srch len (see Note #2d1).                  */
000448  e04c7005          SUB      r7,r12,r5
;;;1049       srch_ix   = 0;
00044c  e3a04000          MOV      r4,#0
;;;1050       srch_done = DEF_NO;
;;;1051       while ((srch_done == DEF_NO) && (srch_ix <= srch_len)) {
000450  ea00000a          B        |L1.1152|
                  |L1.1108|
;;;1052           pstr_srch_ix = (CPU_CHAR *)(pstr + srch_ix);
000454  e0868004          ADD      r8,r6,r4
;;;1053           srch_cmp     =  Str_Cmp_N(pstr_srch_ix, psrch_str, srch_str_len);
000458  e1a02005          MOV      r2,r5
00045c  e1a01009          MOV      r1,r9
000460  e1a00008          MOV      r0,r8
000464  ebfffffe          BL       Str_Cmp_N
000468  e1b03000          MOVS     r3,r0
;;;1054           srch_done    = (srch_cmp == 0) ? DEF_YES : DEF_NO;
00046c  13a01000          MOVNE    r1,#0
000470  03a01001          MOVEQ    r1,#1
000474  e3510000          CMP      r1,#0                 ;1051
;;;1055           srch_ix++;
000478  e2844001          ADD      r4,r4,#1
00047c  1a000001          BNE      |L1.1160|
                  |L1.1152|
000480  e1540007          CMP      r4,r7                 ;1051
000484  9afffff2          BLS      |L1.1108|
                  |L1.1160|
;;;1056       }
;;;1057   
;;;1058   
;;;1059       if (srch_cmp != 0) {                                        /* If srch str NOT found, rtn NULL  (see Note #2d).     */
000488  e3530000          CMP      r3,#0
;;;1060           return ((CPU_CHAR *)0);
;;;1061       }
;;;1062   
;;;1063       return (pstr_srch_ix);                                      /* Rtn ptr to srch str found in str (see Note #2e).     */
00048c  01a00008          MOVEQ    r0,r8
000490  0a000000          BEQ      |L1.1176|
                  |L1.1172|
000494  e3a00000          MOV      r0,#0                 ;1060
                  |L1.1176|
000498  e8bd43f0          POP      {r4-r9,lr}            ;1060
;;;1064   }
00049c  e12fff1e          BX       lr
;;;1065   
                          ENDP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -