 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Predkambrij Član

Pridružen-a: Ned 24 Maj 2009 14:17 Prispevkov: 129 Aktiv.: 0.66 Kraj: Ljubljana
|
Objavljeno: Sre Avg 04, 2010 10:31 am Naslov sporočila: bascom - funkcije, subrutine |
|
|
Pozdravljeni, po enem letu sem se znova podal v programiranje AVR-jev v programu bascom.
Naletel sem na eno težavo, ki mi nikakor ni logična.
program:
dim a as bit
dim result as integer
declare function test(byval j as bit) as integer
reset a
'a = 1
print a
result = test(a)
function test(byval j as bit) as integer
test = 0
end function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sporočilo napake je, "bit index out of range for supplied data type [1]"
Kako je lahko bit index izven območja? Printa ga lahko, nevem zakaj ga ne more podati kot argument, vse normalno funkcionira če dam namesto bit byte. Enako napako dobim, če uporabim sub (subrutiono) namesto function.
Hvala, LP _________________ bivši englishman |
|
Nazaj na vrh |
|
 |
Jernej Š. Član

Pridružen-a: Pon 25 Jun 2007 23:33 Prispevkov: 83 Aktiv.: 0.38 Kraj: Primorska
|
Objavljeno: Sre Avg 04, 2010 7:52 pm Naslov sporočila: |
|
|
Živjo!
Bacom mi je sicer španska vas, a vseeno mi pri tvoji kodi nekaj stvari ni jasnih. Če prav razumem, napako javi v funkciji test(). Ampak tvoja funkcija sploh ne uporablja argumenta ...
No, kakorkoli že - podatkovni tip bit ni smiseln v primerih, kot je tvoj. V AVR mikrokontrolerju se parametri prenašajo v enotah byte, zato s tipom bita ne pridobiš prav nič. Uporabi byte in problem je rešen.
Bit je večinoma uporaben le pri barnju/pisanju na 1 pin mikrokontrolerja ali morda pri kakem registru za konfiguriranje periferne enote. Povsod drugod se ga izogibaj.
Lep pozdrav! |
|
Nazaj na vrh |
|
 |
Predkambrij Član

Pridružen-a: Ned 24 Maj 2009 14:17 Prispevkov: 129 Aktiv.: 0.66 Kraj: Ljubljana
|
Objavljeno: Sre Avg 04, 2010 10:47 pm Naslov sporočila: |
|
|
Zdravo, hvala za odgovor. Ja dal sem byte pa dela.
To sem dal le primer, ker celoten program je kar dolg. Napaka se pojavi v tej vrstici, ko pokličem funkcijo:
result = test(a)
funkcija ima argument a.
Zakaj bi imel bit - za branje enega pina (ali je stikalo sklenjeno ali ne), saj ima lahko le vrednost 0 in 1. Dela tudi z byte seveda, ampak se mi ga zdi malo škoda
Sej jezik kot jezik se mi zdi še malo čuden, ker lahko kar gleda tudi globalne spremenljivke, ne da bi mu eksplicitno povedal, ter ne loči razlike med velikimi in malimi črkami, vendar se ga bom navadil, pravzaprav pred letom dni nisem znal še veliko programirati, zdaj znam pa malo več, sem pa o sami arhitekturi procesorja pozabil (migracija elektro - računalništvo) _________________ bivši englishman |
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Sre Avg 04, 2010 10:52 pm Naslov sporočila: |
|
|
Glede na to da ima procesor (verjetno) 8 bitne registre je tvoj pomislek odveč. _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
smatjaz Član


Pridružen-a: Pon 10 Nov 2003 16:33 Prispevkov: 846 Aktiv.: 3.57
|
Objavljeno: Čet Avg 05, 2010 7:24 am Naslov sporočila: |
|
|
Za začetek spremeni:
declare function test(byval j as bit) as integer
v declare function test(byval j as byte) as integer
LP M. _________________ Električni aparati delujejo na dim ... ko dim iz njih uide ... ne delujejo več! |
|
Nazaj na vrh |
|
 |
Jernej Š. Član

Pridružen-a: Pon 25 Jun 2007 23:33 Prispevkov: 83 Aktiv.: 0.38 Kraj: Primorska
|
Objavljeno: Čet Avg 05, 2010 9:16 am Naslov sporočila: |
|
|
Živjo!
englishman je napisal/a: |
Zdravo, hvala za odgovor. Ja dal sem byte pa dela.
Zakaj bi imel bit - za branje enega pina (ali je stikalo sklenjeno ali ne), saj ima lahko le vrednost 0 in 1. Dela tudi z byte seveda, ampak se mi ga zdi malo škoda
|
Tudi če bi uporabil bit (in če to prevajalnik dopusti), bo generirana koda še vedno uporabila cel bajt. Preprosto zato, ker procesor ne zna delati s spremenljivkami, manjšimi od 8 bitov. Prepričan sem, da danes ni procesorja, ki bi znal delati s spremenljivkami velikosti 1 bit. Torej kar brez strahu - tako ne boš privarčeval prav nič.
Če te skrbi prostor, lahko softversko urediš, da imaš v enem bajtu spravljenih do 8 t. i. zastavic ("flags"). Te lahko uporabljaš kot statusne bite pri raznih pogojnih stavkih ali kaj podobnega. Vendar še vedno bo register zastavic velik vsaj 8 bitov, branje in pisanje zastavic pa moraš sam implementirati z logičnimi AND/OR funkcijami.
Lep pozdrav! |
|
Nazaj na vrh |
|
 |
milan62 Član

Pridružen-a: Ned 04 Jan 2004 23:19 Prispevkov: 2391 Aktiv.: 10.09 Kraj: Kranj
|
Objavljeno: Čet Avg 05, 2010 9:27 am Naslov sporočila: |
|
|
Jernej Š. je napisal/a: |
Prepričan sem, da danes ni procesorja, ki bi znal delati s spremenljivkami velikosti 1 bit. |
Živiš v zmoti !
LP _________________ Wasting time online since 1999 |
|
Nazaj na vrh |
|
 |
Jernej Š. Član

Pridružen-a: Pon 25 Jun 2007 23:33 Prispevkov: 83 Aktiv.: 0.38 Kraj: Primorska
|
Objavljeno: Čet Avg 05, 2010 9:29 am Naslov sporočila: |
|
|
mi747 je napisal/a: |
Jernej Š. je napisal/a: |
Prepričan sem, da danes ni procesorja, ki bi znal delati s spremenljivkami velikosti 1 bit. |
|
Možno ... vsega se ne da vedeti . Kateri procesorji pa so to?
Lep pozdrav! |
|
Nazaj na vrh |
|
 |
Predkambrij Član

Pridružen-a: Ned 24 Maj 2009 14:17 Prispevkov: 129 Aktiv.: 0.66 Kraj: Ljubljana
|
Objavljeno: Čet Avg 05, 2010 10:09 am Naslov sporočila: |
|
|
Ok, hvala za odgovore, torej je najmanjša dolžina, ki jo lahko uporabim byte. _________________ bivši englishman |
|
Nazaj na vrh |
|
 |
milan62 Član

Pridružen-a: Ned 04 Jan 2004 23:19 Prispevkov: 2391 Aktiv.: 10.09 Kraj: Kranj
|
Objavljeno: Čet Avg 05, 2010 12:14 pm Naslov sporočila: |
|
|
Odgovor za Jerneja:
npr.: Intel 8051 in vsi njegovi kasnejši derivati
iz Wikipedie:
A particularly useful feature of the 8051 core is the inclusion of a boolean processing engine which allows bit-level boolean logic operations to be carried out directly and efficiently on internal registers and RAM.
LP _________________ Wasting time online since 1999 |
|
Nazaj na vrh |
|
 |
Jernej Š. Član

Pridružen-a: Pon 25 Jun 2007 23:33 Prispevkov: 83 Aktiv.: 0.38 Kraj: Primorska
|
Objavljeno: Čet Avg 05, 2010 6:32 pm Naslov sporočila: |
|
|
Za mi747:
Aha, pa res ima 8051 direktno naslavljanje bitov. Sicer le na tistih 200 pa nekaj bitih, a ima ga . Hvala za informacijo!
Lep pozdrav! |
|
Nazaj na vrh |
|
 |
Predkambrij Član

Pridružen-a: Ned 24 Maj 2009 14:17 Prispevkov: 129 Aktiv.: 0.66 Kraj: Ljubljana
|
Objavljeno: Čet Sep 09, 2010 1:39 pm Naslov sporočila: |
|
|
Tukaj sem dobil točen odgovor na moje vprašanje:
Type of the variable(s) and of the result. Byte,Word, Integer, Long, Single or String. Bits are not supported.
help resnično pomaga  _________________ bivši englishman |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|