Mitä tarkoittaa ohjelmakoodissa. Tarvitsetko todella lähdekoodia? Ei-suoritettava lähdekoodi

Joka ihminen voi lukea. Yleistetyssä mielessä - mikä tahansa syöttötieto kääntäjälle. Lähdekoodi on käännetty kielelle suoritettava koodi kokonaan ennen ohjelman suorittamista kääntäjällä tai voidaan suorittaa välittömästi tulkin avulla.

Tietosanakirja YouTube

    1 / 3

    Tiedenäyttely. Numero 33. Tieteelliset elokuvat 2

    Ohjelmoinnin perusteet: Lähdekoodi

    Vastaukset kysymykseen 1: Lähdekoodi

    Tekstitykset

Tarkoitus

Lähdekoodia käytetään joko objektikoodin tuottamiseen tai sen suorittaa tulkki. Muutoksia ei koskaan tehdä objektikoodiin, vain lähdekoodiin, ja sitten muunnetaan takaisin objektikoodiksi.

Toinen lähdekoodin tärkeä tarkoitus on ohjelman kuvaus. Ohjelman tekstin perusteella voit rekonstruoida sen käyttäytymisen logiikan. Kommentteja käytetään lähdekoodin ymmärtämisen helpottamiseksi. On myös työkaluja, joiden avulla voit saada automaattisesti lähdekoodidokumentaation - ns. dokumentaatiogeneraattorit.

Lisäksi lähdekoodilla on monia muita käyttötarkoituksia. Sitä voidaan käyttää opetusvälineenä; Aloitteleville ohjelmoijille saattaa olla hyödyllistä tutkia olemassa olevaa lähdekoodia ohjelmointitekniikoiden ja -menetelmien oppimiseksi. Sitä käytetään myös viestintävälineenä kokeneiden ohjelmoijien välillä sen tiiviin ja yksiselitteisen luonteen vuoksi. Jakaminen Kehittäjät mainitsevat usein koodinhallinnan edistävänä tekijänä ohjelmointikokemuksen parantamisessa.

Ohjelmoijat siirtävät usein lähdekoodia (moduuleissa sellaisenaan tai mukautettuina) projektista toiseen, mitä kutsutaan koodin uudelleenkäytöksi.

Lähdekoodi on kriittinen komponentti ohjelmistojen siirtämisessä muille alustoille. Ilman minkään ohjelmiston lähdekoodia siirtäminen on joko liian vaikeaa tai täysin mahdotonta.

Organisaatio

Ohjelmiston jonkin osan (moduulin, komponentin) lähdekoodi voi koostua yhdestä tai useammasta tiedostosta. Ohjelmakoodia ei välttämättä kirjoiteta vain yhdellä ohjelmointikielellä. Esimerkiksi usein C-kielellä kirjoitetut ohjelmat sisältävät asennuskielikoodin lisäyksiä optimointisyistä. Myös tilanteet ovat mahdollisia, kun ohjelman jotkin komponentit tai osat on kirjoitettu sisään eri kielillä, kootaan sitten yhdeksi suoritettavaksi tekniikalla, joka tunnetaan nimellä kirjaston linkitys ( kirjaston linkittäminen).

Monimutkaiset ohjelmistot edellyttävät kymmenien tai jopa satojen lähdekooditiedostojen rakentamista. Tällaisissa tapauksissa rakentamisen yksinkertaistamiseksi käytetään yleensä projektitiedostoja, jotka sisältävät kuvauksen lähdekooditiedostojen välisistä riippuvuuksista ja kuvaavat koontiprosessin. Nämä tiedostot voivat sisältää myös valintoja kääntäjälle ja suunnitteluympäristölle. Voidaan käyttää erilaisiin suunnitteluympäristöihin erilaisia ​​tiedostoja projektissa, ja joissakin ympäristöissä nämä tiedostot voivat olla sisällä tekstimuoto, joka soveltuu ohjelmoijan suoraan muokkaamiseen yleiskäyttöisiä tekstieditoreja käyttäen, muissa ympäristöissä tuetaan erityisiä muotoja ja tiedostot luodaan ja muokataan erikoistyökaluohjelmilla. Projektitiedostot sisältyvät yleensä termiin "lähdekoodi". Lähdekoodi viittaa usein resurssitiedostoihin, jotka sisältävät erilaisia ​​tietoja, kuten grafiikkaa, joita tarvitaan ohjelman rakentamiseen.

Jotta lähdekoodin kanssa työskentely olisi helpompaa ja ohjelmoijatiimi voisi tehdä yhteistyötä koodin parissa, käytetään versionhallintajärjestelmiä.

Laatu

Toisin kuin ihmisillä, tietokoneelle ei ole "hyvin kirjoitettua" tai "huonosti kirjoitettua" koodia. Mutta koodin kirjoitustapa voi vaikuttaa suuresti ohjelmiston ylläpitoprosessiin. Lähdekoodin laatu voidaan arvioida seuraavilla parametreilla:

  • koodin luettavuus (mukaan lukien läsnäolo

Nyt kun ymmärrät ohjelmoinnin käsitteen, tarkastelemme lähdekoodia – sen pääkomponentteja ja niiden käyttöä.

Tämä artikkeli on osa aloittelijoille tarkoitettua kehitystyötä käsittelevää artikkelisarjaa.

Osa 2 – Lähdekoodi

Monet ohjelmointikielet sisältävät monia kirjastoja. Niitä kutsutaan yleensä SDK(ohjelmistokehityssarjat). Ladattu yhdessä kääntäjän kanssa teknologioiden, sovellusten ja projektien luomista varten. Siellä on myös puitteet, joka on luotu helpottamaan projektin kehittämistä ja yhdistämään sen eri osia.

Joitakin valittuun kieleen sisältyviä tunnisteita ei voi käyttää käyttäjätunnisteina. Esimerkki on sana merkkijono Javassa. Tällaisia ​​tunnisteita yhdessä avainsanojen kanssa kutsutaan Varatut sanat. Ne ovat myös erityisiä.

Kaikki avainsanat on varattu. Lisäksi valitsemiesi sanojen tulee olla järkeviä niille, jotka näkevät ne ensimmäistä kertaa.

Perustietotyypit

Lähdekoodi on erityyppisten tietojen keskittymä: numeroita(3, 5,7, -100, 3,142) ja symboleja(M, A). Jotkut ohjelmointikielet jakavat numerot alatyyppeihin, kuten kokonaislukuja(kokonaislukuja).

Kokonaisluvut voivat olla ikoninen Ja allekirjoittamaton, iso ja pieni. Jälkimmäiset riippuvat itse asiassa tällaisille numeroille varatun muistin määrästä. On numeroita, joissa on desimaaliosia, joita yleensä kutsutaan kaksinkertainen Ja kellua, riippuen opiskelusta kielestä.

Siellä on myös boolen tyypit tiedot boolean tuo asia totta tai väärä.

Monimutkaiset tietotyypit

Yllä olevat tyypit tunnetaan alkeis-, primaari- tai perustyypeinä. Näistä perustietotyypeistä voimme luoda monimutkaisempia tietotyyppejä.

Array( Array) - Tämä yksinkertaisin muoto monimutkainen tyyppi. Rivi ( merkkijono) on joukko merkkejä. Emme voi tulla ilman näitä tietoja ja käytämme niitä usein koodia kirjoitettaessa.

Hahmojen yhdistelmä on linja. Analogiaa käyttääksemme merkkijono tietokoneeseen tarkoittaa, että sana kuuluu ihmiselle. Sana "lämpömittari" koostuu 9 merkistä - kutsumme sitä yksinkertaisesti merkkijonoksi. Merkkijonojen käsittely on laaja aihe, joka jokaisen aloittelevan ohjelmoijan tulisi oppia.

Monimutkaiset tietotyypit tulevat useimpien käytettyjen ohjelmointikielien mukana. On muitakin, kuten luokkajärjestelmiä. Tämä ilmiö tunnetaan myös nimellä olio-ohjelmointi ( OOP).

Muuttujat

Muuttujat ovat yksinkertaisesti muistipaikkojen nimiä. Joskus sinun on tallennettava lähdekoodisi tiedot paikkaan, josta voit käyttää niitä. Tämä on yleensä kääntäjän/tulkin varaama muistipaikka. Meidän on nimettävä nämä muistisolut, jotta voimme muistaa ne myöhemmin. Harkitse alla olevaa Python-koodinpätkää:

pet_name = "Hippo" tulosta lemmikin_nimi

pet_name = "virtahepo"

tulosta lemmikin_nimi

lemmikin nimi– esimerkki muuttujasta ja siihen tallennettujen tietojen tyyppi lemmikin nimi, on merkkijono, joka tekee muuttujasta merkkijonon. On myös numeroita. Siten muuttujat luokitellaan tietotyypin mukaan.

Vakiot

Vakiot ovat arvoja, jotka eivät muutu ohjelman elinkaaren aikana. Useimmiten heidän nimensä käyttävät isoja kirjaimia. Jotkut kielet tukevat pysyvien arvojen luomista, toiset eivät.

Olla olemassa vahvasti kirjoitetut ohjelmointikielet, jossa jokaisen muuttujan on oltava tiettyä tyyppiä. Kun olet valinnut tyypin, et voi enää muuttaa sitä. Java hyvä esimerkki sellainen japanin kieli.

Toiset eivät tarjoa näitä toimintoja. He ovat löyhästi kirjoitettu tai dynaamiset ohjelmointikielet. Esimerkki - Python.

Näin voit ilmoittaa vakioarvon JavaScriptissä:

JavaScript

const petName = "Hippo"

const petName = "Hippo"

Literaalit

Jokaisessa lähdekoodissa on tietotyyppejä, joita käytetään kaikkialla ja jotka muuttuvat vain, jos niitä muokataan. Tämä kirjaimellisia, jota ei pidä sekoittaa muuttujiin tai vakioihin. Mikään lähdekoodi ei tule toimeen ilman niitä. Literaalit voivat olla merkkijonoja, numeroita, desimaalilukuja tai mitä tahansa muuta tietotyyppiä.

Yllä olevassa katkelmassa sana "Hippo" on merkkijonokirjain. Se on aina "Hippo", kunnes muokkaat lähdekoodia. Kun opit koodaamaan, opit käsittelemään literaaleja tavalla, joka jättää suurimman osan koodista ennalleen.

Välimerkit/symbolit

Useimmissa kirjoitetuissa ohjelmissa löydät erilaisia ​​välimerkkejä valitsemastasi ohjelmointikielestä riippuen. Esimerkiksi Java käyttää enemmän välimerkkejä kuin Python.

Perusmerkkejä ovat pilkku ( , ), puolipiste ( ; ), kaksoispiste ( : ), henkselit ({} ), tavalliset sulut ( () ), hakasulkeet(), lainausmerkit ( «» tai » ), pystypalkki ( | ), kauttaviiva ( \ ), piste ( . ), kysymysmerkki ( ? ), vaunut ( ^ ) ja prosenttiosuus ( % ).

Tervetuloa ohjelmoinnin maailmaan, jossa välimerkit ovat sinun parhaat ystävät. Huomaat pian, että koodissasi on aina paljon niitä.

Operaattorit

Todennäköisyys, että kirjoitat lähdekoodia jonkin toiminnon suorittamiseksi, on erittäin korkea. Kaikki käyttämämme ohjelmointikielet sisältävät paljon operaattoreita. Käytettyjen joukossa ovat lisäys ( + ), jako ( / ) kertolasku ( * ), vähennys ( ) ja suurempi kuin merkki ( > ).

Operaattorit luokitellaan yleensä seuraavasti:

  1. Tehtäväoperaattorit. Joskus niitä tulkitaan on yhtä suuri, mikä hätänä. Tasa-arvoa käytetään kahden arvon vertaamiseen. Mutta määritysoperaattori antaa arvon esimerkiksi muuttujalle pet_name = 'Hippo'
  2. Aritmeettiset operaattorit. Koostuu operaattoreista, jotka suorittavat aritmeettisia tehtäviä, kuten yhteen- ja vähennyslaskua. Jotkut ohjelmointikielet tarjoavat aritmeettiset operaattorit, kun muilla ei ehkä ole niitä arsenaalissaan. Esimerkiksi moduuli/jäännös-operaattori ( % ) palauttaa loput divisioonan toiminnoista.
  3. Relaatiooperaattorit. Käytetään arvojen vertailuun. Niitä ovat suurempi kuin, pienempi kuin, yhtä suuri kuin, ei yhtä suuri kuin. Niiden esitys riippuu myös siitä, mitä ohjelmointikieltä opit. Joillekin PL:lle se ei ole sama - se on <> , muille - != tai !== .
  4. Loogiset operaattorit. Käytetään työhön loogisia operaatioita. Yleisesti käytetyt loogiset operaattorit ovat Ja, tai, Ei. Jotkut kielet edustavat näitä operaattoreita erikoismerkeinä. Esimerkiksi, && edustamaan loogista Ja, || - Sillä tai, Ja ! - Sillä Ei. Loogisia arvoja on tapana arvioida Boolen arvoilla totta tai väärä.

Kommentit

Dokumentaatio tulee olemaan tärkeä näkökohta ohjelmointitoimintaa. Näin selität koodisi muille ohjelmoijille. Tämä tehdään käyttämällä kommentteja, jotka on lisätty erilaisia ​​osia koodi. Kommenttien avulla voit ohjata muita ohjelmoijia kirjallisen ohjelman läpi.

Kääntäjä jättää huomioimatta koodirivit, jotka ovat kommentteja.

Kommenttien ilmoitus on erilainen eri kieliä. Esimerkiksi, # käytetään kommenttien kirjoittamiseen Pythonissa.

Tässä on esimerkki kommentista Pythonissa:

# ohjelmafragmentti Fibonaccin laskemiseen N luvusta

Java

// rekursiivinen toteutus Factorial import java.util.Scanner; class RecursiveFactorial ( julkinen staattinen void main(String args) ( Skanneri input=new Scanner(System.in); System.out.print("Etsi tekijä: "); int num=input.nextInt(); System.out .println("Factoriaal "+num+" = "+fact(num) ) staattinen pitkä fakta(int n) ( if(n)< 2) return 1; return n * fact(n-1); } }

Jotta ohjelma voisi suorittaa sille määrätyt toiminnot, esimerkiksi laskea, näyttää tuloksen, vastata käyttäjän toimiin, esimerkiksi painaa painikkeita, valita rivejä luettelosta, on välttämätöntä ohjelmakoodi.

Ohjelman koodi on joukko ohjelmointikielen sanoja ja symboleja.

Aakkoset - tämä on täydellinen sarja kirjaimia, numeroita ja symboleja, jotka on otettu kielellä osoittamaan tietoja ja niihin liittyviä toimia.

Kielen aakkoset Visual Basic sisältää seuraavan merkistön:

Latinalaisen aakkoston isot (A - Z) ja pienet (a - z) kirjaimet;

Numerot 0-9;

Aritmeettisten operaatioiden merkit (nousevassa tärkeysjärjestyksessä): +, -, *, /, |, ^;

Relaatiooperaatioiden merkit: =,<, >.

Välimerkit ja erottimet: ,  . : ; ();

Kielen aakkoset sisältävät myös varattu sanoja, joita ei voi käyttää nimet muuttujia tai menettelyjä. Esimerkkejä varatuista sanoista: Dim, Sub, Integer jne. Oletuksena sinistä fonttia käytetään korostamaan avainsanoja Visual Basic -koodin muokkausikkunassa.

Sanat ja symbolit on kirjoitettava tiukasti kielen sääntöjen mukaisesti, ilman kirjoitus- ja välimerkkivirheitä. Se on tarkka kirjoitus, jonka avulla tietokone voi yksiselitteisesti ymmärtää ja suorittaa ohjelman.

Koodi-ikkuna

Ohjelmakoodi kirjoitetaan koodiikkunaan. Jokaisessa lomakkeessa on tällainen ikkuna.

Avaa koodiikkuna:

1 tapa -ikkunassa Project Explorer klikkaus oikealla painikkeella vaaditussa muodossa ja valitse avautuvasta valikosta Näytä koodi.

Huomautus: Koodiikkunaa ei saa liittää lomakkeeseen. Erillinen koodiikkuna kutsutaan Moduuli. Project Explorer -ikkunan moduulit on ryhmitelty ryhmään Moduulit. Jos haluat avata ikkunan moduulikoodilla, sinun on ikkunassa Project Explorer kaksoisnapsauta moduulin nimeä.

Menetelmä 2 - kaksoisnapsauta lomakkeen ohjauselementtiä tai itse lomaketta lomakeikkunassa.

Huomautus: tämä ei ainoastaan ​​avaa koodiikkunaa, vaan myös luo tapahtumankäsittelymenettelyn (katso alla).

Koodiikkunan rakenne:

Riisi. 7. Ohjelmakoodi-ikkuna.

    Luettelo säätimistä

    Luettelo valvontatapahtumista

    Menettely (koodi)

Menettelyt

Koska kun jääkaappi avataan, lamppu syttyy ja kun hana avataan, vesi virtaa ulos, voimme sanoa, että kun jääkaapin avaaminen tapahtuu, suoritetaan yksi toimenpide ja hanan avaaminen aiheuttaa toisen menettelyä. Vastaavasti ohjelmakoodi koostuu erillisistä toimenpiteistä, joista jokainen suorittaa omat erityistoimensa, esimerkiksi yksi toimenpide sytyttää lampun, toinen sytyttää (pumppaa) vettä.

Visual Basic - prosessiohjelmointikieli. Tämä tarkoittaa, että voit luoda siihen koodilohkoja, joihin voidaan sitten viitata nimellä. Kun koodilohkolla on nimi, se voi olla nimeltään ja valmis. Se on kuin ohjelma ohjelman sisällä. Pienet ohjelmat "elämässä". suuria ohjelmia, kutsutaan toimii jos ne palauttavat jonkin verran arvoa ja aliohjelmat, jos ne eivät palauta arvoja.

Rutiinit ja toiminnot tekevät ohjelmoinnista helpompaa ja nopeampaa ja tuottamasi koodin luotettavamman. Omien rutiinien ja toimintojen luominen on ensimmäinen askel kehitykseen kapseloituna ja uudelleenkäytettävä koodi. Kapselointi tarkoittaa objektin ominaisuuksien ja menetelmien toteutuksen piilottamista sen ulkoisen rajapinnan taakse.

Menettely (alirutiini) on erillinen ohjelmakoodin fragmentti, jonka avulla pieni tehtävä yleensä ratkaistaan, se on loogisesti rakennettu pieni ohjelmalohko, johon koko ohjelma on jaettu.

Jos proseduuri voidaan suorittaa vain tietyn ohjelmalohkon sisällä (esimerkiksi vain tässä muodossa), eikä sitä voida kutsua toisesta ohjelmalohkosta, tällainen toiminto on paikallinen. Paikallinen menettely määritellään käyttämällä Private Sub -avainsanaa.

Jos proseduuria voidaan kutsua muista ohjelmalohkoista (esimerkiksi toisesta lomakkeesta), niin tällainen proseduuri on globaali. Yleinen proseduuri määritetään käyttämällä Public Sub -avainsanaa.

Oletusarvoisesti, jos ennen Sub-avainsanaa ei ole avainsana, tämä on globaali menettely.

Menettelyt ovat:

    Tapahtuman menettelytavat. Suoritetaan, kun tapahtuma tapahtuu ohjausobjektissa (tai lomakkeessa). Tapahtumaproseduuri liittyy aina johonkin objektiin. Voit kutsua objektin tapahtumaproseduurin kaksoisnapsauttamalla objektia hiiren vasemmalla painikkeella.

    Mielivaltaiset menettelyt. Se ei liity tapahtumiin, ja se voidaan kutsua mistä tahansa muusta menettelystä ja suorittaa milloin tahansa. Jos sama koodi esiintyy kaikissa muodoissa ohjelmassa ohjelmalohko, niin se voidaan kirjoittaa vain kerran ja yhteen paikkaan, globaalin yhteisohjelman muodossa. Yleisohjelman käynnistäminen ei liity objektiin ja tapahtumaan, vaan tapahtuu, kun siihen päästään muista ohjelmalohkoista. Yleisen menettelyn kutsuminen samasta lomakkeesta: ProcedureName (parametriluettelo). Yleisen proseduurin kutsuminen toisesta muodosta: ESINE. ProcedureName (parametriluettelo). Yleinen menettely voi olla sekä paikallinen yksityinen että globaali julkinen

Menettelyn rakenne

Menettely koostuu seuraavista osista:

    Menettelyn otsikko - merkitsee toimenpiteen alkua, sen tyyppiä, tarkoitusta (tapahtumaa).

Esimerkki menettelyn otsikosta, joka suoritetaan, kun painiketta nimeltä Komento1 napsautetaan.

    Sana Yksityinen tarkoittaa suljettua, eli menettely kuuluu vain tähän lomakkeeseen tai moduuliin, eikä sitä voi käyttää muissa säiliöissä (lomakkeet, moduulit). Jos tämä sana jätetään pois, menettely on avoin muille säiliöille.

    Sub- menettely.

Huomautus: Toimenpiteiden lisäksi on toimintoja. Funktiot eivät liity tapahtumiin ja voivat lisäksi palauttaa työnsä tuloksen (laskelmat).

    Ohjauselementti(tai lomakkeen nimi): Tämä määrittää ominaisuuteen tallennetun elementin tarkan nimen Nimi.

    Tapahtuma- tapahtuman nimi. Tässä muutamia tapahtumia:

    Napsauta - hiiren napsautus;

    DblClick - tuplaklikkaus hiiri;

    KeyPress - näppäinpainallus;

    Unload - lomakkeen purkaminen (suljettaessa lomaketta, lopettaessa ohjelman);

    Aktivoi - lomakkeen aktivointi (kun napsautat lomaketta ja sen otsikko on korostettu);

    Poista käytöstä - deaktivoi lomake (klikkaamalla toista lomaketta).

    Alusta - luotaessa muoto-tyyppistä objektia.

    Muuta kokoa - kun muutat lomakkeen kokoa

    Lopeta - lomakkeen poiston hetkellä

    Argumentit- tämä on alustava tieto, joka välitetään käsittelyyn.

Mukautetuilla menettelyillä on seuraava otsikko:

Menettelyn nimi täytyy olla ainutlaatuinen, täytyy alkaa kirjaimella, eikä se saa sisältää välilyöntejä tai muita merkkejä kuin alaviivoja. Proseduuri kutsutaan nimellä, kun se on suoritettava.

    Menettelyn loppu - lopettaa proseduurin ohjelmakoodin: End Sub

Huomautus: toiminnoille: Lopeta toiminto

    Menettelyn runko - Nämä ovat rivit otsikon ja lopun välillä. Niiden lukumäärä on rajoittamaton. Rivit sisältävät ohjeita, jotka on suoritettava, kun proseduuria kutsutaan (tapahtuma tapahtuu).

Aliohjelma (Sub) - on proseduuri, joka suorittaa ohjelmakoodin lohkossaan eikä palauta arvoa. Yksinkertaisen aliohjelman syntaksi on:

( Yksityinen | Julkinen ) Sub SubMain ()

..koodiriviä Loppu Sub

Aliohjelman laajuus;

Ali - proseduurityyppi (eli aliohjelma);

subMain aliohjelmalle annettu nimi;

End Sub - aliohjelman koodilohkon loppu.

Menettelyn luominen

Voit luoda menettelyn seuraavasti:

    1 tapa - kaksoisnapsauta haluamaasi ohjausobjektia tai lomaketta. Koodiikkuna avautuu, ja siihen ilmestyvät toimenpiteen otsikko ja loppu. Jos toinen tapahtuma tarvitaan, se valitaan koodiikkunan oikeassa yläkulmassa olevasta luettelosta.

    Menetelmä 2 - Avaa koodiikkuna, valitse Työkalut → Lisää menettely → määritä toimenpiteen nimi ja parametrit → Ok.

    3 tapaa - avaa koodiikkuna ja syötä tarvittavat rivit näppäimistöltä.

Tuloksena pitäisi olla:

Yksityinen alakomento1_Click()

Toteutusmenettelyt

    Jotta tapahtumaproseduuri voidaan suorittaa, tapahtuman on tapahduttava.

    Jos haluat suorittaa mielivaltaisen toimenpiteen, määritä tämän toiminnon nimi toisen toimintosarjan rungossa.

Yksityinen alakomento1_Click()

Tässä, kun napsautat Komento1-painiketta, Click-tapahtuma tapahtuu ja Kvadrat-proseduuri kutsutaan ja suoritetaan.

Toimenpidekoodi suoritetaan rivi riviltä ja ylhäältä alas.

Toiminto (Toiminto) - se on proseduuri, joka suorittaa koodinsa rivejä ja palauttaa jonkin arvon. Yksinkertaisen funktion syntaksi on:

Toiminto FunctionName() Tietotyyppinä

... rivitkoodi

FunctionName = PaluuarvoLopeta toiminto

Toiminnan laajuus;

Funktio on Visual Basic -avainsana, joka osoittaa, että se on funktio;

FunctionName () - toiminnolle annettu nimi;

AS on Visual Basic -avainsana, joka edeltää tietotyypin määrittämistä;

Tietotyyppi palautusarvon tietotyyppi;

ReturnValue arvo, joka pitäisi antaa funktion nimelle (tämä on erittäin tärkeä kohta!);

End Function - tämän koodilohkon loppu.

On olemassa lukemattomia tapoja kirjoittaa huonoa koodia. Onneksi noustaksesi laatukoodin tasolle, sinun tarvitsee vain noudattaa 15 sääntöä. Niiden noudattaminen ei tee sinusta mestaria, mutta sen avulla voit jäljitellä sitä vakuuttavasti.

Sääntö 1: Noudata koodausstandardeja.

Jokaisella ohjelmointikielellä on oma koodin muotoilustandardi, joka kertoo kuinka sisennetään, mihin välilyöntejä ja sulkuja laitetaan, kuinka objektit nimetään, miten koodia kommentoida jne.

Esimerkiksi tässä koodinpätkässä on standardin mukaan 12 virhettä:

For(i=0 ;i

Tutki standardia huolellisesti, opi perusteet ulkoa, noudata sääntöjä kuten käskyjä, ja ohjelmasi ovat parempia kuin useimmat korkeakoulututkinnon suorittaneiden kirjoittamat.

Monet organisaatiot räätälöivät standardit omien tarpeidensa mukaan. Esimerkiksi Google on kehittänyt standardeja yli 12 ohjelmointikielelle. Ne ovat hyvin harkittuja, joten tarkista ne, jos tarvitset apua ohjelmoinnissa Googlen kanssa. Standardit sisältävät jopa muokkausasetukset, jotka auttavat sinua seuraamaan tyyliä, ja erikoistyökaluja, joilla varmistetaan, että koodisi vastaa tätä tyyliä. Käytä niitä.

Sääntö 2: Anna kuvaavat nimet.

Hitaiden, kömpeleiden teletype-koneiden rajoittamana ohjelmoijat muinoin käyttivät muuttujien ja toimintojen nimien sopimuksia säästääkseen aikaa, näppäinpainalluksia, mustetta ja paperia. Tämä kulttuuri on läsnä joissakin yhteisöissä säilymisen vuoksi taaksepäin yhteensopivuus. Otetaan esimerkiksi kielen rikkova C-funktio wcscspn (leveä merkkijonokomplementtiväli). Mutta tämä lähestymistapa ei sovellu nykyaikaiseen koodiin.

Käytä pitkiä, kuvaavia nimiä, kuten komplementtiSpanLength, jotta sinä ja kollegasi ymmärtävät koodisi tulevaisuudessa. Poikkeuksia ovat muutamia tärkeitä muuttujia, joita käytetään menetelmän rungossa, kuten silmukkaiteraattorit, parametrit, väliaikaiset arvot tai suoritustulokset.

On paljon tärkeämpää, että ajattelet pitkään ja hartaasti ennen kuin nimeät jotain. Onko nimi oikea? Tarkoititko korkeinta hintaa parhaan hinnan sijasta? Onko nimi tarpeeksi tarkka, jotta sitä ei käytetä muissa yhteyksissä samankaltaisille objekteille? Eikö olisi parempi kutsua menetelmää getBestPrice eikä getBest? Sopiiko se paremmin kuin muut samanlaiset nimet? Jos sinulla on ReadEventLog-metodi, sinun ei pitäisi kutsua toista NetErrorLogRead-menetelmää. Jos nimeät funktion, kuvaako nimi palautusarvoa?

Lopuksi muutama yksinkertaiset säännöt nimeäminen. Luokkien ja tyyppien nimien on oltava substantiivit. Metodin nimessä on oltava verbi. Jos menetelmä määrittää, onko jokin objektia koskeva tieto tosi vai epätosi, sen nimen tulee alkaa "on". Objektien ominaisuuksia palauttavien menetelmien on aloitettava sanalla "get" ja menetelmien, jotka asettavat ominaisuusarvoja, on aloitettava "set".

Sääntö 3: Kommentti ja asiakirja.

Aloita jokainen menetelmä ja toimintosarja kommentilla, jossa kerrotaan, mitä menetelmä tai menettely tekee, parametrit, palautusarvo ja mahdollisia virheitä ja poikkeuksia. Kuvaa kommenteissa kunkin tiedoston ja luokan rooli, kunkin luokkakentän sisältö ja monimutkaisen koodin päävaiheet. Kirjoita kommentteja kehittäessäsi koodia. Jos luulet kirjoittavasi ne myöhemmin, petät itseäsi.

Varmista lisäksi, että sovelluksessasi tai kirjastossasi on käsikirja, jossa selitetään, mitä koodisi tekee, määritellään sen riippuvuudet ja annetaan ohjeita sen rakentamiseen, testaamiseen, asentamiseen ja käyttöön. Asiakirjan tulee olla lyhyt ja kätevä; yksinkertainen README-tiedosto riittää usein.

Sääntö 4. Älä toista itseäsi.

Älä koskaan kopioi ja liitä koodia. Eristä sen sijaan yhteinen osa menetelmäksi tai luokkaksi (tai makroksi, jos tarpeen) ja käytä sitä sopivien parametrien kanssa. Vältä käyttämästä samanlaisia ​​tietoja ja koodinpätkiä. Käytä myös seuraavia tekniikoita:

  • Luo API-viittauksia kommenteista Javadocin ja Doxygenin avulla.
  • Yksikkötestien automaattinen luominen huomautusten tai nimeämiskäytäntöjen perusteella.
  • Luo PDF- ja HTML-tiedostoja yhdestä tunnistetusta lähteestä.
  • Luokkarakenteen hakeminen tietokannasta (tai päinvastoin).

Sääntö 5: Tarkista virheet ja vastaa niihin.

Menetelmät voivat palauttaa virheoireita tai tehdä poikkeuksia. Käsittele ne. Älä luota siihen, että levy ei koskaan tule täyteen, määritystiedostosi on aina siellä, sovelluksesi toimii kaikkien kanssa tarvittavat oikeudet, muistinvarauspyynnöt suoritetaan aina onnistuneesti tai että yhteys ei koskaan epäonnistu. Kyllä, hyvää virheenkäsittelyä on vaikea kirjoittaa, ja se tekee koodista pidemmän ja vaikeamman lukea. Mutta virheiden huomiotta jättäminen lakaisee ongelman maton alle, josta hyväuskoinen käyttäjä löytää sen jonain päivänä.

Sääntö 6: Jaa koodisi lyhyisiin, erillisiin osiin.

Jokaisen menetelmän, funktion tai koodilohkon tulee mahtua tavalliseen näyttöikkunaan (25-50 riviä). Jos siitä tulee pidempi, jaa lyhyempiin osiin. Jopa menetelmän sisällä, jaa pitkä koodi lohkoihin, joiden olemuksen voit kuvata kommentissa jokaisen lohkon alussa.

Lisäksi jokaisen luokan, moduulin, tiedoston tai prosessin on suoritettava tietynlainen tehtävä. Jos koodinpala suorittaa täysin erilaisia ​​tehtäviä, jaa se vastaavasti.

Sääntö 7. Käytä kehyssovellusliittymiä ja kolmannen osapuolen kirjastoja.

Tutustu kehyksesi API:n kautta saatavilla oleviin ominaisuuksiin. ja myös mitä kypsät kolmannen osapuolen kirjastot voivat tehdä. Jos järjestelmäpaketinhallinta tukee kirjastoja, ne ovat todennäköisesti hyvä valinta. Käytä koodia, joka estää halusta keksiä pyörää uudelleen (ja siinä tapauksessa hyödytöntä neliökoodia).

Sääntö 8: Älä suunnittele liikaa.

Suunnittele vain se, mikä on nyt relevanttia. Koodisi voidaan tehdä melko yleiseksi, jotta se tukee edelleen kehittäminen, mutta vain jos siitä ei tule liian monimutkaista. Älä luo parametroituja luokkia, tehtaita, syviä hierarkioita ja piilotettuja rajapintoja ratkaisemaan ongelmia, joita ei edes ole olemassa – et voi arvata, mitä huomenna tapahtuu. Toisaalta, kun koodin rakenne ei sovi tehtävään, älä epäröi refaktoroida sitä.

Sääntö 9: Ole johdonmukainen.

Tee samat asiat samalla tavalla. Jos kehität menetelmää, jonka toiminnallisuus on samanlainen kuin olemassa olevan menetelmän, käytä samanlaista nimeä, samanlaista parametrien järjestystä ja samanlaista runkorakennetta. Sama pätee luokkiin. Luo samanlaisia ​​kenttiä ja menetelmiä, anna niille samanlaiset käyttöliittymät ja yhdistä uudet nimet samankaltaisten luokkien olemassa oleviin nimiin.

Koodisi on noudatettava viitekehyksesi käytäntöjä. Esimerkiksi on hyvä käytäntö tehdä alueista puoliavoimia: suljettu (mukaan lukien) vasemmalla (alueen alussa) ja avoin (exclusive) oikealla (lopussa). Jos tiettyä tapausta varten ei ole sopimuksia, tee valinta ja pysy siinä fanaattisesti.

Sääntö 10: Vältä tietoturvaongelmia.

Nykyaikainen koodi toimii harvoin erillään. Sillä on välitön riski joutua hyökkäyksen kohteeksi. Niiden ei tarvitse tulla Internetistä; hyökkäys voi tapahtua sovelluksesi syöttötietojen kautta. Riippuen ohjelmointikielestäsi ja aihealue, saatat joutua huolehtimaan puskurin ylivuodosta, sivustojen välisestä komentosarjasta, SQL-lisäyksistä ja muista vastaavista ongelmista. Tutki näitä ongelmia ja vältä niitä koodissasi. Se ei ole vaikeaa.

Sääntö 11: Käytä tehokkaita tietorakenteita ja algoritmeja.

Yksinkertaista koodia on usein helpompi ylläpitää kuin samaa koodia, mutta sitä on muutettu tehokkuuden vuoksi. Onneksi voit yhdistää ylläpidettävyyden ja tehokkuuden käyttämällä kehyksesi tarjoamia tietorakenteita ja algoritmeja. Käytä karttaa, joukkoa, vektoria ja algoritmeja, jotka toimivat niiden kanssa. Tämä tekee koodistasi puhtaamman, nopeamman, skaalautuvamman ja tehokkaamman muistin. Jos esimerkiksi tallennat tuhat arvoa lajiteltuun joukkoon, leikkaustoiminto löytää yhteisiä elementtejä toisella sarjalla samalle määrälle operaatioita, ei miljoonalle vertailulle.

Sääntö 12. Käytä yksikkötestejä.

Nykyaikaisten ohjelmistojen monimutkaisuus tekee niiden asentamisesta kalliimpaa ja vaikeampaa testata. Tuottava lähestymistapa olisi liittää jokaiseen koodinpalaan testejä, jotka tarkistavat sen toiminnan oikeellisuuden. Tämä lähestymistapa yksinkertaistaa virheenkorjausta, koska sen avulla virheet voidaan havaita aikaisemmin. Yksikkötestaus on tarpeen, kun ohjelmoit dynaamisesti kirjoitetuilla kielillä, kuten Python ja JavaScript, koska ne havaitsevat virheet vain ajon aikana, kun taas staattisesti kirjoitetut kielet, kuten Java, C# ja C++, voivat saada osan niistä käännöksen aikana aika. Yksikkötestauksen avulla voit myös muuttaa koodisi luottavaisin mielin. XUnitilla voit helpottaa testien kirjoittamista ja automatisoida niiden suorittamista.

Sääntö 13: Pidä koodisi kannettavana.

Ellei sinulla ole erityistä syytä, älä käytä toimintoja, jotka ovat saatavilla vain tietyllä alustalla. Älä luota mihin tietyntyyppiset tiedoilla (kuten kokonaisluvuilla, osoittimilla ja aikaleimilla) on tietty pituus (esimerkiksi 32 bittiä), koska tämä parametri eroaa eri alustoilla. Pidä ohjelman viestit erillään koodista äläkä koodaa kulttuurikohtaisia ​​parametreja (kuten desimaalierottimia tai päivämäärämuotoja). Konventioita tarvitaan, jotta koodi voi toimia eri maat, joten tee lokalisoinnista mahdollisimman kivutonta.

Sääntö 14: Tee koodistasi koottava.

Yksinkertaisen komennon pitäisi koota koodisi muotoon, joka on valmis jakelua varten. Komennon pitäisi antaa sinun nopeasti rakentaa ja suorittaa tarvittavat testit. Tämän tavoitteen saavuttamiseksi käytä automaattisia rakennustyökaluja, kuten Make, Apache Maven tai Ant. Ihannetapauksessa sinun pitäisi asentaa integrointijärjestelmä, joka tarkistaa, rakentaa ja testaa koodisi aina, kun se muuttuu.

Sääntö 15: Aseta kaikki versionhallintaan.

Kaikkien elementtien - koodin, dokumentaation, työkalulähteiden, koontiskriptien, testitietojen - tulisi olla versionhallinnassa.

(Kehittäjän opas HCS08-perheen mikro-ohjaimille)

Esimerkissä 12.1 tarkastellaan koodia, jonka avulla voit kirjoittaa ja poistaa alkuperäisiä tietoja flash-muistista. Tällaiset toimenpiteet ovat välttämättömiä, jos laitteen käyttäjä tekee lisäasetuksia tälle laitteelle ja haluaa, että valitut asetukset säilyvät virran katkaisemisen jälkeen.

Aiemmin totesimme, että HCS08-perheen MCU-yksiköt eivät salli flash-muistitoimintojen pyyhkimistä ja ohjelmointia, vaan näiden tilojen ohjausohjelman suorittaminen myös flash-muistista. Muista kirjoittaa ensin poisto- ja ohjelmointitoiminnoista vastaava ohjelmakoodi uudelleen RAM-muistiin ja sitten suorittaa tämä koodi suorittamista varten. Poisto- ja ohjelmointiprosessin aikana flash-muistimoduuliin kohdistetaan korotettu jännite. Tämä ei kuitenkaan johda ohjelman häiriintymiseen, koska tietyllä hetkellä se suoritetaan RAM-muistista.

NXP on kehittänyt joukon kokoonpanokielisiä apuohjelmia, joiden avulla on helppo luoda mukautettua koodia flash-muistin ohjelmoimiseksi laitteen käyttöohjelman ohjaamana. Nämä apuohjelmat sijaitsevat tiedostossa doonstack.asm. Tämä tiedosto tulee sisällyttää projektiin, kuten kuvasta näkyy. 12.3.

Riisi. 12.3. Projektiikkuna, jossa mukana tiedosto doonstack.asm.

Tiedoston sisältö doonstack.asm esitetään alla. Annettu alkuperäinen teksti käytetystä ohjelmakoodista, joten kommentteja ei voida kääntää.


;* Tämä paperitavara on tarkoitettu toimimaan puitteena *
;* käyttäjäsovellus. Saat kattavamman ohjelman, joka *
;* esittelee tämän *
;* prosessori, katso esittelysovellukset *
;*, joka sijaitsee *:n esimerkkialihakemistossa
;* Metrowerks Codewarrior HC08-ohjelmahakemistoon *
;**************************************************************
; vientisymbolit
XDEF DoOnStack
XDEF FlashErase
XDEF FlashProg
; käytämme vienti "Entry" symbolina. Tämä antaa meille mahdollisuuden
; mainitse "Entry" joko linkerin .prm-tiedostossa
; tai myöhemmin C/C++:sta

; sisältävät johdannaiskohtaiset makrot
Sisällytä "MC9S08GB60.inc"

Kahdella seuraavalla rivillä ei saa olla kommentteja ja niille on määritettävä halutut arvot.

;mPageErase vastaa 40 dollaria
;mByteProg vastaa 20 dollaria
mFACCERR vastaa 10 dollaria
mFPVIOL vastaa 20 dollaria
mFCBEF vastaa 80 dollaria
; muuttuja/data-osio
MY_ZEROPAGE: SECTION LYHYT
; Lisää tähän tietosi määritelmä. Esittelyyn käytetään temp_bytea.
; temp_byte ds.b 1
; koodiosio
MyCode: SECTION
;**************************************************************
; tätä kokoonpanorutiinia kutsutaan C/C++-sovellukseksi
DoOnStack: pshx
pshh ;tallenna osoitin flash-muistiin
psha ;tallenna komento pinoon
ldhx #SpSubEnd ;piste viimeisessä tavussa pinoon siirtymiseksi;
SpMoveLoop: lda ,x ;lue flashistä
psha ;siirrä pinoon
aix #-1 ;seuraava siirrettävä tavu
cphx #SpSub-1 ;menneisyydessä?
bne SpMoveLoop ;silmukka koko pinoon
tsx ;osoita pinon alapuolelle
tpa ;siirrä CCR kohtaan A testausta varten
ja #$08 ;tarkista I-naamio
bne I_set ;ohita jos olen jo asettanut
sei ;block keskeyttää kun FLASH on varattu
lda SpSubSize+6,sp ;esilataa tiedot komentoa varten
cli ;ok poista I mask nyt
bra I_cont ;jatka pinon kohdistamisen purkamista
I_set: lda SpSubSize+6,sp ;esilataa tiedot komentoja varten
jsr ,x ;suorita pinon ali
I_cont: ais #SpSubSize+3 ;deallocate sub body + H:X + komento
;H:X salamaosoitin OK SpSubilta
lsla ;A=00 & Z=1, ellei PVIOL tai ACCERR
rts ;vilkkumaan DoOnStack-kutsussa
;**************************************************************
SpSub: ldhx LOW(SpSubSize+4),sp ;hae flash-osoite pinosta
sta 0,x ;kirjoita flashiin; salpa osoite ja tiedot
lda SpSubSize+3,sp ;hae flash-komento
sta FCMD ;kirjoita flash-komento
lda #mFCBEF ;mask käynnistää komennon
sta FSTAT ; rekisteröi komento
nop ;[p] haluavat min 4~ w-jaksosta r:ään
ChkDone: lda FSTAT ; joten FCCF on voimassa
lsla ;FCCF nyt MSB:ssä
bpl ChkDone ;silmukka, jos FCCF = 0
SpSubEnd: rts ;takaisin DoOnStackiin flashissä
SpSubSize: equ (*-SpSub)
;**************************************************************
FlashErase: psha ;säädä sp DoOnStack-merkinnälle

lda #mPageErase ;maskikuvio sivun poistokomennolle
bsr DoOnStack ;finish komento pinopohjaisesta aliarvosta
rts
;**************************************************************
FlashProg: psha ;tallenna sisääntulotiedot väliaikaisesti
lda #(mFPVIOL+mFACCERR) ;maski
sta FSTAT ;keskeytä kaikki komennot ja poista virheet
lda #mByteProg ;maskikuvio byte prog -komennossa
bsr DoOnStack ;suorita prog-koodi pinon RAM-muistista
ais #1 ;poistaa datasijainnin pinosta
rts
;**************************************************************

Myös C:n ohjelmakoodin tekstissä on oltava käsky #sisältää yhdistä tiedosto doonstack.h, jonka teksti on esitetty alla.


/* */
/* Projektin nimi: doonstack.h */
/* Viimeksi muokattu: 04/11/2004 */
/* Lähettäjä: r60817 */
/* */
/* */
/**********************************************************************/
/* */
/* Kuvaus: MC9S08GB60_FLASH_DOONSTACK - demo */
/* */
/* */
/* Dokumentaatio: MC9S08GB60/D Rev. 2.2 */
/* HCS08RMv1/D Rev. 1(4.8FLASH-sovellusesimerkit) */
/* */
/* Tämä ohjelmisto on luokiteltu tekniseksi malliohjelmistoksi. */
/* */
/**********************************************************************/
/* */
/* FREESCALE:n tässä asiassa tarjoamat palvelut suoritetaan SELLAISENAAN */
/* ja ilman takuuta. ASIAKAS säilyttää lopullisen päätöksen */
/* suhteessa lopputuotteen kokonaissuunnitteluun ja toimivuuteen. */
/* FRESCALE ei takaa eikä ole ASIAKAS vastuussa */
/* tämän projektin onnistumisesta. FRESCALE KIISTÄÄ KAIKKI */
/* TAKUUT, NIMENOMAISET, OLUETUT TAI LAKISÄÄTEISET MUKAAN MUKAAN MUKAAN MUTTA EI */
/* RAJOITETTU OLUETTU TAKUU MYYNTIKELPOISUUDESTA TAI SOVELTUVUUDESTA */
/* TOIMITETTUJEN LAITTEISTOJEN ERITYINEN TARKOITUS, OHJELMISTO TAI OHJELMISTO */
/* PROJEKTIIN FREESCALE- JA TAI MUKAAN TUOTTEELLA JOHTAVANA */
/* ILMAISPALVELUT . FREESCALE EI OLE MISSÄÄN TAPAUKSESSA VASTUUSSA */
/* TÄSTÄ SOPIMUKSESTA AIHEUTUVAT SATUNNAISET TAI VÄLILLISET VAHINGOT. */
/* */
/* ASIAKAS sitoutuu pitämään FRESCALEn vaarattomana kaikkia vastaan ​​*/
/* vaatii kenenkään vaatimuksia tai toimia vahingon vuoksi tai */
/* vahinko, joko kaupallinen, sopimusperusteinen tai mutkikas, kasvava */
/* suoraan tai välillisesti neuvon tai avun seurauksena */
/* toimitettu ASIAKKAALLE tuotteen, palvelun tai tavaran yhteydessä */
/* toimitetaan tämän sopimuksen mukaisesti. */
/* */
/**********************************************************************/
/*
- tämä tiedosto API välillä main.c ja doonstack.asm
*/
#ifndef _doonstack
#define_doonstack
#ifdef __cplusplus
extern "C" ( /* kokoonpanotoiminnoillamme on C-kutsukäytäntö */
#loppu Jos
void DoOnStack(void); /* prototyyppi DoOnStack-rutiinille */
void FlashErase(allekirjoittamaton merkki *); /* prototyyppi FlashErase-rutiinille */
/* Sivun tyhjennyskomento */
void FlashProg(signed char *, unsigned char); /* prototyyppi FlashProg-rutiinille */
/* Byte Program -komento */
#ifdef __cplusplus
}
#loppu Jos

#endif /* _doonstack */
/**********************************************************************/

Esimerkissämme 512 tavun lohko on varattu haihtumattoman tiedon tallentamiseen. Tämä lohkokoko valittiin, koska se on MC9S08QG8-mikro-ohjaimen pienin sallittu määrä flash-muistisoluja. Valittu lohko sijoittuu MK:n pysyvän flash-muistin osoiteavaruuden alkuun: 0xE000 - 0xE1FF. Ohjelmakoodi alkaa osoitteesta 0xE200 ja voi varata osoiteavaruuden jopa 0xFFFF.

Tietojen ja ohjelmakoodien aiotun sijoittelun toteuttamiseksi sinun tulee muuttaa tiedoston linkittäjäasetuksia projekti.prm.

Vakioprojektissa oli merkintä:


ROM = VAIN LUKU 0xE000 - 0xFFAD;

Se pitäisi vaihtaa:

SEGMENTIT /* Tässä kaikki RAM/ROM-alueet laite on listattu */
ROM = VAIN LUKU 0xE200 - 0xFFAD;

Esimerkissämme käytetään myös ohjelmakoodialueen kirjoitussuojaustilaa, ts. osoiteavaruus 0xF200 - 0xFFFF. Kuvassa Kuva 12.4 esittää koodin generointiprosessia FPROT-rekisterille, joka suojaa osoiteavaruutta 0xF200...0xFFFF tahattomalta poistamiselta/kirjoitukselta. Suojaamattoman osoiteavaruuden viimeisen osoitteen 0xF1FF seitsemän tärkeintä bittiä on kirjoitettava FPROT-rekisteriin.

Osoite A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0xE1FF 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1
FPROT FPS7 FPS6 FPS5 FPS4 FPS3 FPS2 FPS1 FPDIS
0xE0 1 1 1 0 0 0 0 0

Riisi. 12.4. Turvakooditietueen muodostaminen FPROT-rekisteriä varten.

Esimerkki 12.1. Toiminnot haihtumattomien tietojen kanssa flash-muistissa

// Demokortti DEMO9S08QG8
// tyhjennä/kirjoita/lue pysyvä flash-muisti
#include /* EnableInterrupts-makrolle */
#include "derivative.h" /* sisältää oheislaitteiden ilmoitukset */
#include "hcs08.h" /* Tämä on ilmoitustiedostomme! */
#include "doonstack.h"
#define BUSCLK 8000000
#define vFCDIV (BUSCLK/200000-1)
char fdata, toiminta;
allekirjoittamaton int faddress;
// Määritä kirjoitussuojattu osoitealue: 0xE200 - 0xFFFF
const-tavu NVPROT_INIT @0x0000FFBD = 0xE0;
// MK:n alustus
void mcu_init(void)
{
SOPT1 = bBKGDPE; // Ota käyttöön BKGD-virheenkorjausrivitoiminto
ICSSC = NV_FTRIM; // Kirjoita FTRIM-trimmausarvo
ICSTRM = NV_ICSTRM; // Kirjoita TRIM trimmiarvo
ICSC2 = 0; // ICSOUT = DCOOUT / 1
// BUSCLK = 8 MHz
FCDIV = vFCDIV; // Kirjoita taajuuden FCLK jakajakoodin arvo
// (FCLK = 200 kHz)
}
#pragma inline
// Toiminto tavun lukemiseksi muistisolusta, jolla on annettu osoite
char flash_read(allekirjoittamaton int-osoite)
{
unsigned char *osoitin;
osoitin = (merkki*) osoite;
paluu (*osoitin);
}
// Toiminto tavun kirjoittamiseksi muistisoluun tietyllä osoitteella
char flash_write(allekirjoittamaton int-osoite, allekirjoittamaton merkkidata)
{
unsigned char *osoitin;
osoitin = (merkki*) osoite;
FlashProg(osoitin,data); // Kutsu salaman ohjelmointitoiminto
jos (FSTAT_FACCERR) data=1; muu data=0;
jos (FSTAT_FPVIOL) data|=2;
palautus(data);
}
// Toiminto tietyn lohkon poistamiseksi flash-muistialueelta
allekirjoittamaton char flash_sector_erase(signed int address)
{
unsigned char *osoitin, res;
osoitin = (merkki*) osoite;
FlashErase(osoitin);
jos (FSTAT_FACCERR) res=1; muuten res=0;
jos (FSTAT_FPVIOL) res|=2;
paluu(res);
}
void main(void)
{
mcu_init();
fdata = 0;
faddress = 0xE000;
toiminta = 0;
kun (1)
{
kytkin (toiminta)
{
tapaus 1: // Poista lohko
fdata = flash_sector_erase(faddress);
toiminta = 0;
tauko;
tapaus 2: // Kirjoita tavu
fdata = flash_write(faddress,fdata);
toiminta = 0;
tauko;
tapaus 3: // Lue tavu
fdata = flash_read(faddress);
toiminta = 0;
tauko;
}
}
}

Tarkastellaan esimerkin 12.1 ohjelmakoodin testausmenetelmää. Voit tehdä tämän virheenkorjausikkunassa Data lisätään kolme muuttujaa: faddress, fdata, operaatio. Asetamme ikkunan myös säännölliseen päivitystilaan, esimerkiksi 200 ms:n välein.

Ennen kuin suoritat ohjelmakoodin, kirjoita se muuttujaan faddress osoite kirjoittamista varten ja muuttujaksi fdata— kirjoitettavan datan tavu. Muuttujan vieressä operaatio kirjoita muistiin koodi 0x02. Esimerkkikoodin suorittamisen jälkeen tavun dataa aletaan kirjoittaa valittuun flash-muistisoluun. Huomaa, että valitun solun tulee olla poistetussa tilassa, ts. sen pitäisi sisältää koodi 0xFF.

Jos haluat tyhjentää muistilohkon 0xE00...0xE1FF, kirjoita kohtaan faddress mikä tahansa osoite määritetyltä alueelta ja aseta muuttuja operaatio 1. Suorita seuraavaksi koodi uudelleen suorittamista varten.

Tietojen lukeminen flash-muistista on myös helppoa. Voit tehdä tämän kirjoittamalla muuttujaan faddress osoitekoodi muuttujaksi operaatio- koodi 0x03. Valitun flash-muistisolun sisältö näytetään muuttujassa fdata ohjelmakoodin suorittamisen jälkeen.

Huomaa, että toiminnot flash_write() Ja flash_sector_erase() palauttaa tyyppisen muuttujan chare virhekoodilla toimintoa suoritettaessa: 0 - ei ollut virhettä, 0x02 - oli pääsyvirhe, 0x04 - suojattu osoiteavaruus yritettiin tyhjentää/kirjoittaa. Molemmat edellä mainitut toiminnot vaativat noin 35 tavua pinomuistia suorittaakseen. Jos todellinen pinon pinta-ala on pienempi, niin kohtalokas virhe. Ohjelman toiminnallisuus on mahdollista palauttaa vain nollaamalla MK.

Jotta voit tarkastella flash-muistin muutoksia debuggerissa, sinun on tehtävä joitain muutoksia virheenkorjausohjelman kokoonpanoon. Oletusasetusten mukaisesti debuggeri lukee MCU-flash-muistialueen vain kerran virheenkorjausistunnon aloittamisen jälkeen. Jos haluat muuttaa kokoonpanoa, valitse vaihtoehto debuggerin päävalikosta MultilinkCyclonPro > Debug Memory Map. Kuvassa näkyvä ikkuna avautuu. 12.5, a. Valitse tässä ikkunassa muistilohko 3 ja paina painiketta Muokkaa/Tiedot. Kuvassa näkyvässä uudessa ikkunassa. 12.5, b, valitse merkitty vaihtoehto. Tämä antaa virheenkorjaajan päivittää muistiikkunaa säännöllisesti.

Riisi. 12.5. Muuta virheenkorjausasetuksia päivittääksesi säännöllisesti muistiikkunan sisällön.