Pagina 1 di 3

Chi esegue lo shift?

MessaggioInviato: 3 apr 2022, 18:52
da daniele1996
Codice: Seleziona tutto
#define F_CPU 16000000UL
#define BAUDRATE 9600
#define UBRR(UART_BAUD) ((F_CPU/16/UART_BAUD)-1)

int main(){
   /* Set baud rate */
   UBRR0H = (unsigned char)(UBRR(BAUDRATE)>>8);
   UBRR0L = (unsigned char)UBRR(BAUDRATE);


Mi domando, lo shift lo esegue il compilatore o il programma compilato?

Re: Chi esegue lo shift?

MessaggioInviato: 3 apr 2022, 19:30
da boiler
Se usi gcc, lo fa lui. Non solo lo shift ma anche le divisioni.
Ma altri compiler potrebbero comportarsi diversamente.

Boiler

Re: Chi esegue lo shift?

MessaggioInviato: 3 apr 2022, 22:20
da dadduni
Gcc sicuramente lo fa lui, se conoscete compilatori che non lo fanno e lo fanno fare ogni volta alla CPU fatemi sapere che sono curioso

Re: Chi esegue lo shift?

MessaggioInviato: 4 apr 2022, 7:53
da EcoTan
Io non ho capito dove venga definito UBRR(BAUDRATE)

Re: Chi esegue lo shift?

MessaggioInviato: 4 apr 2022, 8:44
da micdisav
Ciao,
in che senso chi esegue lo shift?
Anche il compilatore è un programma, lo shift è un'operatore che agisce/necessita di 2 operandi, che a loro volta possono essere variabili.
Michele.

Re: Chi esegue lo shift?

MessaggioInviato: 4 apr 2022, 9:15
da speedyant
Io invece faccio una "domanda indiscreta", perché si vuole sapere chi fa lo shift?
La risposta vera sarebbe "il linguaggio del micro", ma per dare una risposta coerente sarebbe interessante il motivo della domanda.
Forse non "succede" quello che si attendeva?

Re: Chi esegue lo shift?

MessaggioInviato: 4 apr 2022, 14:38
da Gabrieleb
La domanda mi incuriosisce .
Essendo lo shift all' interno del loop main() mi aspetterei che venga eseguito ad ogni ciclo dalla cpu, ma dalle risposte sembra di no.
Quindi nel nostro caso equivarrebbe a scrivere UBRR0H = 0x25 ;
È corretto ?

Re: Chi esegue lo shift?

MessaggioInviato: 4 apr 2022, 15:06
da boiler
Gabrieleb ha scritto:Essendo lo shift all' interno del loop main()

main() non è necessariamente un loop. Qui non lo è, o perlomeno la parte dove viene fatto questo calcolo non lo è.

Quindi nel nostro caso equivarrebbe a scrivere UBRR0H = 0x25 ;
È corretto ?


No, da dove ricavi quel 0x25?
UBRR0H = 0

Boiler

Re: Chi esegue lo shift?

MessaggioInviato: 4 apr 2022, 15:08
da boiler
boiler ha scritto:No, da dove ricavi quel 0x25?

Ah, vedo... hai dimenticato di applicare la macro UBRR.

Re: Chi esegue lo shift?

MessaggioInviato: 4 apr 2022, 15:09
da speedyant
dadduni ha scritto:Gcc sicuramente lo fa lui, se conoscete compilatori che non lo fanno e lo fanno fare ogni volta alla CPU fatemi sapere che sono curioso

Una volta che si genera il file oggetto e questo viene "flashato", credo che venga fatto dal micro.

Ripeto, secondo me la domanda non era questa... ;)