- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
"A chaque jour suffit sa peine " ..
encore un exemple d'effet de bords inexpliqué ..
Apres un chargement du programme,
je verifie que l'init complete des donnees de mon programme a été faites au moins une fois..
je me sert d'une valeur Eeeprom adresse 0 comme flag pour tester si l'init des parametres application ont été faits
au moins 1 fois !
si contient 99 => init déja faite
si contient 0 ou 0xFF => pas d'init faite
avec le test suivant, tout le reste de mon programme est OK
Code : Tout sélectionner
c1=EEPROM_Read(0); Delay_ms(25);
if (c1==0)
{
Toute_Premiere_Init();
}
else
{
CPrint(" Restitue Parametrage\r\n");
Restitue_Parametres_en_Eeprom(); // dont le nb de sabotage !
}
on voit que la 1ere init a été réalisée..OK
Presentation :
Directory :C:\_MikroC\_MesProjets_MikroC\CLAVIER_18F27K42_2021
MikroC pro 7.60
Projet :Clavier_18F27K42_DIGIT_V4-V6_2022-01xx.mcppi
Config bit : P18F27K42_Fosc_interne_with_PLL_64MHz_Vectored_IT.cfgsch
Eeprom: En Flash @ 310 0000 à 310 03FFF.
Source : Clavier_DIGIT4000_18F27K42_V4_V6_2022-0111.c
Clavier Mecanique Matrice 4x3 touches
18F27K42 UART1 115200
NCO output sur RC0 -> Buzzer Piezzo
Usage Interrupt Vectors
Relais Monostables 1,2,3,4 sur 1 sec
Config Application BlueElectronics :
DigitCode_4000_2021-1206.kwl
*V Version 2022-0111*
Etat Pin RB7=0 et Pin RB6= 0
Pas d'extension Entree/Sortie avec RA7
*W *;*U *;*BR0G0B0*;*E *;*O *;*Y *;*LR0G0B0*;*RR0G0B0*;*PR0G0B0*;
Etat Reset Distant=1
Init Generateur de Frequence NCO ,sortie RC0 => Buzzer piezo
Init Timer4_for_Alarme
1ere Init car flag adresse 0x0000 EEprom different de 99
Premiere Init.
Saisir code Progr.0000 (4 digits)
Attente 4 frappes clavier
.Idx=*T 1*;*G0*;
alors qu'avec ce test :
Code : Tout sélectionner
c1=EEPROM_Read(0); Delay_ms(25);
if (c1==99)
{
CPrint(" Restitue Parametrage\r\n");
Restitue_Parametres_en_Eeprom(); // dont le nb de sabotage !
}
else
{
Toute_Premiere_Init();
}
ça bigorne mon texte de presentation ...
Code : Tout sélectionner
Presentation :
[highlight=yellow]áoÑ+ï×ÐQÎ%ánÑQÏ!ânæjÐ_oÐÐQâÓo¤ï&ðð:8
&8ð
n[/highlight]
*V Version 2022-0111*
Etat Pin RB7=0 et Pin RB6= 0
Pas d'extension Entree/Sortie avec RA7
*W *;*U *;*BR0G0B0*;*E *;*O *;*Y *;*LR0G0B0*;*RR0G0B0*;*PR0G0B0*;
Etat Reset Distant=1
Init Generateur de Frequence NCO ,sortie RC0 => Buzzer piezo
Init Timer4_for_Alarme
1ere Init car flag adresse 0x0000 EEprom different de 99
Premiere Init.
Saisir code Progr.0000 (4 digits)
Attente 4 frappes clavier
.Idx=*T 1*;*G0*;
.Idx=*T 2*;*G0*;
si je reduis mon code , juste apres ce test ( mise en commentaire du reste de code ..jusqu'à la fin du main programme)
le déroulement du programme est OK
si je valide le parametrage et fais un reset
je me retouve bien avec 99 dans l'eeprom
et m'affiche les parametres précédement sauvegardés
et ce meme avec le test bigornant ma présentation
Code : Tout sélectionner
Presentation :
[b]áoÑ+ï×ÐQÎ%ánÑQÏ!ânæjÐ_oÐÐQâÓo¤ï&ðð:8
&8ð
n[/b]
*V Version 2022-0111*
Etat Pin RB7=0 et Pin RB6= 0
Pas d'extension Entree/Sortie avec RA7
*W *;*U *;*BR0G0B0*;*E *;*O *;*Y *;*LR0G0B0*;*RR0G0B0*;*PR0G0B0*;
Etat Reset Distant=1
Init Generateur de Frequence NCO ,sortie RC0 => Buzzer piezo
Init Timer4_for_Alarme
[highlight=yellow] Restitue Parametrage[/highlight]
Read flag @0x00 = 99
MSabotage <-- @0x10 = 0
Restitue datas eeprom : Cde Progr. et 4 Cdes Relais
Cde #0 @0020 2870 [highlight=yellow]<-- code precedement entré ..OK[/highlight]
Cde #1 @0024
Cde #2 @0028
Décidément .. impossible de savoir si c'est un probleme de compilateur ou de neurones ?
Beaucoup de temps perdu ... je vais donc rester sur le test c1==0
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
allez j'en rajoute une couche ..
voir
https://forum.mikroe.com/viewtopic.php?f=88&t=78901
resultat de compilation avec d'une ligne d'erreur de 9606 characteres
Mon ecran de 27" n'est pas assez large !!!!
bien sur pas moyen de trouver cette erreur !
Ta plus cas l'écrire en ASM, là je pourrais t'aider, à titre d'information pour écrire dans l'eeprom et lire dans celle-ci avec un
Pic 18F27K42 voici la routine en version ASM
Code : Tout sélectionner
;
; la variable : "donner" c'est la donner à écrire sur 8 bits(1 octet),
;
; les variables : "adresse_high" et "adresse_low" 16 bits(2 octets), c'est l'emplacement ou ta "donner" se trouve dans l'eeprom
;
;
;****************************** "pour écrit dans l'eeprom" *************************************
eeprom_ecriture
BANKSEL INTCON0 ; bank 63
movf INTCON0,W ; sauvegarde du registre INTCON0 vers la variable temps
movwf temps ;
bcf INTCON0,GIE ; couper les interruptions
btfsc INTCON0,GIE ; contrôl si les interruptions sont bien coupés
bra $-D'4' ; remonte à la ligne 2 jusqu'a coupures des interruptions
BANKSEL NVMCON1 ; bank 57
clrf NVMCON1
movf adresse_high,W ; adresse du poids fort
movwf NVMADRH
movf adresse_low,W ; adresse du poids faible
movwf NVMADRL ;
movf donner,W ; donnée à écrit
movwf NVMDAT ;
bsf NVMCON1,WREN ; activer les écritures
movlw H'55' ; séquence spécifique (c'est comme ça, il faut le savoir)
movwf NVMCON2 ; séquence spécifique
movlw H'AA' ; séquence spécifique
movwf NVMCON2 ; séquence spécifique
bsf NVMCON1,WR ; lance une opération d'écriture
btfsc NVMCON1,WR ; on attend que l'operation d'ecriture soit finie (de l'ordre de la ms
bra $-D'2' ; remonte à la ligne 2 jusqu'a fin d'écriture
bcf NVMCON1,WREN ; interdiction de l'écriture
BANKSEL INTCON0 ; bank 63
movf temps,W ; restaurer la sauvegarde de la variable temps vers le registre INTCON0
movwf INTCON0 ;
return
;******************************** "pour lire dans l'eeprom" ************************************
eeprom_lecture
BANKSEL NVMCON1 ; bank 57
clrf NVMCON1
movf adresse_high,W ; adresse du poids fort
movwf NVMADRH
movf adresse_low,W ; adresse du poids faible
movwf NVMADRL ;
bsf NVMCON1,RD ; lecture de l'EEPROM
movf NVMDAT,W ; la valeur lue dans l'éeprom est placée dans W
movwf donner ; W et placé dans la variable donner
BANKSEL INTCON0 ; bank 63
return
Content pour toi Jérémy, pour le remplacement de tes Pics, donc ça venait bien des pics défectueux.
A+
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
dans
C:\_MikroC\mikroC PRO for PIC\ findinfiles.ini
94 fichier listé ..mais pas de directory _CLAVIER_18F27K42_2022 ????
je vois bien par contre le directory _CLAVIER_18F27K42_2021
rajouté CLAVIER_18F27K42_2022 dans la liste
enlevé le underscore du nom de dossier
=> nettoyé le directory CLAVIER_18F27K42_2022 de toute trace d' anciens fichiers 2021
rechargement projet
compilation -> plus de grande ligne d'erreur !
mais seulement 2 lignes erreurs (de moins de 80 chars)
1 oubli d'un guillement fermants,
et : en fin de ligne au lieu de ;
corrigé--> compilation OK
0 103 Finished successfully: 13 janv. 2022, 18:44:58 Clavier_18F27K42_DIGIT_V4-V6_2022-01xx.mcppi
je regarde à nouveau le contenu de findinfiles.ini
[frmFindInFiles\ComboBoxPath_Items]
Count=94
Item0=C:\_MikroC\_MesProjets_MikroC\_CLAVIER_18F27K42_2022\
Item1=C:\_MikroC\_MesProjets_MikroC\_18F26K22_Test_OLED_SSD1306_I2C1_0.96_jaune_et_bleu\
Item2=C:\_MikroC\_MesProjets_MikroC\_18F26K42_Oled_I2C_jaune_Bleu_0-96p_2021-02\
..???? encore le underscore du dossier ???? en 1ere position
Item0=C:\_MikroC\_MesProjets_MikroC\_CLAVIER_18F27K42_2022\
je quitte mikroC , relance et recharge le projet
j'ouvre à nouveau le fichier findinfiles.ini
et maintenant j'ai maintenant le BON directory en position 1
mais AUSSI l'ancien que j'avais effacé en position 2 !!!
[frmFindInFiles\ComboBoxPath_Items]
Count=95
Item0=C:\_MikroC\_MesProjets_MikroC\CLAVIER_18F27K42_2022\ <-- OK
Item1=C:\_MikroC\_MesProjets_MikroC\_CLAVIER_18F27K42_2022\ <-- N'EST POURTANT PLUS EXISTANT !
Item2=C:\_MikroC\_MesProjets_MikroC\_18F26K22_Test_OLED_SSD1306_I2C1_0.96_jaune_et_bleu\
No More problemo.
conclusion :
MikroC ne sait pas gerer les fichiers correctement ..
en retard d'une guerre ..
ne s'appuie pas sur la gestion de fichier Windows ou presente un bon bug !
Nota:
MikroC ne digere pas bien le _ underscore dans la creation directory pour projet
bien que ce caratere n'est pourtant pas présent dans la liste des caracteres à exclure !
Rappel:
autre remarque sur l'Eeprom avec mikroC
un bug signalé il ya 2 ans !!
Rappel PB avec EEPROM et MikroC
29/11/2019
ex:
Horloge_V1_PIC18F27K42_Anneau_entier_60leds_4_Matrices_Max7219_1912_eeprom.ihex!
:020000040121D8 <--- Probleme ICI à remplacer par :020000040031C9
:100000003165726520486F726C6F676520416E6E56
.......
* par contre pour recharger le fichier EEprom dans le Tools MikroC
il faut REMETTRE LA BAD ADRESSE !
mettre à jour le fichier sous mikroC avec Tools Eeprom
Ne pas compiler
et .. rechanger l'adresse pour que le programme puisse etre complié correctement
et chargeable avec MPLAB IPE + Pickit4
Mes prochaines appli 18F27K42 se feront avec MPLABX XC8 ....
car MikroC semble bien stopé au niveau des mises à jour et correctifs..
reste utile que pour les anciens MCU ...
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
tout ces problemes me confortent pour le passage à MPLAB XC8 pour les PICs réscents ...
qui permet entre autre, le 18F27Q10 ..j'en ai 4 sous le coude (MikroC ne les gere pas!)
et une carte Curiosity PIC 18F47Q10 .
...à noter : qui est pas trop chere et transfert du *. Hex via un bootloader USB inclus.
+ un debugger incorporé (non encore testé)
.. à suivre ..
je garderais MikroC que pour les anciens Pics dont le fameux 18F26K22...etc..
MikroC= obsolescence programmée... au bout de 8 ans
(licence MikroC pro achetée en 2014 .. )
- Gérard
Expert- Messages : 1661
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Jérémy a écrit :Franchement Bravo pour cette étude remarquable et cette déduction !
Vivement que j’atteigne ce niveau !!!
Je m'associe à Jérémy pour féliciter Paul.
Par contre, moi, je n'aurai jamais ce niveau.
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Une sorte de SPAM ou ver dormant..
Autant s'adresser à Scully et Mulder plutot qu'aux concepteur de MikroC ..
MikroC en voie d'extinction !
Encore un constaté avec l'utilisation des fonctions string
et le transfert de datas en ROM ( dans le code ) et RAM de travail
pour eviter de complexe et fastidieuse saisie de données au clavier numerique
dans une période de déverminage de mon application Clavier
j'utilise une config forcée de certains parametres de configuration
Code : Tout sélectionner
strncpy(Mcd[0],"1287",4);
strncpy(Mcd[1],"1134",4);
Code_Modifie[0]=1; // code progr
Code_Modifie[1]=1; // code relais 1
Config_Mode_Cde_Relais[0]=0; // pas de relais 0 ici
Config_Mode_Cde_Relais[1]=1;
Ma presentaion de l'application en tout debut de programme est affectée ...
alors qu'elle ne l'est pas, si j'enleve mon En_TEST ( donc si en saisie manuelle...)
par une simple mise en commentaire :
//#define EN_TESTC'est donc bien cette partie de code qui pose probleme.
Nota : En aucun cas on peut permettre un programme qui verole des resultats !
Presentation : BIGORNEE !
¾Q¿_,à__¾_èj
"_P__óP &ôP
"èj
"_Àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ce probleme m'interpellait, car déja rencontré (jadis !)
apres d' autres tests
Code : Tout sélectionner
strcpy(Mcd[0],"1287"); // BAD presentation
strcpy(Mcd[1],"1134");
j'obtiens une bonne présentation avec :
Code : Tout sélectionner
strConstRamCpy(CRam1,"1287"); //OK
strcpy(Mcd[0],CRam1);
strConstRamCpy(CRam1,"1134");
strcpy(Mcd[1],CRam1);
Presentation programme OK
et finalement
Code : Tout sélectionner
strConstRamCpy(Mcd[0],"1287"); //OK
strConstRamCpy(Mcd[1],"1134"); //OK
Presentation OK
Presentation :
Directory :C:\_MikroC\_MesProjets_MikroC\CLAVIER_18F27K42_2021
MikroC pro 7.60
Projet :Clavier_18F27K42_DIGIT_V4-V6_2022-01xx.mcppi
Config bit : P18F27K42_Fosc_interne_with_PLL_64MHz_Vectored_IT.cfgsch
Eeprom: En Flash @ 310 0000 à 310 03FFF.
Clavier_18F27K42_DIGIT_V4-V6_2022-0122.ihex
Source : Clavier_DIGIT4000_18F27K42_V4_V6_2022-0127.c
Clavier Mecanique Matrice 4x3 touches
18F27K42 UART1 115200
NCO output sur RC0 -> Buzzer Piezzo
Usage Interrupt Vectors
Relais Monostables 1,2,3,4 sur 1 sec
Config Application BlueElectronics :
DigitCode_4000_2021-1206.kwl
La conclusion :
Ne pas utiliser d'affectation directe de données en dur ( dans le code) , mais plutot en RAM.
ou via strConstRamCpy qui va bien !
La gestion des pointeurs RAM et CODE etant différente...
et si en plus on parle de franchissement de bank ... et de la confiance avec le compilateur et ses optimisations ?
si je vous fais part de ce genre de probleme , c'est qu'une telle anomalie peut tres bien rester cachée
tant que votre application aura une petite taille ...
certains exemples de tres courts programme MikroC sont à proscrire !
dont les exemples fournis avec LCD !
pour memoire
Code : Tout sélectionner
// --- Copie le texte depuis FLASH ROM vers RAM
void strConstRamCpy(unsigned char *dest, const code char *source)
{
while (*source)*dest++ = *source++ ;
*dest = 0 ; // terminateur
}
Paul, j'ai pas lu en détail, mais on est d'accord que strncpy ne copie pas forcément le 0 de fin de chaîne, contrairement à strcpy. Si tu veux copier la chaîne complète avec le 0 de fin de chaîne, il faut faire strncpy(Mcd[0], "1287", 5)
Remarque à prendre avec réserve, quand je lis ça :
No null-character is implicitly appended at the end of destination if source is longer than num. Thus, in this case, destination shall not be considered a null terminated C string (reading it as such would overflow).
https://www.cplusplus.com/reference/cstring/strncpy/
C'est confirmé là
Si la chaîne source a une taille égale à celle spécifiée en paramètre, alors la chaîne source sera intégralement copiée (y compris le code ASCII 0 terminal)
https://koor.fr/C/cstring/strncpy.wp
J'ai appris quelque chose, super :)
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 112 invités