Käsitteet hukassa

Olen vasta tutustumassa ohjelmointiin lähemmin ja olen viime aikoina lueskellut hiljakseen (todella niin) Vahteran kirjaa "Mikro-ohjaimen ohjelmointi C-kielellä". Nyt olen pino-osoittimissa, mistä kysymyksiä:

Mikä oikeastaan on tuo sivulla 218 mainittu "porttiosoite" ja "RAM-osoite"? Edelleen sivulla olevan taulukon käsite "Init-arvo" on täyttä hepreaa...

Mitä tarkoittaa rekisterin "bittisyys"? Siis kun tuossa puhutaan 8 ja 16-bittisistä rekistereistä.
9931
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

RAM-osoite lienee jokaiselle muistin tavulle yksilöllisesti varattu tunnus, jonka avulla kysistä kohtaa käsitellään. Porttiosoite taas lienee jonkin I/O-portin soite. Tällä osoitteella käsitellään porttia, jolla tämä osoite on. Rekisterien bittisyys tarkoittaa sitä, montako bittiä rekisteri käsittää. 8-bittisessä rekisterissä on 8 bittiä eli yksi tavu. Bittien määrä kuvaa erottelutarkkuutta tai sitä, miten suuri luku rekisteriin mahtuu. 8 bittiin mahtuu 2^8=256 eli 8-bittisellä rekisterillä voidaan määrittää jokin asia 256. osan tarkkuudella.

Äänestä

RAM (Random access memory = vapaasti haettava muisti, keskusmusti. tavallisesti 128-512 Mt (Megatavua =miljoona tavua (tavu (byte) on 8 bitti))). Kun haet tietoa RAMista sinun on kerrottava mistä kohdasta se haetaan: ensimmäisen tavun osoite on 1, toisen 2 ja viimeisen ehkä 512 000 000 (tavallisesti osoiteet ilmaistaan oktaalisesti käyttäen merkit 0-F numeroiden 0-9 sijasta). Jos avaat tietokoneesi näet RAM-mistin ns DIMM muistimoduleina, pienet piirilevyt (usein vinossa) joissa on 8 kpl mikrosirua. DIMM-moduulien lukumäärä on aina parillinen 2-4kpl.

Porttiosoite on helpointa ymmärtää jos ajattelee taloa: talolla(tietokoneellasi) on katuosoite (internetosoite, URL) mutta samassa talossa on monta ovea (portteja). Nämä portit vievät eri paikkoihin, printteriin, modeemiin jne. Itse asiassa portti on vähän abstaktisempi käsite: niitä voi olla 65 000 ja monta porttia voi osoittaa samaan fyysiseen ulos/sisäänmenoon. Tässä vaiheessa riittää kuin ajattelet porttiosoitteita ovinumeroina.

Init-arvo tarkoitaa alkuarvoa, eli se arvo jollakin muistipaikalla(RAM) tai rekisterillä(CPU=keskusyksikkö=suoritin=prosessori) on ennen kuin sinne on kirjoitettu jotain muuta. Tavallisesti oletetaan että se on nolla, mutta näin ei aina ole asian laita.

Rekisterit sijaistevat fyysisesti keskusyksikössä ja niitä on tavallisesti 8-16 kpl. Puolet on datarekistereitä ja puolet on datarekistereitä. Niiden tehtävä on toimia nopeana välivarastona laskennassa. Tiedon hakeminen rekisteristä on paljon nopeampaa kuin sen hakeminen RAMista. Rekisterin bittisyys tarkoittaa sen kokoa: se osoittaa miten monta tavua (byte=8 bittiä) siihen mahtuu, eli se on aina 8-kerrannainen. Pienet mikroprosessorit (kahvinkeitin tai pesukone) käyttävät 8 bittisiä rekistereitä (1 tavu) kun uudenaikaisemmat PC:t käyttävät 64 bittisiä rekistereitä (8 tavua). Data ja osoiterekisterien lisäksi prosessori sisältää muutamia erikosrekisteriä, tärkeimmät ovat pinoosoitin (stack pointer, SP) ja käskylaskuri (program counter, PC). Kun mainoksissa lukee "64 bittinen suoritin" tarkoitetaan nimenomaan rekisterien bittisyyttä.

Pino(Stack) ja keko?(en muista suomenkielistä nimeä, eng. heap) sijaitsevat molemmat RAM-muistissa. Niillä ei ole mitään "fyysistä" olemusta, ne ovat ainoastaan osia RAM-muistista. Heap alkaa RAMin alkupäästä ja sitä käytetään pysyvän tiedon tallentamiseen (esim ohjelmakoodi sijaitsee täällä, samoin data esim taulukot mitä ohjelmasi varaa itselleen). Stack alkaa RAMin loppupäästä ja se kasvaa alespäin. Se käytetään väliaikaistallennukseen (kun esim ohjelmasi kutsuu jotai aliohjelmaa call sub(a,b,c) niin kutsuparametrit (tässä tapauksessa a,b,c) siirretään pinoon josta keskusyksikkö niitä hakee.

Prosessoreita on kuitenkin monenmerkkisiä (Intel, Motorola..) ja tyyppisiä (CISC, RISC..) ja vastaukseni on täten hyvin pinnallinen ja puutteelinen. Yritin ainoastaan selittää "peruskäsitteet"

Äänestä

Moi

En ole kirjaa nähnyt, mutta nimestä päätellen en kyllä suositelisi aloittamaan ohjelmointiin tutustumista sen avulla. Jos haluaa oppia ohjelmoimaan niin kannataa ottaa netistä jokin C käännin ja opetella sillä ohjelmoimaan omaa konetta (Ihan perusteet kuten "Hei mailma" tulostus ruudulle). Netistä löytyy pilvin pimein C:n alkeis kurseja. Tämän jälkeen kun C:n perusteet on hallussa on huomattavasti helpompi lähteä rauta tasoa tutkimaan.

Äänestä
  • Jos on hyvä mikrokontrolleri-HW ja ohjelmointi, flässäys ym-työkalut siihen, niin on ihan mielekäs tapa aloittaa "pohjalta". Monet väärinkäsitykset jäävät syntymättä ja asioihin tulee oikea perspektiivi. Ledien vilkuttelu tai moottorin ohjaus on ainakin alussa mielestäni havainnollisempaa kuin "hello word". Minä aloitin naputtelemalla heksakoodia 8085:lle (no sitä ennen basicciä minikoneella koulussa), sitten ammattimaisemmin PLM-kielellä automaatiosoftaa hissi- ja nosturihommissa. Esim Lego-robottien ohjelmointi nykyään on ihan ok tapa tutustua ohjelmointiin.

    Äänestä

  • UPDATE_6997029 kirjoitti:

    Jos on hyvä mikrokontrolleri-HW ja ohjelmointi, flässäys ym-työkalut siihen, niin on ihan mielekäs tapa aloittaa "pohjalta". Monet väärinkäsitykset jäävät syntymättä ja asioihin tulee oikea perspektiivi. Ledien vilkuttelu tai moottorin ohjaus on ainakin alussa mielestäni havainnollisempaa kuin "hello word". Minä aloitin naputtelemalla heksakoodia 8085:lle (no sitä ennen basicciä minikoneella koulussa), sitten ammattimaisemmin PLM-kielellä automaatiosoftaa hissi- ja nosturihommissa. Esim Lego-robottien ohjelmointi nykyään on ihan ok tapa tutustua ohjelmointiin.

    Joo onhan se, mutta enpä tiedä onko C:n opiskelu mikro-ohjaimen kanssa hyvä jos ei viellä ole kokemusta alemman tason kielestä.

    Äänestä

  • ... kirjoitti:

    Joo onhan se, mutta enpä tiedä onko C:n opiskelu mikro-ohjaimen kanssa hyvä jos ei viellä ole kokemusta alemman tason kielestä.

    Tarkoitatko
    1. Ennen C-ohjelmointia pitäisi tutustua johonkin korkeamman tason kieleen? Miksi? Sinänsä OK, mutta ei välttämätöntä. On tietysti hyvä ajatus opetella olioajattelu ensin("C pilaa lasten aivot (vanha vitsi)). Jos ei vuosikymmentä puuhastele vain C:n kanssa, niin kyllä olioajattelun oppii hyvin heti perään C-puuhastelun jälkeen. Se antaa hieman perspektiiviä, eteenkin HW:n läheinen ohjelmointi.

    vai

    2. Pitäisi tutustua johonkin C:tä alemman tason ohjelmointiin? Ei kai. C on alhaimman tason ohjelmointikieli. Konekielisestä ohjelmoinnista ei kannata aloittaa. Ennen sitä tapahtui.

    Äänestä

  • UPDATE_6997029 kirjoitti:

    Tarkoitatko
    1. Ennen C-ohjelmointia pitäisi tutustua johonkin korkeamman tason kieleen? Miksi? Sinänsä OK, mutta ei välttämätöntä. On tietysti hyvä ajatus opetella olioajattelu ensin("C pilaa lasten aivot (vanha vitsi)). Jos ei vuosikymmentä puuhastele vain C:n kanssa, niin kyllä olioajattelun oppii hyvin heti perään C-puuhastelun jälkeen. Se antaa hieman perspektiiviä, eteenkin HW:n läheinen ohjelmointi.

    vai

    2. Pitäisi tutustua johonkin C:tä alemman tason ohjelmointiin? Ei kai. C on alhaimman tason ohjelmointikieli. Konekielisestä ohjelmoinnista ei kannata aloittaa. Ennen sitä tapahtui.

    Enpä oikein itsekkään tiedä enää mitä yritän/yritin sanoa :-)

    Yritän kai sanoa että mielestäni paras opiskelu väline C-kielen perusteiden opiskeluun on oma tietokone eikä erillinen prosessori kortti (Menee enemmän prosessorin opiskeluksi kuin varsinaisen C kielen).

    Edellisessä viestissä koitin sanoa että jos C:n perusteita lähtee opiskelemaan mikro-ohjaimen taikka muun prosessori kortin kanssa niin olisi hyvä omata edes jonkinlainen pohja/tuntemus alemman tason kielen (Assemblerin) toiminnasta (Saa edes LED:in syttymään). Ei se tietenkään mikään pakko ole mutta auttaa mielestäni hahmottamaan C kieltä paremmin (Tulee jonkinlainen käsitys siitä että mitkä toiminnot kenteis toimivat muissakin ympäristöissä).

    Äänestä

  • Nimetön kirjoitti:

    Enpä oikein itsekkään tiedä enää mitä yritän/yritin sanoa :-)

    Yritän kai sanoa että mielestäni paras opiskelu väline C-kielen perusteiden opiskeluun on oma tietokone eikä erillinen prosessori kortti (Menee enemmän prosessorin opiskeluksi kuin varsinaisen C kielen).

    Edellisessä viestissä koitin sanoa että jos C:n perusteita lähtee opiskelemaan mikro-ohjaimen taikka muun prosessori kortin kanssa niin olisi hyvä omata edes jonkinlainen pohja/tuntemus alemman tason kielen (Assemblerin) toiminnasta (Saa edes LED:in syttymään). Ei se tietenkään mikään pakko ole mutta auttaa mielestäni hahmottamaan C kieltä paremmin (Tulee jonkinlainen käsitys siitä että mitkä toiminnot kenteis toimivat muissakin ympäristöissä).

    >"paras opiskelu väline C-kielen perusteiden opiskeluun on oma tietokone eikä erillinen prosessori kortti (Menee enemmän prosessorin opiskeluksi kuin varsinaisen C kielen). "

    Näin useimmiten on, jos tavoittena on "vain" opiskella C-kieltä. Mutta jos C:n opiskelu on osa laajempaa tavoitetta, johon sisältyy tietokoneen toiminnan syvällisempi ymmärtäminen ja ehkä jatkossa esim ajureiden ohjelmointi, niin embedded-ohjelmointi on ihan hyvä tapa aloittaa, hankkia ymmärrykselleen kunnon perusta. Esim. keskeytyspalveluiden ohjelmointi voi opettaa paljon. On myös täysin mahdollista väsätä itse "multi threading pienoiskäyttöjärjestelmä", kunhan muut asiat ovat hanskassa. Tällainen on todella hyödyllistä opiskelua, jota ei myöhemmin kadu. Assemblyohjelmointia ei tarvitse paljon käyttää. Sitä tarvitaan vaan ihan pieniin tilkkeisiin silloin tällöin. Siitä kannattaisi pidättäytyä ellei ole pakko.

    Äänestä

  • UPDATE_6997029 kirjoitti:

    >"paras opiskelu väline C-kielen perusteiden opiskeluun on oma tietokone eikä erillinen prosessori kortti (Menee enemmän prosessorin opiskeluksi kuin varsinaisen C kielen). "

    Näin useimmiten on, jos tavoittena on "vain" opiskella C-kieltä. Mutta jos C:n opiskelu on osa laajempaa tavoitetta, johon sisältyy tietokoneen toiminnan syvällisempi ymmärtäminen ja ehkä jatkossa esim ajureiden ohjelmointi, niin embedded-ohjelmointi on ihan hyvä tapa aloittaa, hankkia ymmärrykselleen kunnon perusta. Esim. keskeytyspalveluiden ohjelmointi voi opettaa paljon. On myös täysin mahdollista väsätä itse "multi threading pienoiskäyttöjärjestelmä", kunhan muut asiat ovat hanskassa. Tällainen on todella hyödyllistä opiskelua, jota ei myöhemmin kadu. Assemblyohjelmointia ei tarvitse paljon käyttää. Sitä tarvitaan vaan ihan pieniin tilkkeisiin silloin tällöin. Siitä kannattaisi pidättäytyä ellei ole pakko.

    Jos pää kestää niin antaa palaa. Jos ei niin back to (Q)Basics.

    Äänestä

Kommentoi aloitusta


B-nikkari kirjoitti:

Olen vasta tutustumassa ohjelmointiin lähemmin ja olen viime aikoina lueskellut hiljakseen (todella niin) Vahteran kirjaa "Mikro-ohjaimen ohjelmointi C-kielellä". Nyt olen pino-osoittimissa, mistä kysymyksiä:

Mikä oikeastaan on tuo sivulla 218 mainittu "porttiosoite" ja "RAM-osoite"? Edelleen sivulla olevan taulukon käsite "Init-arvo" on täyttä hepreaa...

Mitä tarkoittaa rekisterin "bittisyys"? Siis kun tuossa puhutaan 8 ja 16-bittisistä rekistereistä.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu