Comment utiliser l’assemblage en ligne avec MPLAB C18?

J’utilise MPLAB C18 qui fournit un assembleur interne pour activer les fonctions d’assemblage d’appel à partir d’un projet C. Je suis les règles sur la façon d’utiliser Inline Assembly et je soupçonne que quelque chose à propos de ” La mnémonique de texte intégral doit être utilisée pour les lectures / écritures de table ” est à l’origine d’un message d’erreur de syntaxe lors de la construction de mon projet.

The internal assembler differs from the MPASM assembler as follows: No directive support Comments must be C or C++ notation Full text mnemonics must be used for table reads/writes. ie, TBLRD TBLRDPOSTDEC TBLRDPOSTINC TBLRDPREINC TBLWT TBLWTPOSTDEC TBLWTPOSTINC TBLWTPREINC No defaults for instruction operands - all operands must be fully specified Default radix is decimal Literals are specified using C radix notation, not MPASM assembler notation. For example, a hex number should be specified as 0x1234, not H'1234'. Label must include colon Indexed addressing syntax (ie, []) is not supported - must specify literal and access bit (eg, specify as CLRF 2,0, not CLRF [2]) 

C’est le code que j’utilise, que j’ai obtenu de la fiche technique PIC18F87J11 sur la lecture de la mémoire flash.

 MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base MOVWF TBLPTRU ; address of the word MOVLW CODE_ADDR_HIGH MOVWF TBLPTRH MOVLW CODE_ADDR_LOW MOVWF TBLPTRL READ_WORD TBLRD*+ ; read into TABLAT and increment MOVF TABLAT, W ; get data MOVWF WORD_EVEN TBLRD*+ ; read into TABLAT and increment MOVF TABLAT, W ; get data MOVWF WORD_ODD 

Voici la modification que j’ai apscope pour que le code d’assemblage fonctionne. Je soupçonne que quelque chose à propos du TBLRD * + cause une erreur de syntaxe.

  _asm MOVLW CODE_ADDR_UPPER MOVWF TBLPTRU MOVLW CODE_ADDR_HIGH MOVWF TBLPTRH MOVLW CODE_ADDR_LOW MOVWF TBLPTRL READ_WORD: TBLRD*+ MOVF TABLAT, W MOVWF WORD_EVEN TBLRD*+ MOVF TABLAT, W MOVWF WORD_ODD _endasm 

J’espère que quelqu’un pourra clarifier ce que signifie ‘ La mnémonique en texte intégral doit être utilisé pour les lectures / écritures de table ‘ et ce qui pourrait provoquer l’erreur de construction.

Merci!

Je TBLRD*+ vérifier, mais je crois que vous devez remplacer TBLRD*+ par le mnémonique TBLRDPOSTINC . Je posterai une modification plus tard pour confirmer.