|
|
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 01 30, 02:42. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Programavimas » c/c++
|
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 |
|
|
c/c++ |
Parašytas: 2017 11 14, 15:01 |
|
|
|
Kaip liaudiškai išaiškinamas toks skirtumas :
PORTD|=(1<<PD1)
PORTD=(1<<PD1)
|
|
|
|
|
|
Re: c/c++ |
Parašytas: 2017 11 14, 15:34 |
|
|
|
Sauliucka rašo: |
Kaip liaudiškai išaiškinamas toks skirtumas :
PORTD|=(1<<PD1)
PORTD=(1<<PD1)
|
Reiktu paimti pavyzdi, kai PORTD = 0b11110000, o tada atlikt manipuliacijas.
Pirmu atveju atlieki suma, o antru atveju - tiesiogini priskyrima. |
|
|
|
|
|
Re: c/c++ |
Parašytas: 2017 11 14, 15:56 |
|
|
|
Kodas: |
PORTD|=(1<<PD1); // PORTD=0bxxxxxx1x , t.y. bus priverstinai išstatytas PD1, kiti bitai nepakeisti
PORTD=(1<<PD1); // PORTD=0b00000010, t.y. PD1 bus "1", kiti "0"
|
|
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 14, 19:05 |
|
|
|
Esate kas nors susidūrę su bugais naudojant šiuos priskyrimus?
Nes pvz. yra buvę, kad padarius:
TCCR0|=(1<<COM00)|(1<<WGM01)|(1<<CS02)
gaunama ne taspats kas:
TCCR0=0x1C;
nors tai turėtų būti vienodai. Čia atmega32.
|
|
_________________ Aš pažeidžiau forumo taisykles ir reklamavau paraše. ...Bet uz reklama tai susimokejau |
|
|
|
|
c/c++ |
Parašytas: 2017 11 14, 20:42 |
|
|
|
Bitinis IR nuo PRISKYRIMO operatoriaus stipriai skiriasi, nebent ankstesne reiksme buvo = 0. |
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 14, 21:05 |
|
|
|
didshirshis rašo: |
Esate kas nors susidūrę su bugais naudojant šiuos priskyrimus?
Nes pvz. yra buvę, kad padarius:
TCCR0|=(1<<COM00)|(1<<WGM01)|(1<<CS02)
gaunama ne taspats kas:
TCCR0=0x1C;
nors tai turėtų būti vienodai. Čia atmega32.
|
Matyt del to, kad buvusi TCCR0 reiksme buvo kitokia, nei 0x1C. |
|
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 14, 21:34 |
|
|
|
Socrates rašo: |
didshirshis rašo: |
Esate kas nors susidūrę su bugais naudojant šiuos priskyrimus?
Nes pvz. yra buvę, kad padarius:
TCCR0|=(1<<COM00)|(1<<WGM01)|(1<<CS02)
gaunama ne taspats kas:
TCCR0=0x1C;
nors tai turėtų būti vienodai. Čia atmega32.
|
Matyt del to, kad buvusi TCCR0 reiksme buvo kitokia, nei 0x1C. |
Specialiai nustatydavau į 0.
dar veikdavo toks kodas, išskaidytas į dvi eilutes:
TCCR0|=(1<<COM00)|(1<<WGM01);
TCCR0|=(1<<CS02);
O TCCR0|=(1<<COM00)|(1<<WGM01)|(1<<CS02); niekaip |
|
Paskutinį kartą redagavo didshirshis, 2017 11 14, 21:46. Redaguota 1 kartą _________________ Aš pažeidžiau forumo taisykles ir reklamavau paraše. ...Bet uz reklama tai susimokejau |
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 14, 21:44 |
|
|
|
Cia jau kitas dalykas pasireiskia. Timerio nustatymai ir paleidimas turi buti atliekamas tam tikra tvarka - pradzioje nustatymai, paskui paleidimas.
Kai kurie nustatymu pakeitimai galimi ir paleistam timeriui, bet tam tikrose situacijose bus nepaibreztu busenu. |
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 14, 21:49 |
|
|
|
Gal ir taip, bet to nėra parašyta pdf'e, bent jau nemačiau. Kiti registrai, nustatant 3 ir daugiau reikšmių per "REGISTRAS|=(1<<XX)" jokių problemų nesukėlė kuriuos naudodavau. |
|
_________________ Aš pažeidžiau forumo taisykles ir reklamavau paraše. ...Bet uz reklama tai susimokejau |
|
|
|
|
c/c++ |
Parašytas: 2017 11 14, 22:40 |
|
|
|
Visu prima tai ne seip sau registrai, o periferijos valdymo, todel visko gali buti tam tikrose situacijose.
Dar turek uomenyje, kad c kompiliatorius nors ir gali konvertuoti i keleta sbi/cbi operaciju, jis neretai kompiliuoja i litanija is N+M in/out lds/sts ir t.t. o tuo metu dar kokia pertrauktis ivyksta... |
|
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 15, 09:56 |
|
|
|
didshirshis rašo: |
Esate kas nors susidūrę su bugais naudojant šiuos priskyrimus?...
|
Reikėjo rašyti "Esate dar kas nors susidūrę su bugais naudojant šiuos priskyrimus?...", o tai negalima pagalvoti, kad aš tas vienintelis, kuriam pastoviai taip "pasiseka" ar šiaip mėgėjas (ne)sąmonių paklausinėt, kai totaliai užknisa tokie dalykai
gintaras_bar rašo: |
Kodas:
PORTD|=(1<<PD1); // PORTD=0bxxxxxx1x , t.y. bus priverstinai išstatytas PD1, kiti bitai nepakeisti
PORTD=(1<<PD1); // PORTD=0b00000010, t.y. PD1 bus "1", kiti "0" |
Socrates rašo: |
Pirmu atveju atlieki suma, o antru atveju - tiesiogini priskyrima. |
Teoriškai aiškumas (pas mane) atsirado. Jo, keistenybių pasaulis ir jokios logikos. Logiškai mąstant jei nurodai konkretų portą, tai ir turėtų konkrečioj vietoj pakeitimą padaryt, o ne kaitaliot kitus "pagal nutylėjimą".
Tai PORTD|=(1<<PD1); ir PORTD|=2; turėtų vienodai padaryt 0bxxxxxx1x ?
O kartais nėra dar kokių "nutylėjimų", jei tenka priskirinėti log.0 , t.y.:
PORTD|=(0<<PD1)
PORTD=(0<<PD1)
Tas pats kaip ir su log.1 ? Ar čia vėl teoriškai vienaip, o praktiškai tik ponas dievas kompiliatorius ką susapnuos tą ir padarys ? |
|
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 15, 10:13 |
|
|
|
( 0 << N ) visada == 0
Siaip, dar galiu pamineti neretai pasitaikancia konstrukcija
PORTx ^= ( 1 << Pxy )
galima keisti i zymiai saugesne ir uzimancia 2-3 taktus
PINx = ( 1 << Pxy )
zinoma, reikia isitikinti ar tame mikrovaldiklyje tai veiks. |
|
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 15, 13:33 |
|
|
|
Sauliucka rašo: |
Tai PORTD|=(1<<PD1); ir PORTD|=2; turėtų vienodai padaryt 0bxxxxxx1x ? |
Tikrai taip.
Sauliucka rašo: |
O kartais nėra dar kokių "nutylėjimų", jei tenka priskirinėti log.0 , t.y.:
PORTD|=(0<<PD1)
PORTD=(0<<PD1) |
Jei reikia išstatyti "0", tai reikia rašyti taip:
Sauliucka rašo: |
Tas pats kaip ir su log.1 ? Ar čia vėl teoriškai vienaip, o praktiškai tik ponas dievas kompiliatorius ką susapnuos tą ir padarys ? |
Jei norisi aiškumo, kaip komandas mašininiu kodu paverčia kompiliatorius, reikia pasižiūrėti .LST failą. Ten viskas bus paversta į asemblerį. Aš visada tokiu būdu pasitikrinu, jei kyla abejonės ar teisingai C kodą parašiau. Toks metodas taip pat labai paverčia, kai reikia optimizuoti kodą tiek greičio, tiek kompaktiškumo atžvilgiu. Nes ne visada kompaktiškiausias kodas yra vykdomas greičiausiai ir atvirkščiai - ne visada greičiausiai vykdomas kodas yra kompaktiškas. |
|
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 15, 15:27 |
|
|
|
Sauliucka rašo: |
O kartais nėra dar kokių "nutylėjimų", jei tenka priskirinėti log.0 , t.y.:
PORTD|=(0<<PD1)
PORTD=(0<<PD1) |
gintaras_bar rašo: |
Jei reikia išstatyti "0", tai reikia rašyti taip:
|
Ačiū, o tai man valdiklis "snikersą parodė", kai logiškai pagalvojęs "0" įrašiau.
Reiks į bažnyčia nevaikščiot. |
|
|
|
|
|
c/c++ |
Parašytas: 2017 11 15, 15:45 |
|
|
|
Sauliucka rašo: |
PORTD|=(0<<PD1) |
Kaip jau minejau '|' operatorius yra suma. Tai skirtumo rezultate nera, jei darai 0+0 ar 1+0, nes viskas priklauso nuo to, kokia reiksme ten buvo... |
|
|
|
|
|
|
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 |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
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 |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
|
|