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

📄 lib_str.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--debug -c --asm --interleave -olib_str.o --depend=lib_str.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RVMDK -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RVMDK -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2468\IAR -Id:\Keil\ARM\INC\Philips ..\..\..\..\..\uC-LIB\lib_str.c]
                          ARM

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  Str_Len PROC
;;;139    CPU_SIZE_T  Str_Len (CPU_CHAR  *pstr)
;;;140    {
000000  e1a01000          MOV      r1,r0
;;;141        CPU_SIZE_T  len;
;;;142    
;;;143    
;;;144        len = 0;
000004  e3a00000          MOV      r0,#0
;;;145        while (( pstr != (CPU_CHAR *)0) &&                          /* Calc str len until NULL ptr (see Note #2a) ...       */
000008  ea000001          B        |L1.20|
                  |L1.12|
;;;146               (*pstr != (CPU_CHAR  )0)) {                          /* ... or NULL char found      (see Note #2b).          */
;;;147            len++;
00000c  e2800001          ADD      r0,r0,#1
;;;148            pstr++;
000010  e2811001          ADD      r1,r1,#1
                  |L1.20|
000014  e3510000          CMP      r1,#0
000018  0a000002          BEQ      |L1.40|
00001c  e5d12000          LDRB     r2,[r1,#0]
000020  e3520000          CMP      r2,#0
000024  1afffff8          BNE      |L1.12|
                  |L1.40|
;;;149        }
;;;150    
;;;151        return (len);
;;;152    }
000028  e12fff1e          BX       lr
                          ENDP

                  Str_Copy PROC
;;;194                         CPU_CHAR  *psrc)
;;;195    {
00002c  e1a02000          MOV      r2,r0
;;;196        CPU_CHAR  *pstr;
;;;197        CPU_CHAR  *pstr_next;
;;;198    
;;;199                                                                    /* Rtn NULL if str ptr(s) NULL (see Note #2a).          */
;;;200        if (pdest == (CPU_CHAR *)0) {
000030  e3520000          CMP      r2,#0
000034  1a000001          BNE      |L1.64|
;;;201            return  ((CPU_CHAR *)0);
000038  e3a00000          MOV      r0,#0
                  |L1.60|
;;;202        }
;;;203        if (psrc  == (CPU_CHAR *)0) {
;;;204            return  ((CPU_CHAR *)0);
;;;205        }
;;;206    
;;;207    
;;;208        pstr      = pdest;
;;;209        pstr_next = pstr;
;;;210        pstr_next++;
;;;211        while (( pstr_next != (CPU_CHAR *)0) &&                     /* Copy str until NULL ptr(s) (see Note #2b) ...        */
;;;212               ( psrc      != (CPU_CHAR *)0) &&
;;;213               (*psrc      != (CPU_CHAR  )0)) {                     /* ... or NULL char found     (see Note #2c).           */
;;;214           *pstr = *psrc;
;;;215            pstr++;
;;;216            pstr_next++;
;;;217            psrc++;
;;;218        }
;;;219    
;;;220       *pstr = (CPU_CHAR)0;                                         /* Append NULL char (see Note #2b2).                    */
;;;221    
;;;222    
;;;223        return (pdest);
;;;224    }
00003c  e12fff1e          BX       lr
                  |L1.64|
000040  e3510000          CMP      r1,#0
000044  1a000001          BNE      |L1.80|
000048  e3a00000          MOV      r0,#0
00004c  eafffffa          B        |L1.60|
                  |L1.80|
000050  e1a03002          MOV      r3,r2
000054  e1a02003          MOV      r2,r3
000058  e1a0c003          MOV      r12,r3
00005c  e1a0200c          MOV      r2,r12
000060  e28cc001          ADD      r12,r12,#1
000064  ea000004          B        |L1.124|
                  |L1.104|
000068  e5d10000          LDRB     r0,[r1,#0]
00006c  e5c30000          STRB     r0,[r3,#0]
000070  e2833001          ADD      r3,r3,#1
000074  e28cc001          ADD      r12,r12,#1
000078  e2811001          ADD      r1,r1,#1
                  |L1.124|
00007c  e35c0000          CMP      r12,#0
000080  0a000004          BEQ      |L1.152|
000084  e3510000          CMP      r1,#0
000088  0a000002          BEQ      |L1.152|
00008c  e5d10000          LDRB     r0,[r1,#0]
000090  e3500000          CMP      r0,#0
000094  1afffff3          BNE      |L1.104|
                  |L1.152|
000098  e3a00000          MOV      r0,#0
00009c  e5c30000          STRB     r0,[r3,#0]
0000a0  e1a00002          MOV      r0,r2
0000a4  eaffffe4          B        |L1.60|
                          ENDP

                  Str_Copy_N PROC
;;;274                           CPU_SIZE_T   len_max)
;;;275    {
0000a8  e92d4010          PUSH     {r4,lr}
0000ac  e1a03000          MOV      r3,r0
;;;276        CPU_CHAR    *pstr;
;;;277        CPU_CHAR    *pstr_next;
;;;278        CPU_SIZE_T   len_copy;
;;;279    
;;;280                                                                    /* Rtn NULL if str ptr(s) NULL      (see Note #2a).     */
;;;281        if (pdest == (CPU_CHAR *)0) {
0000b0  e3530000          CMP      r3,#0
0000b4  1a000002          BNE      |L1.196|
;;;282            return  ((CPU_CHAR *)0);
0000b8  e3a00000          MOV      r0,#0
                  |L1.188|
0000bc  e8bd4010          POP      {r4,lr}
;;;283        }
;;;284        if (psrc  == (CPU_CHAR *)0) {
;;;285            return  ((CPU_CHAR *)0);
;;;286        }
;;;287    
;;;288        if (len_max == (CPU_SIZE_T)0) {                             /* Rtn NULL if copy len equals zero (see Note #2d).     */
;;;289            return  ((CPU_CHAR *)0);
;;;290        }
;;;291    
;;;292    
;;;293        pstr      = pdest;
;;;294        pstr_next = pstr;
;;;295        pstr_next++;
;;;296        len_copy  = 0;
;;;297    
;;;298        while (( pstr_next != (CPU_CHAR *)0) &&                     /* Copy str until NULL ptr(s)  (see Note #2b)  ...      */
;;;299               ( psrc      != (CPU_CHAR *)0) &&
;;;300               (*psrc      != (CPU_CHAR  )0) &&                     /* ... or NULL char found      (see Note #2c); ...      */
;;;301               ( len_copy  <  (CPU_SIZE_T)len_max)) {               /* ... or max nbr chars copied (see Note #2d).          */
;;;302           *pstr = *psrc;
;;;303            pstr++;
;;;304            pstr_next++;
;;;305            psrc++;
;;;306            len_copy++;
;;;307        }
;;;308    
;;;309       *pstr = (CPU_CHAR)0;                                         /* Append NULL char (see Note #2b2).                    */
;;;310    
;;;311    
;;;312        return (pdest);
;;;313    }
0000c0  e12fff1e          BX       lr
                  |L1.196|
0000c4  e3510000          CMP      r1,#0
0000c8  1a000001          BNE      |L1.212|
0000cc  e3a00000          MOV      r0,#0
0000d0  eafffff9          B        |L1.188|
                  |L1.212|
0000d4  e3520000          CMP      r2,#0
0000d8  1a000001          BNE      |L1.228|
0000dc  e3a00000          MOV      r0,#0
0000e0  eafffff5          B        |L1.188|
                  |L1.228|
0000e4  e1a0c003          MOV      r12,r3
0000e8  e1a0300c          MOV      r3,r12
0000ec  e1a0e00c          MOV      lr,r12
0000f0  e1a0300e          MOV      r3,lr
0000f4  e28ee001          ADD      lr,lr,#1
0000f8  e3a04000          MOV      r4,#0
0000fc  ea000005          B        |L1.280|
                  |L1.256|
000100  e5d10000          LDRB     r0,[r1,#0]
000104  e5cc0000          STRB     r0,[r12,#0]
000108  e28cc001          ADD      r12,r12,#1
00010c  e28ee001          ADD      lr,lr,#1
000110  e2811001          ADD      r1,r1,#1
000114  e2844001          ADD      r4,r4,#1
                  |L1.280|
000118  e35e0000          CMP      lr,#0
00011c  0a000006          BEQ      |L1.316|
000120  e3510000          CMP      r1,#0
000124  0a000004          BEQ      |L1.316|
000128  e5d10000          LDRB     r0,[r1,#0]
00012c  e3500000          CMP      r0,#0
000130  0a000001          BEQ      |L1.316|
000134  e1540002          CMP      r4,r2
000138  3afffff0          BCC      |L1.256|
                  |L1.316|
00013c  e3a00000          MOV      r0,#0
000140  e5cc0000          STRB     r0,[r12,#0]
000144  e1a00003          MOV      r0,r3
000148  eaffffdb          B        |L1.188|
                          ENDP

                  Str_Cat PROC
;;;358                        CPU_CHAR  *pstr_cat)
;;;359    {
00014c  e1a02000          MOV      r2,r0
;;;360        CPU_CHAR  *pstr;
;;;361        CPU_CHAR  *pstr_next;
;;;362    
;;;363                                                                    /* Rtn NULL if str ptr(s) NULL (see Note #2a).          */
;;;364        if (pdest == (CPU_CHAR *)0) {
000150  e3520000          CMP      r2,#0
000154  1a000001          BNE      |L1.352|
;;;365            return  ((CPU_CHAR *)0);
000158  e3a00000          MOV      r0,#0
                  |L1.348|
;;;366        }
;;;367        if (pstr_cat == (CPU_CHAR *)0) {
;;;368            return  ((CPU_CHAR *)0);
;;;369        }
;;;370    
;;;371    
;;;372        pstr = pdest;
;;;373        while (( pstr != (CPU_CHAR *)0) &&                          /* Adv to end of cur dest str until NULL ptr ...        */
;;;374               (*pstr != (CPU_CHAR  )0)) {                          /* ... or NULL char found..                             */
;;;375            pstr++;
;;;376        }
;;;377        if (pstr == (CPU_CHAR *)0) {                                /* If NULL str overrun, rtn NULL (see Note #2b).        */
;;;378            return ((CPU_CHAR *)0);
;;;379        }
;;;380    
;;;381        pstr_next = pstr;
;;;382        pstr_next++;
;;;383        while (( pstr_next != (CPU_CHAR *)0) &&                     /* Cat str until NULL ptr(s) (see Note #2c) ...         */
;;;384               ( pstr_cat  != (CPU_CHAR *)0) &&
;;;385               (*pstr_cat  != (CPU_CHAR  )0)) {                     /* ... or NULL char found    (see Note #2d).            */
;;;386           *pstr = *pstr_cat;
;;;387            pstr++;
;;;388            pstr_next++;
;;;389            pstr_cat++;
;;;390        }
;;;391    
;;;392       *pstr = (CPU_CHAR)0;                                         /* Append NULL char (see Note #2c2).                    */
;;;393    
;;;394    
;;;395        return (pdest);
;;;396    }
00015c  e12fff1e          BX       lr
                  |L1.352|
000160  e3510000          CMP      r1,#0
000164  1a000001          BNE      |L1.368|
000168  e3a00000          MOV      r0,#0
00016c  eafffffa          B        |L1.348|
                  |L1.368|
000170  e1a03002          MOV      r3,r2
000174  ea000000          B        |L1.380|
                  |L1.376|
000178  e2833001          ADD      r3,r3,#1
                  |L1.380|
00017c  e3530000          CMP      r3,#0
000180  0a000002          BEQ      |L1.400|
000184  e5d30000          LDRB     r0,[r3,#0]
000188  e3500000          CMP      r0,#0
00018c  1afffff9          BNE      |L1.376|
                  |L1.400|
000190  e3530000          CMP      r3,#0
000194  1a000001          BNE      |L1.416|
000198  e3a00000          MOV      r0,#0
00019c  eaffffee          B        |L1.348|
                  |L1.416|
0001a0  e1a0c003          MOV      r12,r3
0001a4  e1a0300c          MOV      r3,r12
0001a8  e28cc001          ADD      r12,r12,#1
0001ac  ea000004          B        |L1.452|
                  |L1.432|
0001b0  e5d10000          LDRB     r0,[r1,#0]
0001b4  e5c30000          STRB     r0,[r3,#0]
0001b8  e2833001          ADD      r3,r3,#1
0001bc  e28cc001          ADD      r12,r12,#1
0001c0  e2811001          ADD      r1,r1,#1
                  |L1.452|
0001c4  e35c0000          CMP      r12,#0
0001c8  0a000004          BEQ      |L1.480|
0001cc  e3510000          CMP      r1,#0
0001d0  0a000002          BEQ      |L1.480|
0001d4  e5d10000          LDRB     r0,[r1,#0]
0001d8  e3500000          CMP      r0,#0
0001dc  1afffff3          BNE      |L1.432|
                  |L1.480|
0001e0  e3a00000          MOV      r0,#0
0001e4  e5c30000          STRB     r0,[r3,#0]
0001e8  e1a00002          MOV      r0,r2
0001ec  eaffffda          B        |L1.348|
                          ENDP

                  Str_Cat_N PROC
;;;449                          CPU_SIZE_T   len_max)
;;;450    {
0001f0  e92d4010          PUSH     {r4,lr}
0001f4  e1a03000          MOV      r3,r0
;;;451        CPU_CHAR    *pstr;
;;;452        CPU_CHAR    *pstr_next;
;;;453        CPU_SIZE_T   len_cat;
;;;454    
;;;455                                                                    /* Rtn NULL if str ptr(s) NULL     (see Note #2a).      */
;;;456        if (pdest == (CPU_CHAR *)0) {
0001f8  e3530000          CMP      r3,#0
0001fc  1a000002          BNE      |L1.524|
;;;457            return  ((CPU_CHAR *)0);
000200  e3a00000          MOV      r0,#0
                  |L1.516|
000204  e8bd4010          POP      {r4,lr}
;;;458        }
;;;459        if (pstr_cat == (CPU_CHAR *)0) {
;;;460            return  ((CPU_CHAR *)0);
;;;461        }
;;;462    
;;;463        if (len_max == (CPU_SIZE_T)0) {                             /* Rtn NULL if cat len equals zero (see Note #2e).      */
;;;464            return  ((CPU_CHAR *)0);
;;;465        }
;;;466    
;;;467    
;;;468        pstr = pdest;
;;;469        while (( pstr != (CPU_CHAR *)0) &&                          /* Adv to end of cur dest str until NULL ptr ...        */
;;;470               (*pstr != (CPU_CHAR  )0)) {                          /* ... or NULL char found..                             */
;;;471            pstr++;
;;;472        }
;;;473        if (pstr == (CPU_CHAR *)0) {                                /* If NULL str overrun, rtn NULL (see Note #2b).        */
;;;474            return ((CPU_CHAR *)0);
;;;475        }
;;;476    
;;;477        pstr_next = pstr;
;;;478        pstr_next++;
;;;479        len_cat   = 0;
;;;480    
;;;481        while (( pstr_next != (CPU_CHAR *)0) &&                     /* Cat str until NULL ptr(s)  (see Note #2c)  ...       */
;;;482               ( pstr_cat  != (CPU_CHAR *)0) &&
;;;483               (*pstr_cat  != (CPU_CHAR  )0) &&                     /* ... or NULL char found     (see Note #2d); ...       */
;;;484               ( len_cat   <  (CPU_SIZE_T)len_max)) {               /* ... or max nbr chars cat'd (see Note #2d).           */
;;;485           *pstr = *pstr_cat;
;;;486            pstr++;
;;;487            pstr_next++;
;;;488            pstr_cat++;
;;;489            len_cat++;

⌨️ 快捷键说明

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