Vai al contenuto

Pop-up con Program error in compilazione

Home Forum Informazioni ambiente di sviluppo LogicLab Pop-up con Program error in compilazione

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Autore
    Post
  • #36119
    Sergio Bertana
    Amministratore del forum

    Segnalo un bug in LogicLab codice PCK033H500 Pacchetto installazione suite IEC61131-3 Vers. 2.5.0 (LogicLab Ver. 4.4.0.16). Nella compilazione dei progetti per i targets:

    SlimLine Mps054 XTarget 12.0
    SlimLine Pcb137 XTarget 12.0

    Se compare un Pop-up con un errore di compilazione (Screenshot):

    PROGRAM ERROR Module:armcodegen.cpp Line7079

    Il problema può essere legato alla definizione di lunghezza delle stringhe, in generale per evitare il problema occorre che la dimensione della stringa (Sommando 1 per il codice tappo) sia un numero divisibile per 4. Nell’esempio 802+1=803 non è divisibile per 4. Per risolvere il problema basta definire lunghezza stringa 803.

    #50923
    Rubox
    Partecipante

    Sono incappato in un messaggio di errore come quello riportato: la linea del codice cpp differente (7978), LogicLab Rel 5.0 versione 3.0.0.0 build 17/09/2018 5.8.0.17. Controllando con Toolly i logs ho notato un warning che non riesco a risolvere. La stringa di Toolly è la seguente:

    [W] SFW198 [data/ora] 6000, User program error: 9932200

    Ho individuato il programma che lo genera: esegue una richiesta HTTP di tipo POST. Se commento la parte in cui uso le SysLWVarsnprintf il warning sparisce. Quello che non capisco è perché salta fuori: la stringa su cui scrivo è definita di lunghezza 255. Ci scrivo dentro massimo 100 caratteri con comando del tipo:

    i:=Sysmemset(ADR(richiesta),0,SIZEOF(richiesta));
    i:=SysVarsnprintf(ADR(richiesta),SIZEOF(richiesta),’dato1=%4.2f’,REAL_TYPE,ADR(rDato1));i:=SysLWVarsnprintf(ADR(richiesta),SIZEOF(richiesta),’dato2=%4.2f’,REAL_TYPE,ADR(rDato2));

    Ho provato a mettere la dimensione della variabile “richiesta” invece della funziona SIZEOF ma non cambia nulla. Ho provato a commentare la linea con Sysmemset (che è superflua usando come prima funzione SysVarsnprintf) e non cambia nulla: c’è sempre quel warning.

    Avevo appena modificato la lunghezza di alcune stringhe da 256 a 512 e da 512 a 1024. Adesso nel dubbio ho impostato tutte le stringhe come potenza di 2 meno 1, quindi 63, 257, 1023, 511 e via dicendo (anche se è stato sufficiente impostare quella più lunga a 1023 per far scomparire il messaggio in compilazione).

    Mi conferma che anche l’errore che ho avuto io può esser dovuto alle stringhe, oppure devo cercare l’errore altrove? (un’indicazione in che direzione cercare sarebbe graditissima)

    #50954
    Sergio Bertana
    Amministratore del forum

    Si è il fastidioso BUG sulla dimensione delle stringhe, BUG che è risolto sulla versione cha stiamo testando in azienda già da un mesetto e che rilasceremo a breve.

    Ora l’unico Workaround è quello di definire la lunghezza stringa con un numero divisibile per 4, (Ricordo che alla lunghezza definita viene sommato 1 per il codice tappo). In pratica definendo la variabile

    MyString : STRING[ 31 ]; (* A string variable *)

    Lo spazio allocato è di 32 bytes. Infatti SIZEOF(MyString) ritorna 32.

Stai visualizzando 3 post - dal 1 a 3 (di 3 totali)
  • Devi essere connesso per rispondere a questo topic.