Problèmes combinant la SDCC et à l'ASM de code compilé sur l'Intel 8051
Question
Nous essayons de compiler notre code C qui comprend un grand nombre de l'assemblée pour les diverses opérations (timing, la production de formes d'onde de sortie, et la mesure de la fréquence d'entrée).
Nous reçois le même message d'erreur pour quelques-uns de nos ASM opérations:
".org en REL de la zone ou de la directive / mnémonique erreur"
Dans notre code ci-dessous, nous obtenons 3 erreurs (j'ai commenté les lignes elles se produisent, et ce qu'est exactement l'erreur que nous avons est.Merci!
void getFrequency(int *freqHi, int *freqLo)
{
__asm
;
; A program that measures the frequency at pin T0 (P1.2)
ljmp GetFreq
Wait1s:
mov R2, #40
M3: mov R1, #250
M2: mov R0, #181
M1: djnz R0, M1 ; 2 machine cycles-> 2*0.27126us*181=100us
djnz R1, M2 ; 100us*250=0.025s
djnz R2, M3 ; 0.025s*40=1s
ret
;Initializes timer/counter 0 as a 16-bit counter
InitTimer0:
setb T0 ; Enable pin T0 as input
clr TR0 ; Stop timer 0
mov a,#0F0H ; ERROR <o> .org in REL area or directive / mnemonic error
anl a,TMOD
orl a,#00000101B ; Set timer 0 as 16-bit counter ERROR <o> .org in REL area or directive / mnemonic error
mov TMOD,a
ret
GetFreq:
mov SP, #7FH ; Set the stack pointer to the begining of idata ERROR <o> .org in REL area or directive / mnemonic error
lcall InitTimer0
clr TR0 ; Stop counter 0
mov TL0, #0
mov TH0, #0
setb TR0 ; Start counting
lcall Wait1s ; Wait one second
clr TR0 ; Stop counter 0, TH0-TL0 has the frequency
mov R0, TH0
mov R1, TL0
mov _freqHi, R0
mov _freqLo, R1
__endasm;
// freqHi, freqLo have respective values
}
La solution
sdcc
s 'assembleur ne prend pas en charge le H
et B
le suffixe de la syntaxe pour l'immédiat, les valeurs que vous utilisez.
Essayez #0xF0
au lieu de #0F0H
, et #0b00000101
au lieu de #00000101B
, etc.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow