C vprašanje

Moderator: tilz0R

C vprašanje

OdgovorNapisal/-a lojzek » 29 Dec 2022, 09:46

Pozdravljeni,

Ne vem kako, ampak mi ne uspe rešiti tega simple problema:
Koda: Izberi vse
if ((PIN_Tipka & (1<<Tipka1)) && (PIN_Tipka & (1<Tipka2)))
   {   return;   }


To se mi zdi najbolj prav.
Tipka1 in Tipka2 sta HIGH, tako bi bil if pogoj izpolnjen. Ne izvrši pa tistega return v oklepaju, ampak nadaljuje s programom za oklepajem. Če kateri od tipk spremenim stanje v LOW nadaljuje za oklepajem. Kot pričakovano.
Kaj je tu narobe, preizkusil sem že najbolj nemogoče kombinacije operandov &&, ||, &, | tamle na sredi pogoja. Dodajal in odvzemal sem oklepaje, pa mi ne uspe, kaj sem spregledal?

Primerjal sem tudi s starimi programi, kjer tak zapis dela OK...

PS: AVR studio in Atmel čipek
lojzek
 
Prispevkov: 302
Pridružen: 25 Feb 2015, 13:18
Zahvalil se je: 9 krat
Prejel zahvalo: 75 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 7

Re: C vprašanje

OdgovorNapisal/-a GJ » 29 Dec 2022, 10:16

(1<Tipka2) verjetno mora biti (1<<Tipka2)

LP :mrgreen: GJ
Če si jezen, si žrtev!
GJ
 
Prispevkov: 453
Pridružen: 18 Jan 2015, 22:26
Kraj: Ljubljana
Zahvalil se je: 219 krat
Prejel zahvalo: 138 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 29

Re: C vprašanje

OdgovorNapisal/-a lojzek » 29 Dec 2022, 10:47

:_banghead :_rolling
Noro, kaj sem zgrešil.... Hvala
lojzek
 
Prispevkov: 302
Pridružen: 25 Feb 2015, 13:18
Zahvalil se je: 9 krat
Prejel zahvalo: 75 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 7

Re: C vprašanje

OdgovorNapisal/-a VolkD » 29 Dec 2022, 11:17

Hja, napake postanejo enostavne, šele, ko jih vidimo.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 61435
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 17083 krat
Prejel zahvalo: 9423 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C vprašanje

OdgovorNapisal/-a lojzek » 02 Jan 2023, 18:02

Zadnji dan starega leta sem zaključil.
Enega svojih prvih "večjih mikrokontrolerskih projektov" sem izboljšal.
Nixie uri, ki je in še vedno uporablja omrežni takt, sem dodal DS3231. Za takrat, ko štroma zmanjka.

Tinny 2313, zelo malo spominskega prostora, kako je bilo debugirat težko. Še niti ene ledike nisem imel viška, razen nixie zaslona.....

2048 Bytov prostora, ... koliko sem moral pri testu komentirat... Brisat, optimirat. Poleg tega sem čisto svoj softwer TWI vmesnik moral sestavit. Tinnijev USI mi ni bil nič v pomoč, prej v napoto. No, na koncu je še malo ostalo?.

Slike ure pa ne znam dodat. :) :_dunno Ne znam si je iz telefona na email poslat :?


PS... Aja, vprašanje v tej temi je spadalo sem.:)
Priponke
Slika.JPG
lojzek
 
Prispevkov: 302
Pridružen: 25 Feb 2015, 13:18
Zahvalil se je: 9 krat
Prejel zahvalo: 75 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 7

Re: C vprašanje

OdgovorNapisal/-a Kroko » 03 Jan 2023, 01:14

Tule bo nekaj narobe.

HIGH je definiran kot1, LOW kot 0.
Tipka1 in Tipka2 sta HIGH - tako si napisal.
1<< 1 = 2;
if ((PIN_Tipka & 2) && (PIN_Tipka & 2)...

Hmm
http://www.planet-cnc.com Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 5602
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 735 krat
Prejel zahvalo: 2180 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C vprašanje

OdgovorNapisal/-a lojzek » 03 Jan 2023, 12:00

Kroko, zadeva dela.

Mogoče ti ni bilo čisto jasno, kaj so high (pullup drži pin na 5V) in low (pritisnjena tipka proti masi -> pin na GND).

PIN_Tipka pa je v definicijah programa definiran kot PIND.
Tipka1 in 2 pa kot PD2 in PD3 (recimo).

Tukaj gre za logične operacije (IN) ne pa za postavljanje nekega bita na neko vrednost.
lojzek
 
Prispevkov: 302
Pridružen: 25 Feb 2015, 13:18
Zahvalil se je: 9 krat
Prejel zahvalo: 75 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 7

Re: C vprašanje

OdgovorNapisal/-a Kroko » 03 Jan 2023, 12:54

Meni je vse jasno.
V vprašanju si povedal premalo in narobe.
Torej direktern dostop do registra. V večini primerov to ni tako, steklena krogla pa je na servisu.
Da ne bo kdo narobe razumel in pomešal D2, D3 in PD2, PD3 ter se kaj napačnega naučil. Ker pri Unoti na primer je D8 = PB0.
http://www.planet-cnc.com Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 5602
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 735 krat
Prejel zahvalo: 2180 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C vprašanje

OdgovorNapisal/-a VolkD » 03 Jan 2023, 13:36

lojzek je napisal/-a:Mogoče ti ni bilo čisto jasno, kaj so high (pullup drži pin na 5V) in low (pritisnjena tipka proti masi -> pin na GND).
Meni tudi ni bilo vse jasno. Sem hotel že komentirat, da nariši kako imaš vezane tipke. No pa je bila sinoči pozna ura in potem nisem nič pisal.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 61435
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 17083 krat
Prejel zahvalo: 9423 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: C vprašanje

OdgovorNapisal/-a lojzek » 03 Jan 2023, 20:11

@GJ je takoj vedel. Sintax error.

Imam v službi low-level skripto, kako se upravlja z biti. Preverjeno, preizkušeno, zapisano in potestirano by-me. Kaj je logično in nelogično in rezultati vsega. Bom se poskusil jutri spomnit poskenirat, mogoče bo nekomu na začetku poti programiranja v pomoč (meni je še zdaj velikokrat).

EDIT, Unota sicer veliko uporabljam, ampak kot Atmega328P z lažjo vstavitvijo v testno plato in nekaj ledikami on-bord . Ne pa v Arduino okolju.
lojzek
 
Prispevkov: 302
Pridružen: 25 Feb 2015, 13:18
Zahvalil se je: 9 krat
Prejel zahvalo: 75 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 7


Vrni se na C in sorodni jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost