📄 po_kernel.lst
字号:
350
351 if( len > _NbOctetsFifo )
\ ??po_rngBufGet_0:
\ 00000022 B342 CMP R3,R6
\ 00000024 00DA BGE ??po_rngBufGet_2
352 {
353 len = _NbOctetsFifo;
\ 00000026 1E1C MOV R6,R3
354 }
355 _ret = len;
\ ??po_rngBufGet_2:
\ 00000028 371C MOV R7,R6
\ 0000002A 06E0 B ??po_rngBufGet_3
356
357 while( len-- > 0)
358 {
359 *buffer++= *_current++;
\ ??po_rngBufGet_4:
\ 0000002C 0B78 LDRB R3,[R1, #+0]
\ 0000002E 2B70 STRB R3,[R5, #+0]
\ 00000030 491C ADD R1,R1,#+1
\ 00000032 6D1C ADD R5,R5,#+1
360
361 if(_current >= _last)
\ 00000034 9142 CMP R1,R2
\ 00000036 00D3 BCC ??po_rngBufGet_3
362 {
363 _current = _first;
\ 00000038 011C MOV R1,R0
364 }
365 }
\ ??po_rngBufGet_3:
\ 0000003A 331C MOV R3,R6
\ 0000003C 761E SUB R6,R6,#+1
\ 0000003E 012B CMP R3,#+1
\ 00000040 F4DA BGE ??po_rngBufGet_4
366 pRingId->current = _current;
\ 00000042 A160 STR R1,[R4, #+8]
367 pRingId->NbOctetsLibres += _ret;
\ 00000044 2069 LDR R0,[R4, #+16]
\ 00000046 C019 ADD R0,R0,R7
\ 00000048 2061 STR R0,[R4, #+16]
368 po_unlock();
\ 0000004A ........ _BLF po_unlock,??po_unlock??rT
369
370 return( _ret );
\ 0000004E 381C MOV R0,R7
\ ??po_rngBufGet_1:
\ 00000050 REQUIRE ?Subroutine15
\ 00000050 ;; // Fall through to label ?Subroutine15
371 }
372
373 /******************************************************************
374 *
375 * SUB-ROUTINE po_rngCreate
376 *
377 *------------------------------------------------------------------
378 *
379 * purpose : create FIFO
380 *
381 * input parameters : len FIFO size
382 *
383 * output parameters :
384 *
385 * global data :
386 *
387 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
388 RING_ID po_rngCreate( int len )
389 {
\ po_rngCreate:
\ 00000000 30B5 PUSH {R4,R5,LR}
\ 00000002 86B0 SUB SP,#+24
\ 00000004 041C MOV R4,R0
\ 00000006 0D1C MOV R5,R1
390 RING_ID _ringId;
391 char * _buff;
392
393 _buff = po_malloc(len);
\ 00000008 081C MOV R0,R1
\ 0000000A ........ _BLF __data_malloc,??__data_malloc??rT
394 if( NULL == _buff )
\ 0000000E 0028 CMP R0,#+0
\ 00000010 07D1 BNE ??po_rngCreate_0
395 {
396 TRACE_ERROR( "rng malloc PB\n\r" );
397 TRACE_INFO("malloc %d fault!",len) ;
\ 00000012 2A1C MOV R2,R5
\ 00000014 .... LDR R1,??Subroutine14_0 ;; `?<Constant "malloc %d fault!">`
\ 00000016 .... LDR R0,??Subroutine14_0+0x4 ;; _Stdout
\ 00000018 ........ _BLF fprintf,??fprintf??rT
398 _ringId.status = -1;
\ 0000001C 0020 MOV R0,#+0
\ 0000001E C043 MVN R0,R0 ;; #-1
\ 00000020 06E0 B ??po_rngCreate_1
399 }
400 else
401 {
402 _ringId.free = _buff;
\ ??po_rngCreate_0:
\ 00000022 0190 STR R0,[SP, #+4]
403 _ringId.first = _buff;
\ 00000024 0090 STR R0,[SP, #+0]
404 _ringId.current = _ringId.first;
\ 00000026 0290 STR R0,[SP, #+8]
405 _ringId.last = _ringId.first + len;
\ 00000028 4019 ADD R0,R0,R5
\ 0000002A 0390 STR R0,[SP, #+12]
406 _ringId.NbOctetsLibres = len;
\ 0000002C 0495 STR R5,[SP, #+16]
407 _ringId.status = 1;
\ 0000002E 0120 MOV R0,#+1
\ ??po_rngCreate_1:
\ 00000030 0590 STR R0,[SP, #+20]
408 }
409 return( _ringId );
\ 00000032 6846 MOV R0,SP
\ 00000034 1822 MOV R2,#+24
\ ??po_rngCreate_2:
\ 00000036 121F SUB R2,R2,#+4
\ 00000038 8158 LDR R1,[R0, R2]
\ 0000003A A150 STR R1,[R4, R2]
\ 0000003C FBD1 BNE ??po_rngCreate_2
\ 0000003E 201C MOV R0,R4
\ 00000040 06B0 ADD SP,#+24
\ 00000042 C046 NOP
\ 00000044 REQUIRE ?Subroutine14
\ 00000044 ;; // Fall through to label ?Subroutine14
410 }
411
412 /******************************************************************
413 *
414 * SUB-ROUTINE po_rngDelete
415 *
416 *------------------------------------------------------------------
417 *
418 * purpose : delete FIFO
419 *
420 * input parameters : ringId
421 *
422 * output parameters :
423 *
424 * global data :
425 *
426 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
427 int po_rngDelete( RING_ID * ringId )
428 {
\ po_rngDelete:
\ 00000000 30B5 PUSH {R4,R5,LR}
\ 00000002 041C MOV R4,R0
429 int _ret = -1;
\ 00000004 0025 MOV R5,#+0
\ 00000006 ED43 MVN R5,R5 ;; #-1
430
431 if(ringId->status == 1)
\ 00000008 4069 LDR R0,[R0, #+20]
\ 0000000A 0128 CMP R0,#+1
\ 0000000C 09D1 BNE ??po_rngDelete_0
432 {
433 po_free(ringId->first);
\ 0000000E 2068 LDR R0,[R4, #+0]
\ 00000010 ........ _BLF __data_free,??__data_free??rT
434 ringId->first = ringId->last = ringId->current= NULL;
\ 00000014 0020 MOV R0,#+0
\ 00000016 A060 STR R0,[R4, #+8]
\ 00000018 E060 STR R0,[R4, #+12]
\ 0000001A 2060 STR R0,[R4, #+0]
435 ringId->NbOctetsLibres = 0;
\ 0000001C 2061 STR R0,[R4, #+16]
436 ringId->status = -1;
\ 0000001E 6561 STR R5,[R4, #+20]
437 _ret = 0;
\ 00000020 0025 MOV R5,#+0
438 }
439 return( _ret );
\ ??po_rngDelete_0:
\ 00000022 281C MOV R0,R5
\ 00000024 .... B ?Subroutine14
440 }
441
442 /******************************************************************
443 *
444 * SUB-ROUTINE po_strcmp
445 *
446 *------------------------------------------------------------------
447 *
448 * purpose : compare two string buffers, return 0 if equals
449 *
450 * input parameters : s1
451 * s2
452 *
453 * output parameters :
454 *
455 * global data :
456 *
457 ******************************************************************/
\ In segment CODE, align 4, keep-with-next
458 int po_strcmp( const char* s1, const char* s2 )
459 {
\ po_strcmp:
\ 00000000 30B4 PUSH {R4,R5}
\ 00000002 021C MOV R2,R0
460 return( strcmp(s1,s2) );
\ 00000004 0025 MOV R5,#+0
\ ??po_strcmp_0:
\ 00000006 4C5D LDRB R4,[R1, R5]
\ 00000008 535D LDRB R3,[R2, R5]
\ 0000000A 6D1C ADD R5,R5,#+1
\ 0000000C A342 CMP R3,R4
\ 0000000E 03D1 BNE ??po_strcmp_1
\ 00000010 002B CMP R3,#+0
\ 00000012 F8D1 BNE ??po_strcmp_0
\ 00000014 0020 MOV R0,#+0
\ 00000016 00E0 B ??po_strcmp_2
\ ??po_strcmp_1:
\ 00000018 181B SUB R0,R3,R4
\ ??po_strcmp_2:
\ 0000001A 30BC POP {R4,R5}
\ 0000001C 7047 BX LR ;; return
461 }
\ In segment CODE_I, align 4, keep-with-next
\ ??DataTable1:
\ 00000000 ........ DC32 CPT_LOCK
\ In segment DATA_C, align 4, align-sorted
\ `?<Constant "malloc %d fault!">`:
\ 00000000 6D616C6C6F63 DC8 "malloc %d fault!"
\ 202564206661
\ 756C742100
\ 00000011 000000 DC8 0, 0, 0
462
Maximum stack usage in bytes:
Function CSTACK
-------- ------
po_free 4
po_lock 8
po_malloc 4
po_memcpy 4
po_rngBufGet 20
po_rngBufPut 20
po_rngCreate 36
po_rngDelete 12
po_rngFlush 8
po_rngIsEmpty 12
po_rngNBytes 8
po_strcmp 8
po_unlock 4
Segment part sizes:
Function/Label Bytes
-------------- -----
CPT_LOCK 4
po_unlock 20
po_lock 22
?Subroutine13 6
po_malloc 10
po_free 10
po_memcpy 22
po_rngNBytes 30
po_rngFlush 28
po_rngIsEmpty 32
?Subroutine14 16
po_rngBufPut 74
?Subroutine15 6
po_rngBufGet 80
po_rngCreate 68
po_rngDelete 38
po_strcmp 30
??DataTable1 4
?<Constant "malloc %d fault!"> 20
Others 192
514 bytes in segment CODE
150 bytes in segment CODE_I
20 bytes in segment DATA_C
4 bytes in segment DATA_Z
24 bytes in segment INITTAB
496 bytes of CODE memory (+ 192 bytes shared)
20 bytes of CONST memory
4 bytes of DATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -