Pic 18F - du code asm dans programme C

  • Auteur de la discussion Lnx2051
  • Date de début
L

Lnx2051

Apprenti
bonjour

j'essaye d' insérer du code asm dans un programme C18 pour pic 18F, j'ai quelques soucis ...



a compiler ça râle dur :
370:Error: syntax error ( ligne Delay )

m'en sort pas bien, est ce que kk1 a déjà fait ?
apparemment il faut déclarer l'assembleur dans un fichier tiers ... on ne peut pas l’insérer dans le programme C directement comme ça ?? :cry:

Cdlt
Ln
 
Z

Zaphreux

Nouveau
Bonsoir

S'il faut juste attendre un certain nombre de cycles, il suffit que tu utilises les fonctions styles Delay10KTCYx qui sont définis dans le fichier delays.h du C18

Cordialement
 
S

speedjf37

Compagnon
Bonsoir,

exemple:
un pti ajout asm dans du "C" pour 18f4620
// workaround bug interrupt

_asm
call bidon,0x01
bidon:
pop
// nop
_endasm

L'étiquette bidon est suivie de ':'
ne pas oublier la fin "_endasm"
 
L

Lnx2051

Apprenti
hello speedjf37 :)

j'ai relus le 3.2.5.1 du compilo C18, pas vu l'histoire des ":" mais ça compile now ^^
j' échange un soucis contre un autre du coup, le Goto ne semble pas lui plaire, pourtant c une fonction assembleur ..


@Zaphreux: tu sais, je me méfie des biblio du compilateur C18, j'ai déjà perdu un temps énorme avec des bibliothèque pourrave, notamment le OpenSpi ... prefere tout paramétrer et faire ma propre bibli de fonction ^^


Cdlt
Ln
 
J

jcma

Compagnon
Bonsoir,

Non, les goto c'est du C (On les place d'ailleurs hors des accolades), pour l'assembleur, c'est jmp.

EDIT:
Apparement ton compilateur accepte les goto à la place du jmp, ta syntaxe devrais marcher.

@+
Jean-Charles
 
L

Lnx2051

Apprenti
hello,

oui, effectivement il le digere le goto :smt002
c'est le $+2 qu'il ne veut pas alors que c'est dans la doc de MPASM. on s'y perd.
il ne veux pas non plus du return

c'est comme si le compilateur se foutait du _asm et mélangeait les 2 languages allegrement ...
Je me demande si on peut insérer du vrai code asm ou si on peut seulement y mettre un ptit bout pour faire bipbip ... en tous cas j'y arrive pas :oops:

pourtant le ptit bout de programme de speedjf37 compile bien :oops:


cdlt
Ln
 
J

jcma

Compagnon
Bonjour,

Je n'avais réagit qu'il s'agissait d'un PIC18.
Pour un PIC18, la longueur des instructions est differente de celle d'un PIC16. Tes goto $+2 sont à changer en $+4. Le calcul du delai est aussi a reprendre, certaines instruction ne mettent pas le même temps a s'executer que sur le PIC16 (Nombre de cycles d'execution differents).

@+
Jean-Charles
 
L

Lnx2051

Apprenti
il a l'air mal embouché le Compilo :



Tx.c:373:Error: syntax error -> Goto $+4
malheureusement ...
sans compter le return qu'il rejette aussi et les declaration de variables qu'il vômit egalement ... :cry:



on peut aussi inclure de l 'asm contenu dans un autre fichier, ça doit mieux fonctionner puisque les routines delay en C18 fonctionnent comme ça .. .... kk1 a deja fait ?
 
P

pierrepmx

Compagnon
Salut,

je ne peux rien dire de ce compilo particulier, mais dans le principe, la syntaxe du code d'assemblage "inline", qui est traité par le préprocesseur et le compilateur "C", peut très bien être simplifié et légèrement différente de celle d'un fichier purement assembleur, qui lui est traité par un autre programme, le macro-assembleur.
A voir dans la doc du C18...
 
L

Lnx2051

Apprenti
hello Pierre,
La doc C18 dit :

2.8.2 Inline Assembly
MPLAB C18 provides an internal assembler using a syntax similar to the MPASM
assembler.



  • apparemment il est différent du code assembleur "normal" ...

It is generally recommended to limit the use of inline assembly to a minimum. Any functions containing inline assembly will not be optimized by the compiler. To write large
fragments of assembly code, use the MPASM assembler and link the modules to the C modules using the MPLINK linker.


  • lol, ça veut tout dire ... je vais regarder comment on fait pour utiliser un fichier .asm et le linker

cdlt
Ln
 
S

speedjf37

Compagnon
Bonjour,

Le bout de code mis en asm dans le 'C' est correctement assemblé dans un fichier asm .
Les commentaires dans le fichier 'C' ne peuvent être délimités par ';' comme en assembleur

Effectivement l'assemblage en ligne est limité .
Il est utilisé pour des traitements non réalisables en 'C' pour raison de rapidité ou correction de bug(ajustement de registres).

Les goto $ sont souvent générés par des compilateurs à partir de boucle while ou for.
En assembleur il est préférable de mettre des étiquettes pour rendre le code plus lisible
 
Haut