Busco solucion a bug en atmel studio 6 cuando utilizo el simulator: sei()

Cuando estoy simulando en el simulator de Atmel studio 6.2, me falla la simulacion, creo que es un bug del AStudio, podria alguien decirme como resolver dicha falla por favor...? ...
 
Cuando estoy simulando en el simulator de Atmel studio 6.2, me falla la simulacion, creo que es un bug del AStudio, podria alguien decirme como resolver dicha falla por favor...? ...
habria que ver cual es el error que te indica ... seria bueno para que te ayuden .... una captura de pantalla .... :cool:
 
Al momento de llegar a la linea de sei(); deja de simular el Atmel Studio.
Mi propósito es verificar el correcto funcionamiento del siguiente código (Envío de texto a un monitor VGA):

Código:
#define F_CPU 16000000UL

#include <avr/interrupt.h>
#include <util/delay.h>
#include "vgafont.h"

char *text[20] =
    {
        "## ##  ####  #### ",
        "## ## ##    ##  ##",
        "## ## ## ## ######",
        " ###  ## ## ##  ##",
        "  #    #### ##  ##",
        "                  ",
        "******************",
        "*                *",
        "* 18 by 19 chars *",
        "* video textmode *",
        "* for Atmel AVRs *",
        "*                *",
        "* Licensed under *"
        "*  the GNU  GPL  *",
        "*                *",
        "* Updates+info:  *",
        "* jmp.no/vgavr/  *", 
        "*                *",
        "* VGA rules! :-D *",
        "******************",
    };

#define COLUMN(r)    SPDR=pgm_read_byte(&font[rowoftext[r]][fontline]);
#define SCANLINES    525

static uint8_t  *rowoftext;
static uint8_t  fontline=0;

#define VSYNC_LOW_HSYNC_LOW   PORTB=0b00000000;
#define VSYNC_HIGH_HSYNC_LOW  PORTB=0b00010000;
#define VSYNC_LOW_HSYNC_HIGH  PORTB=0b00100000;
#define VSYNC_HIGH_HSYNC_HIGH PORTB=0b00110000;

ISR (TIMER1_COMPA_vect) {
    static uint16_t rasterline=0;
    static uint8_t  textrow=0;
    uint8_t lineadd = rasterline&1;

    //TCNT0 = 0xC3;
    TCNT1 = 0xC3;

    if(rasterline <= 2 ) {
        VSYNC_LOW_HSYNC_HIGH;
    } else {
        VSYNC_HIGH_HSYNC_HIGH;
    }
    rasterline++;

    if( rasterline > 48 ) {
        COLUMN(0);
        COLUMN(1);
        COLUMN(2);
        COLUMN(3);
        COLUMN(4);
        COLUMN(5);
        COLUMN(6);
        COLUMN(7);
        COLUMN(8);
        COLUMN(9);
        COLUMN(10);
        COLUMN(11);
        COLUMN(12);
        COLUMN(13);
        COLUMN(14);
        COLUMN(15);
        COLUMN(16);
        COLUMN(17);
        COLUMN(18);
        fontline += lineadd;
        if( fontline >= FONTHEIGHT ) {
            fontline=0;
            rowoftext = (uint8_t *)text[textrow++];
            _delay_us(1);
        } else {
            _delay_us(2);
        }
    } else {
        _delay_us(24);
    }

    if(rasterline <= 2 ) {
        VSYNC_LOW_HSYNC_LOW;
        fontline=0;
        textrow=0;
        rowoftext = (uint8_t *)text[textrow++];
    } else {
        VSYNC_HIGH_HSYNC_LOW;
        if( rasterline > SCANLINES )
            rasterline = textrow = fontline = 0;
        }
}

void init_timer() {
    TCCR1B |= (1<<WGM12);
    TIMSK |= (1<<OCIE1A)|(1<<TOV0);
    OCR1A = 510;
    TCCR1B |= (1<<CS10);
}


void init_spi() {
    SPSR = (1<<SPI2X);
    SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA);
}

int main() {

    // On the ATmega128:
    // PB2: Graphics (via voltage divider to obtain 0.7v max)
    // PB4: HSYNC
    // PB5: VSYNC

    DDRB = 0b00110100;

    init_spi();
    init_timer();
    sei();
    //SREG |= 0x80;  // set the high-order bit in the status register
        
    
    // Loop forever
    for( ;; ) {}
}
 

Adjuntos

  • Antes_Ejecutarse_sei().jpg
    Antes_Ejecutarse_sei().jpg
    100.9 KB · Visitas: 7
  • Despues_Ejecutarse_sei().jpg
    Despues_Ejecutarse_sei().jpg
    93.6 KB · Visitas: 8
Última edición por un moderador:
A ver, el sei simplemente tiene que hacer esa OR que hiciste vos abajo:

Código:
SREG |= 0x80;

Me parece recontra de más llamar a una función solo para hacer esa OR.
 
Última edición por un moderador:
Hola.....lo que pasa es que en uno de mis intentos para ver por que falla la simulacion puse esa línea.....que como ves está comentada. Pero el problema principal es que en la simulacion del Atmel Studio 6 falla al ejecutar la linea:
sei();


Sabes por que pasa ésto....?
Existe alguna solución...?
O es un bug del Atmel Studio....?

Que me puedes recomendar para simular mi código, aparte del Atmel Studio 6....?

Agradezco de antemano tu amable apoyo.......mio gracias......
 
Última edición por un moderador:
Cuando se ejecuta sei(), se activan las interrupciones, así que el control puede pasar a la interrupción casi inmediatamente.

El problema puede estar ahí.

Según la documentación, la instrucción que sigue a SEI se ejecutará antes de que se ejecute cualquier interrupción pendiente (para asegurar, por ejemplo, la ejecución de una instrucción SLEEP), pero como estamos hablando de una simulación... no estoy tan seguro.
 
Última edición por un moderador:
Gracias Joaquin Ferrero......intenté poner en la sigiente linea de sei(); un sleep();, y si siguen la simulacion de AStudio6, solo que en ésta nueva linea el simulador falla y NO avanza. Lo que he estado encontrando en internet es que creo que es un bug del AStudio6.

Alguien de ustedes podria darme alguna(s) sugerencias para simular código en C para un AVR, en éste caso para ATMEGA128 Y EL ATMEGA168, por favor......

Necesito simular mi código para corregir las posibles fallas, y por ende programar los AVR's, please......tengo muchos días sin poder avanzar, de antemano les agradezco muchisimo su apoyo, en verdad buena....llevo dias sin poder avanzar...


Ricardo, saludos desde Guadalajara Jalisco México
 
Última edición por un moderador:
¿En dónde has visto que es un bug del AVRStudio 6?

Yo no puedo ayudarte con ese programa porque no uso Windows.

Sí que hay simuladores de AVR, según he visto por Google.
 
Última edición por un moderador:
bueno a ver si con esto ayudo un poco .... bueno por empezar el avr studio 6 y suscesivos no los uso..... se me hizo imposible o inentendible usarlos ...pero si me funciona una vercion anterior .... la duda que tengo es ..... ¿¿¿ como sabes que no funcina ????? ...... por lo que vi en tu capturas de pantallas .... te limitas a el traceador ( flecha amarilla ) pero al parecer no teminas de compilar ...... para empezar seria bueno si larga algun error ..... la simulacion ..... yo particularmente no la uso ........ no es lo mismo que en la aplicacion real ... que alli si puede haber errores .... aca tenes ejemplo de como me salen.... y si funcionan ... a captura de pantalla .jpg a captura de pantalla 1.jpg a captura de pantalla 2.jpg a captura de pantalla 3.jpg
 
Gracias Joaquin Ferrero......intenté poner en la sigiente linea de sei(); un sleep();, y si siguen la simulacion de AStudio6, solo que en ésta nueva linea el simulador falla y NO avanza. Lo que he estado encontrando en internet es que creo que es un bug del AStudio6.

Alguien de ustedes podria darme alguna(s) sugerencias para simular código en C para un AVR, en éste caso para ATMEGA128 Y EL ATMEGA168, por favor......

Necesito simular mi código para corregir las posibles fallas, y por ende programar los AVR's, please......tengo muchos días sin poder avanzar, de antemano les agradezco muchisimo su apoyo, en verdad buena....llevo dias sin poder avanzar...


Ricardo, saludos desde Guadalajara Jalisco México

No te ahogues con un vaso de agua, si ves que tenès problemas con simular el sei no lo simules, evitalo.

Y nuevamente, hace la OR que es màs fàcil.

Yo el AVR 5 y 6 lo usè con el Atmega 8, 16 y 128; la verdad no me trajo ningùn problema, incluso me resultò muy ùtil para debugear a nivel de assembler.
 
Muchas gracias por sus comentarios: locodelafonola y cosmefulanito04. Lo que pasa es que el avance (la flechita amarilla) se detiene, NO avanza en la simulacion. Si me compilar ...etc......Pero la simulacion nomas no. He estado viendo muchos comentarios que existe ese bug en el Atmel Studio 6 (en la Simulacion) y sobre todo cuando uno trata de simular interrupciones y esas cosas.
Basicamente estoy atorado en este programa (envio de texto a un monitor VGA), tengo muchos dias y nomas NO puedo avanzar, por ello quisiera poder simular para ver donde tengo el error.
El proyecto original es éste:
jmp.no/blog/vgavr
De hecho tiene un error en cuanto al orden de las resistencias (deben de ser al reves. Ver teoría:
rickard.gunee.com/projects/video/pic/howto.php
Se utilizan solamente 3 pines del micro (ATMEGA128), yo lo hare con el ATMEGA168 (haciendo los cambios respectivos de los pines). Pero nomás NO lo he podido echar a volar. Si alguno de ustedes pudiera echarme la mano, se los agradeceria INFINITAMENTE. La verdad el proyecto esta muy interesante, ójala y me pudieran ayudar, de antemano les agradezco su valiosisimo apoyo, mil gracias.
Un fuerte abrazo y saludos desde Guadalajara México
 
hola amigo ...bueno vamos por partes...el proyecto no lo entiendo .... pues donde esta el montaje aparece con pic ....y la parte de la libreria esta con atmega ..( me perdi de algo :oops::oops::oops: ) ..... ahora bien ..... en la pagina donde esta las librerias te aclara que el proyecto fue armado con AVR STUDIO 4 .... y ami me paso que cuando empeze ... usaba el 6.1 ..y el proyecto no me funcionaba bien .... ( errores mios que no sabia como solucionatlos ) ... entonces decidi probar con la vercion que fueron creadas las librerias .......y bualllaaaa ..... funcionaron perfectamente ..... yo abri el proyecto con la extencion .APS ...en avr studio 4.13 +sp1 y sp2 ...con WinAVR-20071221 .... que es la vercion gcc del compilador en c ....y aca te muestro capture_09182014_135840.jpg bueno tal vez cosme fulanito04 ..que sabe mucho mas que yo ........ pueda explicar lo de los puntos rojos ..... ( el me enseño gracias cosme ) .... y ese error que aparece ...... apesar de eso compilo bien y no largo error alguno ...... tal vez no sea la vercion que se nesesita ... puede ser la 4.12 o 4.18 no se...... aca subo las librerias .... y dentro del rar esta el .rar original ...
 

Adjuntos

  • vgavr.rar
    45.6 KB · Visitas: 0
Última edición:
Por favor, publica un enlace a los comentarios que dices que hablan del error del simulador del Atmel Studio 6.

En cuanto al fallo en tu programa. ¿Si quitas sei(), funciona? Quiero decir que ya sé que las interrupciones no estarán habilitadas, pero entonces entrará en el bucle sin fin. ¿Hace eso: se mete en el bucle y sigue bien?

Edito:
Ya lo encontré: parece que es el error AVRSV-3572, que se corrigió en la versión de desarrollo de la siguiente versión del AVR Studio. Hay una referencia a él en el #2275 (julio 2012). En él se indica que la instrucción sei(), en el modo de ejecución paso a paso, no activa el flag I.

Entonces... las soluciones serían: actualizar la versión del AVR Studio, o ejecutar el programa no en el modo paso a paso, sino un Run normal; o... hacer lo que te dijo @cosmefulanito04 unos mensajes más arriba.

En la documentación del AVR Studio 6.1, se reconoce ese error, como corregido:

Issue #AVRSV-3572:
Stepping on sei(); does not set I flag.
 
Última edición por un moderador:
Por favor, publica un enlace a los comentarios que dices que hablan del error del simulador del Atmel Studio 6.

En cuanto al fallo en tu programa. ¿Si quitas sei(), funciona? Quiero decir que ya sé que las interrupciones no estarán habilitadas, pero entonces entrará en el bucle sin fin. ¿Hace eso: se mete en el bucle y sigue bien?
hola amigo .... yo habri el proyecto original con el atmega 128 ... y la complilacion funcino perfecto ... solo los puntos rojos esos ... la funcion SEI() funciono bien .... no esta el problema alli.... tal vez al cambiar el micro por el 168 ..tendria que publicar su librerias ..... alli esta el error
 
Última edición:
Atrás
Arriba