 |

|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 07 18, 10:21. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » CodevisionAVR funkcija
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
 |
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 17:09 |
|
|
|
Prireikė man programoje pamatyti baitą atskirais bitais. Atrodytų, užduotis visai paprasta, tačiau... Štai funkcija, kuri gauna baitą ir grąžina 8 bitus. Veikia keistai. Pabandžius paduoti paeiliui kelis baitus paaiškėja, kad pirmų keturių rezultatas teisingas, toliau prasideda nesąmonės. Rezultate gaunu bet ką, tik ne tai, ką turėčiau gauti. Dar po keletos baitų - vėl rezultatas teisingas. Kame klaida? Įtariu čia su pointeriais kažkas ne taip, bet kas - neįsikertu.
char * byte_to_bin(char x)
{
char n, *binstr;
for(n=0; n<8; n++) {
if((x & 0x80) !=0)
binstr[n]='1';
else
binstr[n]='0';
x<<=1;
}
return binstr;
} |
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 17:56 |
|
|
|
O negeriau butu is anksto susikurt apibresto dydzio masyva ir perduot rodykle i ji? char * byte_to_bin(char x) tai isvis nelabai supratau kam ta rodykle. |
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 18:22 |
|
|
|
Kodas: |
char binstr[9];
void byte_to_bin(char x){
char n;
for(n=0; n<8; n++){
if((x & 0x80) !=0)
binstr[n]='1';
else
binstr[n]='0';
x<<=1;
}
}
|
|
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 18:56 |
|
|
|
centronic rašo: |
Kodas: |
char binstr[9];
void byte_to_bin(char x){
char n;
for(n=0; n<8; n++){
if((x & 0x80) !=0)
binstr[n]='1';
else
binstr[n]='0';
x<<=1;
}
}
|
|
Pala... Klausimas koks buvo? Apie funkciją. O tavo kode kur funkcija? Žinoma, taip, kaip tu pasiūlei, veikia, tačiau aš klausiau ne to.
char * byte_to_bin(char x) - kam toks pointeris? Tam, kad C kalboje tik taip funkcija gali grąžinti stringą. Bent jau taip atradau skaitinėdamas aprašymus internete. Taigi, kokie dar būtų pasiūlymai?
Beje, jei pvz. Delphi parašyti tokią funkciją man juokų darbas, tai C pasirodė grynas hemarojus.  |
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 19:16 |
|
|
|
Kazka jau maisai, tas pointeris siuo atveju isvis neaisku kaip veikia. Centronic atveju funkcija tai cia void byte_to_bin(char x)
C kalboja tau nieko grazint nereikia, arba darai kaip Centronic dare, arba darai zmoniskai, su masyvo pointerio padavimu funkcijai. |
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 21:15 |
|
|
|
Centronic parašė procedūrą kuri keičia globalų kintamąjį. Galima ir taip, tačiau čia ne funkcija. Ir matosi, kad išvengė pointerių. Aš irgi jų vengiu, nes iki galo taip ir nesuprantu...
"C kalboje nieko grąžinti nereikia" - įdomi mintis, tačiau gal yra kitų nuomonių? O tai mano nuomonė apie C dar labiau pablogės.
Kaip padaryt masyvo pointerį? C kalboje masyvas irgi toks keistokas dalykas. Ypač jei tai string'as.
Galima klausimą performuluot kitaip. Reikia parašyt normalią funkciją, kuri grąžintų string'ą. Bet kokią.
Sakykim perduodam funkcijai "labas", o ji grąžina "labas rytas". Paprasta? |
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 21:28 |
|
|
|
greiciausiai kompiliatorius koki s... sumala. Pas mane abi f-jos gerai veikia.
Funkcija char * byte_to_bin(char x) ne stringa grazina, o adresa binstr masyvo. Pvz.: jei tame masyve irasyta "Labas" tai grazins pirmos raides "L" adresa |
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 21:35 |
|
|
|
centronic rašo: |
greiciausiai kompiliatorius koki s... sumala. Pas mane abi f-jos gerai veikia.
Funkcija char * byte_to_bin(char x) ne stringa grazina, o adresa binstr masyvo. Pvz.: jei tame masyve irasyta "Labas" tai grazins pirmos raides "L" adresa |
Taip, ne stringą, o nuorodą į stringo pradžią. Visiškai teisingai. Bet, kiek aš žinau, kitaip stringo gauti neišeina?
Man atrodo, kad ta funkcija teisinga, bet veikia, kažkodėl, ne visada teisingai.
Vienas iš variantų, kad kompiliatorius š... mala. Gali būt. |
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 21:40 |
|
|
|
C kalboj tokiu dalyku kaip proceduros nelabai ir yra, cia ne paskalis ar delfi. O parasytos normalios funkcijos.
Kodas: |
char binstr[9];
void byte_to_bin(char x, char *bin){
char n;
for(n=0; n<8; n++){
if((x & 0x80) !=0)
bin[n]='1';
else
bin[n]='0';
x<<=1;
}
}
byte_to_bin(x, binstr)
|
|
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 21, 21:48 |
|
|
|
Va čia jau panašu... Kažkaip nepagalvojau apie tokį variantą.
Visgi kiek aš susipažinęs su C, ten funkcijos yra. Turiu omenyje tokias kur rezultatas gaunamas taip:
x=kazkokiafunkcija(y);
Procedūra tas pats, tik jokio rezultato negrąžina:
void kazkokiaprocedura(y);
Gali ir neperduoti nieko:
void kazkokiaprocedura (void);
Lyg tai taip, bet galiu ir klysti, C nelabai mėgstu.  |
|
|
|
|
 |
 |
Re: CodevisionAVR funkcija |
Parašytas: 2010 02 27, 22:31 |
|
|
|
ReM rašo: |
Prireikė man programoje pamatyti baitą atskirais bitais. Atrodytų, užduotis visai paprasta, tačiau... Štai funkcija, kuri gauna baitą ir grąžina 8 bitus. Veikia keistai. Pabandžius paduoti paeiliui kelis baitus paaiškėja, kad pirmų keturių rezultatas teisingas, toliau prasideda nesąmonės. Rezultate gaunu bet ką, tik ne tai, ką turėčiau gauti. Dar po keletos baitų - vėl rezultatas teisingas. Kame klaida? Įtariu čia su pointeriais kažkas ne taip, bet kas - neįsikertu.
Kodas: |
char * byte_to_bin(char x)
{
char n, *binstr;
for(n=0; n<8; n++) {
if((x & 0x80) !=0)
binstr[n]='1';
else
binstr[n]='0';
x<<=1;
}
return binstr;
}
|
|
tas binstr šitam kode 'rodo' į niekur. T.y. reiktų tik džaiugtis, kad programa išvis veikia nenulūždama.
reiktų daryti taip
Kodas: |
char *binstr;
binstr = malloc (9);
|
kadangi, spėju, rašai mikrokontroleriui, ten malloc kažin ar bus. todėl kiti pasiūlyti variantai kaip
Kodas: |
char binstr[9];
void byte_to_bin(char x, char *bin){
char n;
for(n=0; n<8; n++){
if((x & 0x80) !=0)
bin[n]='1';
else
bin[n]='0';
x<<=1;
}
}
byte_to_bin(x, binstr) ;
|
arba
Kodas: |
char binstr[9];
void byte_to_bin(char x){
char n;
for(n=0; n<8; n++){
if((x & 0x80) !=0)
binstr[n]='1';
else
binstr[n]='0';
x<<=1;
}
}
|
yra geriau, nes išvengiam pointeriu.
pointeriai mikrokontrolerių programose yra blogis.
nebent ten jau mikroprocesorius. |
|
|
|
|
 |
 |
CodevisionAVR funkcija |
Parašytas: 2010 02 27, 22:35 |
|
|
|
beje c iš galimų alternatyvų yra pati geriausia. Geriau yra tik c++, arba, jei svarbu ne programos, o programavimo greitis, python'as |
|
|
|
|
 |
CodevisionAVR funkcija |
Parašytas: 2010 03 11, 14:14 |
|
|
|
Aiškintis kokia kalba geriausia - neverta. Nebus iš to jokių rezultatų. Kiekvienam savo.
Dar vienas klausimėlis apie C string'us.
Aprašom kintamąjį:
char *ss; arba char ss[], arba char ss[20]. Visi variantai veikia.
Dabar bandom jam priskirti kažkokią eilutę tiesiogiai:
ss="hello world";
Negalima taip pasirodo. Tipų neatitikimas. Bet kokia eilutė kabutėse skaitoma flash char tipu. Kas šiaip jau gal ir logiška. Bet man ją modifikuot reikia. Kintamojo aprašymo metu taip priskirti galima. Pvz.: char *ss="hello world"; Bet vėliau jau negalima. Po vieną simbolį tokiems string'ams priskyrinėt galima.
O man reikia būtent taip: ss="hello world";
Ką daryt?  |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Football Training Kit
Football Training Equipment,
Football Skills,
Football Training |
|

|
 |