Diferencia entre revisiones de «Errores en Simulacion - Codewarrior 6.3»

De Wikitronica
Saltar a: navegación, buscar
Línea 5: Línea 5:
 
Si el Programa Principal es muy largo y se emplea el manejo de subrutinas a través del comando BRS (Branch Subrutine) y las mismas son colocadas al final del código del programa principal, se puede presentar el siguiente mensaje de error:
 
Si el Programa Principal es muy largo y se emplea el manejo de subrutinas a través del comando BRS (Branch Subrutine) y las mismas son colocadas al final del código del programa principal, se puede presentar el siguiente mensaje de error:
  
 
+
'''Error: Axxx: Value out of range -128...127'''
                '''Error: Axxx: Value out of range -128...127'''
+
[[Archivo:Error Fuera de Rango.png|thumb|left|400px|Error Fuera de Rango]]
                [[Archivo:Error Fuera de Rango.png|thumb|left|400px|Error Fuera de Rango]]
+
 
+
+
 
+
 
+
 
+
 
+
 
+
 
Esto es debido a que el comando BSR maneja un relativo, el cual permite realizar los saltos a una rutina deseada con un desplazamiento ubicado en el rango de 80 - 7F (-128 … 127), ya que el mismo puede realizar el Branch para arriba o abajo (Dependiendo el caso).
 
Esto es debido a que el comando BSR maneja un relativo, el cual permite realizar los saltos a una rutina deseada con un desplazamiento ubicado en el rango de 80 - 7F (-128 … 127), ya que el mismo puede realizar el Branch para arriba o abajo (Dependiendo el caso).
  
Línea 21: Línea 13:
 
Se pueden establecer tres tipos de soluciones para este caso:
 
Se pueden establecer tres tipos de soluciones para este caso:
  
A. Si el Código principal es muy largo, se debe definir las subrutinas justo después de las llamadas con BSR, una vez realizada cada una de estas realizamos un BRA al código principal
+
A. Si el código principal es muy largo, se debe definir las subrutinas justo después de las llamadas con BSR, una vez realizada cada una de estas realizamos un BRA al código principal
  
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Línea 110: Línea 102:
  
 
                 CLI
 
                 CLI
 +
 +
                ...
 +
                ...
 +
                ...
 +
                BRA *
  
 
;**************************************************************
 
;**************************************************************
Línea 134: Línea 131:
 
               ORG  $FFCE
 
               ORG  $FFCE
 
               DC.W  Interrupcion_RTC
 
               DC.W  Interrupcion_RTC
</syntaxhighlight>                                                                                                                                            
+
</syntaxhighlight>                                                                                                                                            
 +
B. Por cuestiones de estética del código muchos programadores no podrían elegir la primera solución, como alternativa de ello se puede establecer la siguiente configuración, el cual consiste en sustituir los BSR por etiquetas
  
 +
<syntaxhighlight lang="c">
 +
Configurar_SP_COP:
 +
 +
                LDHX  #RAMEnd+1       
 +
                TXS                ; SP / $17FF
 +
 +
                LDA  #$42       
 +
                STA  SOPT1        ; Se guarda en SOPT1
 +
                                  ; COPE = 0, COPT = 1, STOPE= 0
 +
                                  ; 0, 0, RSTOPE= 0
 +
                                  ; BKGDPE= 1 --- Habilita el backroung debug mode
 +
                                  ; RSTPE = 0 --- Deshabilita el RESET
  
 +
; -------------------------------------------------------------------
 +
Configurar_GPIO:
 +
         
 +
;Se configura los 6 bits inferiores de PTC y los 2 bits superiores de PTE como salida
 +
;Corresponden a los leds de la tarjeta
 +
 +
                LDA #$3F
 +
                STA PTCDD
 +
                LDA #$C0
 +
                STA PTEDD
 +
 +
                LDA #$3F
 +
                STA PTCD
 +
                LDA #$C0
 +
                STA PTED
 +
 +
; ---------------------------------------------------------------------------
 +
Configurar_RTC:
 +
 +
                LDA #$04
 +
                STA SCGC2      ; Habilitamos el Clock Gate para el RTC
 +
         
 +
                LDA #00               
 +
                STA RTCMOD    ; Definimos el valor del registro modulo del RTC
 +
         
 +
                LDA #%00011000    ; Configuramos el RTCSC / Reloj configurado a 1ms. Fuente reloj interna 1khz.
 +
                                  ; Interrupciones habilitadas (bit 4)
 +
                                  ; RTIF=0, RTCLKS6=0 RTCLKS5=0
 +
                                  ; RTIE=1, RTCPS3=1, RTCPS2=0
 +
                                  ; RTCPS1=0, RTCPS0=0
 +
                STA RTCSC
 +
 +
main:
 +
 +
                MOV #10, Contador
 +
                MOV #1, Num1
 +
                MOV #2, Num2
 +
                ...
 +
                ...
 +
                ...
 +
 +
                CLI
 +
                ...
 +
                ...
 +
                ...
 +
 +
                BRA *
 +
</syntaxhighlight> 
 +
 +
C. En vez de aplicar BRS, se puede manejar el comando JSR (Jump Subrutine)eliminado por completo este error:                      <syntaxhighlight lang="c">
 +
Configurar_SP_COP:
 +
 +
                LDHX  #RAMEnd+1       
 +
                TXS                ; SP / $17FF
 +
 +
                LDA  #$42       
 +
                STA  SOPT1        ; Se guarda en SOPT1
 +
                                  ; COPE = 0, COPT = 1, STOPE= 0
 +
                                  ; 0, 0, RSTOPE= 0
 +
                                  ; BKGDPE= 1 --- Habilita el backroung debug mode
 +
                                  ; RSTPE = 0 --- Deshabilita el RESET
 +
 +
Configuracion_Previa:
 +
 +
                JSR Configurar_GPIO
 +
                JSR Configurar_RTC
 +
main:
 +
 +
                MOV #10, Contador
 +
                MOV #1, Num1
 +
                MOV #2, Num2
 +
                ...
 +
                ...
 +
                ...
 +
 +
                CLI
 +
                ...
 +
                ...
 +
                ...
 +
 +
                BRA *
 +
 +
; -------------------------------------------------------------------
 +
Configurar_GPIO:
 +
         
 +
;Se configura los 6 bits inferiores de PTC y los 2 bits superiores de PTE como salida
 +
;Corresponden a los leds de la tarjeta
 +
 +
                LDA #$3F
 +
                STA PTCDD
 +
                LDA #$C0
 +
                STA PTEDD
 +
 +
                LDA #$3F
 +
                STA PTCD
 +
                LDA #$C0
 +
                STA PTED
 +
         
 +
                RTS
 +
 +
; ---------------------------------------------------------------------------
 +
Configurar_RTC:
 +
 +
                LDA #$04
 +
                STA SCGC2      ; Habilitamos el Clock Gate para el RTC
 +
         
 +
                LDA #00               
 +
                STA RTCMOD    ; Definimos el valor del registro modulo del RTC
 +
         
 +
                LDA #%00011000    ; Configuramos el RTCSC / Reloj configurado a 1ms. Fuente reloj interna 1khz.
 +
                                  ; Interrupciones habilitadas (bit 4)
 +
                                  ; RTIF=0, RTCLKS6=0 RTCLKS5=0
 +
                                  ; RTIE=1, RTCPS3=1, RTCPS2=0
 +
                                  ; RTCPS1=0, RTCPS0=0
 +
                STA RTCSC
 +
         
 +
                RTS
 +
</syntaxhighlight>                                                                                                                                                                                                                                                 
  
 
==Pantalla en blanco en el True-Time Simulator & Real-Timer Debugger==
 
==Pantalla en blanco en el True-Time Simulator & Real-Timer Debugger==
  
 
==Modos de direccionamiento==
 
==Modos de direccionamiento==

Revisión del 20:50 24 mar 2013

En el desarrollo de un programa, al momento de una depuración de un proyecto nos puede salir los siguientes mensajes de error:

Error Fuera de Rango

Si el Programa Principal es muy largo y se emplea el manejo de subrutinas a través del comando BRS (Branch Subrutine) y las mismas son colocadas al final del código del programa principal, se puede presentar el siguiente mensaje de error:

Error: Axxx: Value out of range -128...127

Esto es debido a que el comando BSR maneja un relativo, el cual permite realizar los saltos a una rutina deseada con un desplazamiento ubicado en el rango de 80 - 7F (-128 … 127), ya que el mismo puede realizar el Branch para arriba o abajo (Dependiendo el caso).

Soluciones

Se pueden establecer tres tipos de soluciones para este caso:

A. Si el código principal es muy largo, se debe definir las subrutinas justo después de las llamadas con BSR, una vez realizada cada una de estas realizamos un BRA al código principal

;***************************************************************************************************
;             Codigo de Ejemplo ... Solucion A.                                                    *
;***************************************************************************************************
 
; Include derivative-specific definitions
                INCLUDE 'derivative.inc'
;
; export symbols
                ABSENTRY Configurar_SP_COP
;
; definicion de variables

                ORG    Z_RAMStart

Contador:    DS.B 1
Num1:        DS.B 1
Num2:        DS.B 1

; code section

                ORG    ROMStart
 
Configurar_SP_COP:
 
                LDHX   #RAMEnd+1        
                TXS                ; SP / $17FF
 
                LDA   #$42        
                STA   SOPT1        ; Se guarda en SOPT1
                                   ; COPE = 0, COPT = 1, STOPE= 0
                                   ; 0, 0, RSTOPE= 0
                                   ; BKGDPE= 1 --- Habilita el backroung debug mode
                                   ; RSTPE = 0 --- Deshabilita el RESET

Configuracion_Previa:

                BSR Configurar_GPIO
                BSR Configurar_RTC
                BRA main

; -------------------------------------------------------------------
Configurar_GPIO:
           
;Se configura los 6 bits inferiores de PTC y los 2 bits superiores de PTE como salida
;Corresponden a los leds de la tarjeta

                LDA #$3F
                STA PTCDD
                LDA #$C0
                STA PTEDD

                LDA #$3F
                STA PTCD
                LDA #$C0
                STA PTED
           
                RTS

; ---------------------------------------------------------------------------
Configurar_RTC:

                LDA #$04
                STA SCGC2       ; Habilitamos el Clock Gate para el RTC
           
                LDA #00                
                STA RTCMOD    ; Definimos el valor del registro modulo del RTC
           
                LDA #%00011000    ; Configuramos el RTCSC / Reloj configurado a 1ms. Fuente reloj interna 1khz.
                                  ; Interrupciones habilitadas (bit 4)
                                  ; RTIF=0, RTCLKS6=0 RTCLKS5=0
                                  ; RTIE=1, RTCPS3=1, RTCPS2=0
                                  ; RTCPS1=0, RTCPS0=0
                STA RTCSC
          
                RTS

main:

                MOV #10, Contador
                MOV #1, Num1
                MOV #2, Num2
                ...
                ...
                ...

                CLI

                ...
                ...
                ...
                BRA *

;**************************************************************
;*                 RUTINAS DE INTERRUPCION                    *
;**************************************************************
 ;Limpiamos las banderas de interrupcion. Se escribe un 1 en la bandera RTIF  
          
                LDA RTCSC
                ORA #%10000000
                STA RTCSC
   
                ...
                ...   
                ...
   
                RTI

;**************************************************************
;*                 INTERRUPT VECTORS                          *
;**************************************************************
               ORG   $FFFE
               DC.W  Configurar_SP_COP     ; Reset

               ORG   $FFCE
               DC.W  Interrupcion_RTC

B. Por cuestiones de estética del código muchos programadores no podrían elegir la primera solución, como alternativa de ello se puede establecer la siguiente configuración, el cual consiste en sustituir los BSR por etiquetas

Configurar_SP_COP:
 
                LDHX   #RAMEnd+1        
                TXS                ; SP / $17FF
 
                LDA   #$42        
                STA   SOPT1        ; Se guarda en SOPT1
                                   ; COPE = 0, COPT = 1, STOPE= 0
                                   ; 0, 0, RSTOPE= 0
                                   ; BKGDPE= 1 --- Habilita el backroung debug mode
                                   ; RSTPE = 0 --- Deshabilita el RESET

; -------------------------------------------------------------------
Configurar_GPIO:
           
;Se configura los 6 bits inferiores de PTC y los 2 bits superiores de PTE como salida
;Corresponden a los leds de la tarjeta

                LDA #$3F
                STA PTCDD
                LDA #$C0
                STA PTEDD

                LDA #$3F
                STA PTCD
                LDA #$C0
                STA PTED

; ---------------------------------------------------------------------------
Configurar_RTC:

                LDA #$04
                STA SCGC2       ; Habilitamos el Clock Gate para el RTC
           
                LDA #00                
                STA RTCMOD    ; Definimos el valor del registro modulo del RTC
           
                LDA #%00011000    ; Configuramos el RTCSC / Reloj configurado a 1ms. Fuente reloj interna 1khz.
                                  ; Interrupciones habilitadas (bit 4)
                                  ; RTIF=0, RTCLKS6=0 RTCLKS5=0
                                  ; RTIE=1, RTCPS3=1, RTCPS2=0
                                  ; RTCPS1=0, RTCPS0=0
                STA RTCSC

main:

                MOV #10, Contador
                MOV #1, Num1
                MOV #2, Num2
                ...
                ...
                ...

                CLI
                ...
                ...
                ...

                BRA *
C. En vez de aplicar BRS, se puede manejar el comando JSR (Jump Subrutine)eliminado por completo este error:
Configurar_SP_COP:
 
                LDHX   #RAMEnd+1        
                TXS                ; SP / $17FF
 
                LDA   #$42        
                STA   SOPT1        ; Se guarda en SOPT1
                                   ; COPE = 0, COPT = 1, STOPE= 0
                                   ; 0, 0, RSTOPE= 0
                                   ; BKGDPE= 1 --- Habilita el backroung debug mode
                                   ; RSTPE = 0 --- Deshabilita el RESET

Configuracion_Previa:

                JSR Configurar_GPIO
                JSR Configurar_RTC
main:

                MOV #10, Contador
                MOV #1, Num1
                MOV #2, Num2
                ...
                ...
                ...

                CLI
                ...
                ...
                ...

                BRA *

; -------------------------------------------------------------------
Configurar_GPIO:
           
;Se configura los 6 bits inferiores de PTC y los 2 bits superiores de PTE como salida
;Corresponden a los leds de la tarjeta

                LDA #$3F
                STA PTCDD
                LDA #$C0
                STA PTEDD

                LDA #$3F
                STA PTCD
                LDA #$C0
                STA PTED
           
                RTS

; ---------------------------------------------------------------------------
Configurar_RTC:

                LDA #$04
                STA SCGC2       ; Habilitamos el Clock Gate para el RTC
           
                LDA #00                
                STA RTCMOD    ; Definimos el valor del registro modulo del RTC
           
                LDA #%00011000    ; Configuramos el RTCSC / Reloj configurado a 1ms. Fuente reloj interna 1khz.
                                  ; Interrupciones habilitadas (bit 4)
                                  ; RTIF=0, RTCLKS6=0 RTCLKS5=0
                                  ; RTIE=1, RTCPS3=1, RTCPS2=0
                                  ; RTCPS1=0, RTCPS0=0
                STA RTCSC
          
                RTS

Pantalla en blanco en el True-Time Simulator & Real-Timer Debugger

Modos de direccionamiento

Contributors

CeMoron, Nsroger, Racuna