O întrebare destul de prost pe C, 3 fire de interfaţă serială

G

glenjoy

Guest
Salut,

Am văzut acest cod şi întrebam dacă acest lucru este adevărat pentru a obţine un 8 biţi MSB prima de date.Vă rugăm să posta comentarii:

nesemnate caracter read_0831 () (

nesemnate caracter de biţi;

clk = 0;
bit = d_out;
clk = 1;

reveni biţi;
)

nesemnate start_read int () (

nesemnate caracter i;
nesemnate int adc_data;

adc_data = 0;
csel = 0;

pentru (i = 0; i <8; i ) (

adc_data = adc_data | read_0831 () <<1;
csel = 1;

)

)

1.Este conţinutul de caracter bit 1000 000 sau 0000 0001 dacă d_out este egal cu unu.

2.Este acest cod, nu-i asa?pentru că eu sunt confundate cu roti stânga în cazul în care acesta va pune în adc_data corect aranjament de biţi de la ADC.

Îmi pare rău de a solicita acest lucru, dar eu sunt un incepator in C, sunt folosite în montaj de programare.

Mulţumesc.

 
Salam,

Citat:

1.
Este conţinutul de caracter bit 1000 000 sau 0000 0001 dacă d_out este egal cu unu.
 
Pot să-mi explice cineva ce se va întâmpla în această bucată de cod?

nesemnate start_read int () (

nesemnate caracter i;
nesemnate int adc_data;

adc_data = 0;
csel = 0;

pentru (i = 0; i <8; i ) (

adc_data = adc_data | read_0831 () <<1;
csel = 1;

)

)

 
glenjoy, codul pare rupt.
Pentru fiecare bit de intrare, pe care doriţi să o schimbare a plecat din acumulator şi apoi introduceţi de intrare în acumulator bit bit 0.Încercaţi să înlocuiască acest lucru:
adc_data = adc_data | read_0831 () <<1;
cu acest lucru:
adc_data = (adc_data <<1) | read_0831 ();

Pentru că la locul de muncă, read_0831 () trebuie să revină, fie 0 sau 1.

Din motive de claritate, este o idee bună să adăugaţi extra paranteze C expresii care implică schimbări şi logică operatori.Asta vă ajută de asemenea să se evite luarea de bug-uri, deoarece C prioritate este uneori surprinzător.Pentru a răspunde la

dvs. doua întrebare, această declaraţie:adc_data = adc_data | read_0831 () <<1;este echivalentă cuadc_data = adc_data | (read_0831 () <<1);care ţine punerea

dvs. de intrare în acumulator bit bit 1.
Nu este ceea ce vrei.După cum aţi afla C, va avea mai multe întrebări.Va place acest site:
http://www.eskimo.com/ ~ SCS / C-faq / top.html

Prin modul în care, evidenţiaţi
dvs., codul sursă, şi daţi clic pe "Cod" buton, astfel încât să putem vedea
dvs. indenting, ca Sfinxul a făcut-o.

 
în timp ce este bun pentru scopuri de învăţare, dar pentru moment critic operaţiuni ca acest montaj este o alegere mai buna.

 
Salut,

Multumesc pentru ajutor am avut corectate de cod:

Cod:

cuprind # "C: \ SourceCode \ Website \ 0831_lm35 \ 0831_lm35.h"# bit d_out = 0x05.2

# bit clk = 0x05.3

# bit csel = 0x05.4nesemnate caracter adc_value;

nesemnate caracter read_0831 () (nesemnate caracter de biţi;clk = 0;

bit = d_out;

clk = 1;reveni biţi;

)nesemnate caracter start_read () (nesemnate caracter i;

nesemnate caracter adc_data;
adc_data = 0x00;

csel = 0;[color = albastru] pentru (i = 0; i <10; i ) (adc_data = (adc_data <<1) | read_0831 ();[/ color])

reveni adc_data;

csel = 1;)
 
Fericit este de lucru.Noroc de învăţare C.

Asta
e mai uşor de citit.

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Zâmbi" border="0" />Se pare ca la "culoarea" tag-ul nu funcţionează în interiorul unui "cod" etichetă.

Bluechem, de asamblare este o alegere mai buna decât în cazul în care compilatorul C are un optimizator săraci.

 
aceste zile compilatoare sunt foarte eficiente, dar de fiecare limba are un scop!C este foarte convinient dar nu poate trece de montaj in viteza, nu conteaza cat de bun este de compilator.

 
C poate bate montaj în viteză.

Viteza cu referire la depanarea şi schimba codul de microcontroler platformă.

Dar desigur, C nu poate bate montaj in viteza in executie.

Dar aceste zile, fiind microcntrollers devine mai rapid şi memorie dimensiuni mari merge şi oameni vrea proiectele lor să se facă rapid.

Cred că se aplică C, eu am fost un ansamblu de utilizator,
de asemenea, dar ca urmare a cererii de timp în dezvoltare, sunt acum încearcă să se uite la C.

 
Eu recunosc!Un expert de asamblare limba programator poate scrie cod egală sau mai rapid decât o optimizare a compilatorului.Dar am să spun cu adevărat expert * *.Multe moderne procesoare au mai multe unităţi de execuţie şi de transfer de lux memorie conducte, care sunt foarte dificil, pentru a optimiza de mână.Dacă faci asta în asamblare, va trebui să înceapă peste, atunci când o nouă versiune a procesorului iese.

Ok, care de obicei nu se întâmplă pentru a 8-bit milionimi.În critic buclele bine, eu ce inspecta generat de compilator, şi dacă nu îmi place, am cânta la vioară cu C (în speranţa de a obţine noroc), sau am scrie in bucla de asamblare.

 
echo47 a scris:

În critic buclele bine, eu ce inspecta generat de compilator, şi dacă nu îmi place, am cânta la vioară cu C (în speranţa de a obţine noroc), sau am scrie in bucla de asamblare.
 

Welcome to EDABoard.com

Sponsor

Back
Top