Trucchi e soluzioni non sempre logiche..per non impazzire!

  • StefA
  • Autore della discussione
  • Moderatore
  • Moderatore
Di più
11 Anni 3 Mesi fa - 11 Anni 2 Mesi fa #1 da StefA
A molti di noi sarà già capitato, ad altri capiterà di perdere ore e giorni su funzionamenti all'apparenza inspiegabili, sia software che hardware... spesso la soluzione è qualcosa di semplicissimo a cui non pensiamo... a volte invece è qualcosa che non sappiamo, non ci sembra logico e ci arriviamo quasi per caso.

Questo topic nasce per raccogliere tutti questi casi e semplificarci la vita grazie al tempo perso di chi ci ha sbattuto la testa.. chiunque voglia "partecipare" risponda con la propria esperienza, provvederò a mettere tutto sul questo post..

Grazie a tutti.

Ste


  • Se utilizzate la Freedom II con l'RTCC PCF8563, sappiate che così com'è perde qualche secondo all'ora. Si risolve facilmente mettendo un condensatore da 5-25pF sul quarzo del PCF8563. [Thanks to Me per la domanda & fer_ver per la soluzione] topic

  • In Mplab Ide con C18, errori apparentemente inesistenti potrebbero essere risolti lasciando una riga vuota alla fine del main, oppure commentando la prima riga del main. [Thanks to Mauro Laurenti & Pinna] topic

  • Quando si inizializzano o si azzerano dei vettori con dei cicli, prestare particolare attenzione agli estremi, fino a che punto "conta", se ad esempio ho un vettore di 100 char e per errore si mette <120 al posto di <100, l'inizializzazione cambia anche 20 valori in più rispetto a quello che ci aspettiamo, e suddetti valori possono essere qualsiasi cosa nel nostro programma, di conseguenza possono esserci comportamenti anomali o errori inspiegabili. [Thanks to fer_ver] post #2

  • Utilizzando la funzione "void putUSBUSART(char *data, BYTE length)" prestare particolare attenzione a cosa viene passato, deve essere un indirizzo di una variabile o un puntatore ad un array.
    Es:
    Code:
    char data =0x31;

    se scrivo nel seguente modo è sbagliato...
    Code:
    putUSBUSART(data,1);

    il modo corretto è il seguente...
    Code:
    putUSBUSART(&data,1);

    se invece passo un array posso scrivere direttamente data perché è il puntatore al primo dato...come segue..
    Code:
    char data[] = {0x18,0x42,0x55,0x54,0x54,0x4F,0x4E,0x3A,0x20,0x32,0x00}; putUSBUSART(data,11);

    [Thanks to shinshi] post #3

  • Un utente che utilizzava come antivirus Comodo, ha riscontrato problemi. Non venivano compilati i progetti con MPLABX (1.90) e C18 (3.44) perché l'antivirus bloccava il tutto; avendo i messaggi di segnalazione dell'antivirus disabilitati, non è stato semplice capire il problema. Lo stesso problema potrebbe essere causato da altri antivirus e con altri software e sistemi operativi. [Thanks to Hector] topic


..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Ultima Modifica 11 Anni 2 Mesi fa da StefA. Motivo: Aggiornamento

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • fer_ver
  • Premium Utente
  • Premium Utente
Di più
11 Anni 3 Mesi fa #2 da fer_ver
La settimana scorsa ho passato alcune sere a capire perché un array che dichiaravo all'inizio
del Main in questo modo :
unsigned char keys[]={1,4,7,'*',2,5,8,0,3,6,9,'#','A','B','C','D'};
ad un certo, inspiegabilmente, punto cambiava valore.

Ho poi capito che era dovuto al fatto che avevo dichiarato un altro array in questo modo
unsigned char MemTemp[100];
ed ad un certo punto nel programma andavo ad azzerarlo con un ciclo for di questo tipo

for(x=0; x<120;x++){
MemTemp[x]= 0;
}
.... x arrivava a 119(per mio errore), superava la lunghezza dell'array MemTemp e continuava a scrivere sulle variabili successive in memoria che nel mio caso era l'array Keys[].

Spero di essermi spigato bene.
Ciao
Renato

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • shinshi
  • Elit Utente
  • Elit Utente
Di più
11 Anni 3 Mesi fa #3 da shinshi
Ottima iniziativa Ste.
Settimana scorsa sono impazzito anche io nel tentativo di usare la funzione
Code:
void putUSBUSART(char *data, BYTE length)
che fa parte del framework USB Microchip e descritta nella guida di Mauro Laurenti "Leggere e Scrivere dati
via USB". In breve questa funzione permette la scrittura di dati dalla RAM al modulo USB.
*data: Puntatore alla struttura dati residente in memoria RAM
length: lunghezza della struttura dati (numero di byte).
Ciò che non capivo inizialmente era che passando alla funzione una variabile char
Code:
char data =0x31; putUSBUSART(data,1);
In realtà passavo alla funzione il dato che in RAM è contenuto nella posizione di memoria 0x31, fino a che non ho corretto in
Code:
char data =0x31; putUSBUSART(&data,1);
In quasto modo passo alla funzione l'indirizzo RAM che contiene la variabile char data.
Se si utilizza invece un array va bene
Code:
char data[] = {0x18,0x42,0x55,0x54,0x54,0x4F,0x4E,0x3A,0x20,0x32,0x00}; putUSBUSART(data,11);
Perchè in questo caso data contiene il puntatore all'array.
Saluti
Luca

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
11 Anni 2 Mesi fa #4 da Mauro Laurenti
Ottima idea.
...ne avevi parlato tempo fa e alla fine l'hai fatta! :)
Fammi fare mente locale. :)

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • StefA
  • Autore della discussione
  • Moderatore
  • Moderatore
Di più
11 Anni 2 Mesi fa #5 da StefA
si..l'idea era partita dal fare una sorta di pillole per MplabX.. poi ho pensato di ampliare un po' la cosa.. :P

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi