start08.lst

来自「在MC68HC908JB8上移植UCOSII成功」· LST 代码 · 共 413 行 · 第 1/2 页

LST
413
字号
  142:  #if USE_C_IMPL /* (optimized) C implementation of COPY DOWN */
  143:    p = (int*)_startupData.toCopyDownBeg;
  144:    for (;;) {
  145:      i = *p; /* nof */
  146:      if (i == 0) {
  147:        break;
  148:      }
  149:      dst = (char*)p[1]; /* dstAddr */
  150:      p+=2;
  151:      do {
  152:        /* p points now into 'bytes' */
  153:        *dst = *((char*)p); /* copy byte-wise */
  154:        ((char*)p)++;
  155:        dst++;
  156:        i--;
  157:      } while (i!= 0);
  158:    }  
  159:  #elif defined(__OPTIMIZE_FOR_SIZE__)
  160:    {
  161:  
  162:    asm {
  163:               LDA    _startupData.toCopyDownBeg:(1+toCopyDownBegOffs)
  003f c60011           LDA   _startupData:17
  164:               PSHA  
  0042 87               PSHA  
  165:               LDA    _startupData.toCopyDownBeg:(0+toCopyDownBegOffs)
  0043 c60010           LDA   _startupData:16
  166:               PSHA  
  0046 87               PSHA  
  0047          L47:    
  167:  Loop0:             
  168:               JSR    loadByte  ; load high byte counter
  0047 ad00             BSR   loadByte
  169:               TAX              ; save for compare
  0049 97               TAX   
  170:               INCA  
  004a 4c               INCA  
  171:               STA    i
  004b 9ee703           STA   3,SP
  172:               JSR    loadByte  ; load low byte counter
  004e ad00             BSR   loadByte
  173:               INCA  
  0050 4c               INCA  
  174:               STA    i:1
  0051 9ee704           STA   4,SP
  175:               DECA
  0054 4a               DECA  
  176:               BNE    notfinished
  0055 2603             BNE   L5A ;abs = 005a
  177:               CBEQX  #0, finished
  0057 510018           CBEQX #0,L72 ;abs = 0072
  005a          L5A:    
  178:  notfinished:
  179:  
  180:               JSR    loadByte  ; load high byte ptr
  005a ad00             BSR   loadByte
  181:               PSHA  
  005c 87               PSHA  
  182:               PULH  
  005d 8a               PULH  
  183:               JSR    loadByte  ; load high byte ptr
  005e ad00             BSR   loadByte
  184:               TAX              ; HX is now destination pointer
  0060 97               TAX   
  185:               BRA    Loop1
  0061 2005             BRA   L68 ;abs = 0068
  0063          L63:    
  186:  Loop3:             
  187:  Loop2:             
  188:               JSR    loadByte  ; load data byte
  0063 ad00             BSR   loadByte
  189:               STA    0,X
  0065 f7               STA   ,X
  190:               AIX    #1
  0066 af01             AIX   #1
  0068          L68:    
  191:  Loop1:
  192:               DBNZ   i:1, Loop2
  0068 9e6b04f7         DBNZ  4,SP,L63 ;abs = 0063
  193:               DBNZ   i:0, Loop3
  006c 9e6b03f3         DBNZ  3,SP,L63 ;abs = 0063
  194:               BRA    Loop0
  0070 20d5             BRA   L47 ;abs = 0047
  0072          L72:    
  195:  
  196:  finished:
  197:               AIS #2
  198:      }
  199:    }
  200:  
  201:  
  202:  
  203:  
  204:  #else /* optimized asm version. Some bytes (ca 3) larger than C version (when considering the runtime routine too), but about 4 times faster */
  205:    asm {
  206:               LDX    _startupData.toCopyDownBeg:(0+toCopyDownBegOffs)
  207:               PSHX
  208:               PULH
  209:               LDX    _startupData.toCopyDownBeg:(1+toCopyDownBegOffs)
  210:  next:
  211:               LDA   0,X    ; list is terminated by 2 zero bytes
  212:               ORA   1,X
  213:               BEQ copydone
  214:               PSHX         ; store current position
  215:               PSHH
  216:               LDA   3,X    ; psh dest low
  217:               PSHA
  218:               LDA   2,X    ; psh dest high
  219:               PSHA
  220:               LDA   1,X    ; psh cnt low
  221:               PSHA
  222:               LDA   0,X    ; psh cnt high
  223:               PSHA
  224:               AIX   #4
  225:               JSR  _COPY_L ; copy one block
  226:               PULH
  227:               PULX       
  228:               TXA
  229:               ADD   1,X    ; add low 
  230:               PSHA 
  231:               PSHH
  232:               PULA
  233:               ADC   0,X    ; add high
  234:               PSHA
  235:               PULH
  236:               PULX
  237:               AIX   #4
  238:               BRA next
  239:  copydone:
  240:    }
  241:  #endif
  242:  
  243:    
  244:    /* FuncInits: for C++, this are the global constructors */
  245:  #ifdef __cplusplus
  246:  #ifdef __ELF_OBJECT_FILE_FORMAT__
  247:    i = _startupData.nofInitBodies - 1;
  248:    while ( i >= 0) {
  249:      (&_startupData.initBodies->initFunc)[i]();  /* call C++ constructors */
  250:      i--;
  251:    }
  252:  #else
  253:    if (_startupData.mInits != NULL) {
  254:      _PFunc *fktPtr;
  255:      fktPtr = _startupData.mInits;
  256:      while(*fktPtr != NULL) {
  257:        (**fktPtr)(); /* call constructor */
  258:        fktPtr++;
  259:      }
  260:    }
  261:  #endif     
  262:  #endif  
  263:    /* LibInits: used only for ROM libraries */
  264:  }
  0072 a706             AIS   #6
  0074 81               RTS   
  265:  
  266:  #pragma NO_EXIT
  267:  #ifdef __cplusplus
  268:    extern "C"
  269:  #endif
  270:  void _Startup (void) { /* To set in the linker parameter file: 'VECTOR 0 _Startup' */

Function: _Startup
Source  : C:\motoctest\ucos1\sources\Start08.c
Options : -Cc -EnvGENPATH=C:\motoctest\ucos1;C:\motoctest\ucos1\bin;C:\motoctest\ucos1\cmd;C:\motoctest\ucos1\prm;C:\motoctest\ucos1\sources;C:\Metrowerks\lib\HC08c\LIB;C:\Metrowerks\lib\HC08c\src;C:\Metrowerks\lib\HC08c\INCLUDE -EnvLIBPATH=C:\Metrowerks\lib\HC08c\INCLUDE -EnvOBJPATH=C:\motoctest\ucos1\bin -EnvTEXTPATH=C:\motoctest\ucos1\bin -La=%f.inc -Lasm=%n.lst -ObjN=C:\motoctest\ucos1\ucos1_Data\MMDS-MMEVS\ObjectCode\Start08.c.o -WmsgSd20001

  271:  /*  purpose:    1)  initialize the stack
  272:                  2)  initialize run-time, ...
  273:                      initialize the RAM, copy down init dat etc (Init)
  274:                  3)  call main;
  275:      called from: _PRESTART-code generated by the Linker
  276:  */
  277:  #ifdef __ELF_OBJECT_FILE_FORMAT__
  278:    DisableInterrupts;  /* in HIWARE format, this is done in the prestart code */
  279:  #endif
  280:  asm{
  281:  		MOV   	#$27,31// USB Reset Disable, COP Disable
  0000 6e271f           MOV   #39,31
  0003          L3:     
  282:     }    
  283:    for (;;) { /* forever: initialize the program; call the root-procedure */
  284:      if (!(_startupData.flags&STARTUP_FLAGS_NOT_INIT_SP)) {
  0003 c60001           LDA   _startupData:1
  0006 a502             BIT   #2
  0008 2604             BNE   LE ;abs = 000e
  285:        /* initialize the stack pointer */
  286:        INIT_SP_FROM_STARTUP_DESC();
  000a 450000           LDHX  @__SEG_END_SSTACK
  000d 94               TXS   
  000e          LE:     
  287:      } 
  288:      Init();
  000e cd0000           JSR   Init
  289:      (*_startupData.main)();
  0011 ce0002           LDX   _startupData:2
  0014 89               PSHX  
  0015 8a               PULH  
  0016 ce0003           LDX   _startupData:3
  0019 fd               JSR   ,X
  001a 20e7             BRA   L3 ;abs = 0003
  290:    } /* end loop forever */
  291:  }
  292:  
  293:  

⌨️ 快捷键说明

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