Bienvenue aux nouveaux arrivants sur FantasPic !
- 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 ---
- 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 : mazertoc
pic-as
pic-as
pic-as
pic-as
Mon but est de faire un programme sans complications pour commencer. A noter que je comprends à moitié la doc informatique en général, et j'avance en tatonnant.
D'abord, globalement quelles sont les erreurs ?
Ensuite la 1ere instruction (adresse 0 est le movlw xxx, le goto passe à la trappe.
A bientôt
Code : Tout sélectionner
PSECT resetVec,abs,class=CODE,delta=2
ORG 0
resetVec:
goto test_0
psect CODE,delta=2
test_0:
movlw 0001000D'abord, globalement quelles sont les erreurs ?
Ensuite la 1ere instruction (adresse 0 est le movlw xxx, le goto passe à la trappe.
A bientôt
pic-as
Ok pour partir de zéro, c'est la meilleure méthode, mais avec le minimum requis. Là il manque au moins la directive end.
Je remarque que le simulateur ne s'arrête pas à tous les coups sur le goto. Par contre il s'arrête bien sur le movlw. En mettant plusieurs nop juste avant ce goto, là on peut s'arrêter dessus, et on voit qu'on passe bien par le goto.
Par défaut pic-as est en décimal pour les valeurs numériques, donc le 0001000 essaie de rentrer dans W, pas facile. L'assembleur aurait dû rouspéter, mais bon c'est pic-as. Il a pris le premier octet de 1000 (0x3E8) et c'est 0xE8 car on est en little endian pour le stockage, donc il met 0xE8 dans W.
Il affiche tout de même cela, et c'est à analyser :
::: warning: (526) psect "CODE" not specified in -P option (first appears in "build/default/production/16F1719_Test_0.o")
::: warning: (528) no start record; entry point defaults to zero
::: warning: (1601) "C:\Users\me\AppData\Local\Temp\xcAsam8.\driver_tmp_3.o" argument : data in object-file (C:\Users\me\AppData\Local\Temp\xcAsam8.\driver_tmp_3.o) from psect "CODE" (0xE8) overwrites data from "resetVec" (0x00) at address 0x0
::: warning: (1601) "C:\Users\me\AppData\Local\Temp\xcAsam8.\driver_tmp_3.o" argument : data in object-file (C:\Users\me\AppData\Local\Temp\xcAsam8.\driver_tmp_3.o) from psect "CODE" (0x30) overwrites data from "resetVec" (0x28) at address 0x1
Je remarque que le simulateur ne s'arrête pas à tous les coups sur le goto. Par contre il s'arrête bien sur le movlw. En mettant plusieurs nop juste avant ce goto, là on peut s'arrêter dessus, et on voit qu'on passe bien par le goto.
Par défaut pic-as est en décimal pour les valeurs numériques, donc le 0001000 essaie de rentrer dans W, pas facile. L'assembleur aurait dû rouspéter, mais bon c'est pic-as. Il a pris le premier octet de 1000 (0x3E8) et c'est 0xE8 car on est en little endian pour le stockage, donc il met 0xE8 dans W.
Il affiche tout de même cela, et c'est à analyser :
::: warning: (526) psect "CODE" not specified in -P option (first appears in "build/default/production/16F1719_Test_0.o")
::: warning: (528) no start record; entry point defaults to zero
::: warning: (1601) "C:\Users\me\AppData\Local\Temp\xcAsam8.\driver_tmp_3.o" argument : data in object-file (C:\Users\me\AppData\Local\Temp\xcAsam8.\driver_tmp_3.o) from psect "CODE" (0xE8) overwrites data from "resetVec" (0x00) at address 0x0
::: warning: (1601) "C:\Users\me\AppData\Local\Temp\xcAsam8.\driver_tmp_3.o" argument : data in object-file (C:\Users\me\AppData\Local\Temp\xcAsam8.\driver_tmp_3.o) from psect "CODE" (0x30) overwrites data from "resetVec" (0x28) at address 0x1
pic-as
pic-as
Tu mélanges des sections déclarées abs et non abs, il fait n'importe quoi, et le dit en warning. Il met le movlw à l'adresse 0 et le goto à l'adresse 1 !
Dans l'exemple que j'avais mis avec abs, il n'y avait qu'un seul psect avec plusieurs org.
viewtopic.php?p=25801#p25801
En plus du view program memory, tu peux afficher le "disassembly listing" dans Debugging/Output.
Dans l'exemple que j'avais mis avec abs, il n'y avait qu'un seul psect avec plusieurs org.
viewtopic.php?p=25801#p25801
En plus du view program memory, tu peux afficher le "disassembly listing" dans Debugging/Output.
pic-as
Il manquait "class=CODE" dans le second psect. Je ne vois pas dans la doc quelle type de section il prend par défaut, en tout cas cela se termine mal si on n'en met pas. Il a mis le second psect en 0, et le premier psect de type abs qui lui veut s'implanter aussi en 0 disparaît.
Avec "class=CODE" il met le goto à l'adresse 0 de reset (la ligne org 0 est superflue) ensuite il met le reste en 0x7ff. Et il s'arrête bien sur le goto.
Conclusion, si on ne met pas abs, il met la section à une adresse indéterminée, 0x7FF en l'occurence, d'où le symptome de départ, il faut le spécifier pour le reset dans les options linker par "-Preset_vect=0h" comme indiqué ici viewtopic.php?f=11&t=1129.
En mettant abs cela devient plus simple car il démarre en 0 et la directive org fonctionne comme avant.
Il y a aussi le paramètre space qui indique où se trouve physiquement la section, programme, ram, eeprom, etc
Mettre systématiquement dans les sections de code -> "class=CODE,space=SPACE_CODE,delta=2" (nécessite l'include xc.inc)
Rappel les psect prédéfinis sont à la fin du fichier pic16F1719.inc
Et pour terminer, j'ai donné à ChatGPT le programme de départ brut sans donner d'autres détails, il arrive aux mêmes constatations, très bien expliquées, après 3 secondes de réflexion
A part qu'il pense que par défaut une section est du code, et ce n'a pas l'air d'être le cas, il conseille tout de même de spécifier la classe.
Avec "class=CODE" il met le goto à l'adresse 0 de reset (la ligne org 0 est superflue) ensuite il met le reste en 0x7ff. Et il s'arrête bien sur le goto.
Code : Tout sélectionner
// 16F1719
PSECT resetVec,abs,class=CODE,delta=2
resetVec:
goto test_0
PSECT code,class=CODE,delta=2
test_0:
movlw 0001000
end
Code : Tout sélectionner
Disassembly Listing for 16F1719_Test
Generated From:
C:/Dev/Elec/pic/MPLABX_ASM/16F/16F1719_Test.X/dist/default/debug/16F1719_Test.X.debug.elf
20 janv. 2026 05:43:56
--- C:/Dev/Elec/pic/MPLABX_ASM/16F/16F1719_Test.X/16F1719_Test_0.s ------------------------------------
1: // 16F1719
2:
3: PSECT resetVec,abs,class=CODE,delta=2
4: resetVec:
0000 2FFF GOTO 0x7FF 5: goto test_0
6:
7: PSECT code,class=CODE,delta=2
8: test_0:
07FF 30E8 MOVLW 0xE8 9: movlw 0001000
10:
11: end
Conclusion, si on ne met pas abs, il met la section à une adresse indéterminée, 0x7FF en l'occurence, d'où le symptome de départ, il faut le spécifier pour le reset dans les options linker par "-Preset_vect=0h" comme indiqué ici viewtopic.php?f=11&t=1129.
En mettant abs cela devient plus simple car il démarre en 0 et la directive org fonctionne comme avant.
Il y a aussi le paramètre space qui indique où se trouve physiquement la section, programme, ram, eeprom, etc
Mettre systématiquement dans les sections de code -> "class=CODE,space=SPACE_CODE,delta=2" (nécessite l'include xc.inc)
Rappel les psect prédéfinis sont à la fin du fichier pic16F1719.inc
Et pour terminer, j'ai donné à ChatGPT le programme de départ brut sans donner d'autres détails, il arrive aux mêmes constatations, très bien expliquées, après 3 secondes de réflexion
A part qu'il pense que par défaut une section est du code, et ce n'a pas l'air d'être le cas, il conseille tout de même de spécifier la classe.
pic-as
Merci, je regarde tout en détail plus tard.
Une réponse vite fait au #35.
C'est juste un extrait, les config, END, etc sont bien présents.
Pour le movlw en décimal c'était trop gros pour que je le vois. Erreur de débutant, et pourtant . . .
La prochaine fois je placerai le code en entier.
En tout cas ce forum devrait être déclaré d'utilité publique.
Une réponse vite fait au #35.
C'est juste un extrait, les config, END, etc sont bien présents.
Pour le movlw en décimal c'était trop gros pour que je le vois. Erreur de débutant, et pourtant . . .
La prochaine fois je placerai le code en entier.
En tout cas ce forum devrait être déclaré d'utilité publique.
pic-as
Là ça va mieux :
et les instructions sont aux bonnes adresses.
Mais il me dit quand même (avec abs)
Je m'absente quelques jours, ce sera fait plus tard.
Bonne soirée
Code : Tout sélectionner
57:
58: PSECT adr_rst,abs,class=code,space=0,delta=2
59: ORG 0h
60:
0000 2900 GOTO 0x100 61: goto test_0
62:
. . .
70: PSECT init_ch,abs,class=code,space=0,delta=2
71: ORG 0100h
72: ;test_rst:
73:
74: // -début- uniquement pour test ****************************************
75: // premier passage : pmadrx ne contient "rien" et
76: // STATUS-PCON = 00010000 - 000000
77: // deuxième pmadrx = valeurs ci-dessus et
78: // les valeurs de STATUS-PCON incrémentées de 1 à chaque cycle
79: test_0:
0100 3008 MOVLW 0x8et les instructions sont aux bonnes adresses.
Mais il me dit quand même (avec abs)
Code : Tout sélectionner
::: warning: (526) psect "udata_acs" not specified in -P option (first appears in "build/default/debug/_ext/1830702904/chargeur.o") Je m'absente quelques jours, ce sera fait plus tard.
Bonne soirée
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités


