Differences

This shows you the differences between two versions of the page.

projektit:hyva_sulautettu_c_koodi [2019/02/28 16:26]
fireflower
projektit:hyva_sulautettu_c_koodi [2019/09/18 20:01] (current)
fireflower typoja korjattu
Line 1: Line 1:
 ==== Millainen on hyvä sulautetun C-koodi? ==== ==== Millainen on hyvä sulautetun C-koodi? ====
-//ei missään tärkeysjärjestyksessä, vaan ajattelun ja toiminnan pohjaksi antamaan ryhtiä koodaamiseen//+//Ei missään tärkeysjärjestyksessä, vaan ajattelun ja toiminnan pohjaksi antamaan ryhtiä koodaamiseen//
  
-  - Aloita ohjelma infosisältöisillä kommenttiriveillä, ainakin seuraavat tiedot+  - Aloita ohjelma infosisältöisillä kommenttiriveillä, täytä ainakin seuraavat tiedot
     * koodin nimi     * koodin nimi
     * hardware     * hardware
Line 17: Line 17:
  * LICENSE : GNU General Public License Version 2 (GPL)  * LICENSE : GNU General Public License Version 2 (GPL)
  * Author  : First Last | email | phone  * Author  : First Last | email | phone
- * Company : Telok RY+ * Company : Telok ry
  * Date    : Date (syntax US: MM/DD/YYYY, EU: DD.MM.YYYY, Archive: YYYYMMDD)  * Date    : Date (syntax US: MM/DD/YYYY, EU: DD.MM.YYYY, Archive: YYYYMMDD)
  * Project :  * Project :
Line 23: Line 23:
  * website :   * website : 
  * Language: C (Embedded C)  * Language: C (Embedded C)
- * Style   : TUT Style++ (http://www.cs.tut.fi/~ohjtuki/style/)+ * Style   : TUT Style++ (http://www.telok.fi/doku.php?projektit:tyyliopas_style_.pdf)
  * Builder : AVR Studio 7, WinAVR etc...  * Builder : AVR Studio 7, WinAVR etc...
  *  *
  * Version :  * Version :
- * Changes : (or make changelog.txt)+ * Changes : (or make changelog.txt or use another system)
  *  *
  * HARDWARE DETAILS  * HARDWARE DETAILS
Line 38: Line 38:
  */</code>  */</code>
  
-  - kommentoi riittävästi, mutta ei itsestäänselvyyksiä. Kommentoi koodin kirjoittamisen ja testaamiseen yhteydessä, myöhemmin et enää muista mitä ohjelma tekee +  - Kommentoi riittävästi, mutta ei itsestäänselvyyksiä. Kommentoi koodin kirjoittamisen ja testaamiseen yhteydessä, myöhemmin et enää muista mitä ohjelma tekee 
-  - yksi käsky per rivi +  - Yksi käsky per rivi 
-  - kirjoita ilmavaa koodia, käytä tyhjiä rivejä ja sisennyksiä jäsentämään koodia. Tärkeää että se on myöhemminkin luettavaa ja ymmärrettävää, myös muiden toimesta +  - Kirjoita ilmavaa koodia, käytä tyhjiä rivejä ja sisennyksiä jäsentämään koodia. On tärkeää, että koodi on myöhemminkin luettavaa ja ymmärrettävää, myös muiden toimesta. 
-  - käytä lohkosulkeita järkevästi jäsentämään koodia. Käytä samasta syystä tarvittaessa kaarisulkeita; esim. pitkien ehtolauseiden jäsentämiseen usealle riville. +  - Käytä lohkosulkeita järkevästi jäsentämään koodia. Käytä samasta syystä tarvittaessa kaarisulkeita; esim. pitkien ehtolauseiden jäsentämiseen usealle riville. 
-  - muuttujat, funkiot ja jäsenfunkiot alkavat pienellä alkukirjaimella, useammasta sanasta koostuvat nimet kirjoitetaan yhteen ja loppupäänsanat aloitetaan isolla kirjaimella; esim readAxisPosition() +  - Muuttujat, funkiot ja jäsenfunkiot alkavat pienellä alkukirjaimella, useammasta sanasta koostuvat nimet kirjoitetaan yhteen ja loppupäänsanat aloitetaan isolla kirjaimella; esim readAxisPosition() 
-  - jaa ohjelma itsenäisiin funktioihin. Parhaimillaan main()-funktiossa on vain funktiokutsuja. Funktion hyvä koko: koko funktio näkyy ruudulla samalla kertaa. Funktion nimen tulee olla kuvaava ja alkaa pienellä kirjaimella +  - Jaa ohjelma itsenäisiin funktioihin. Parhaimillaan main()-funktiossa on vain funktiokutsuja. Funktion hyvä koko: koko funktio näkyy ruudulla samalla kertaa. Funktion nimen tulee olla kuvaava ja nimen tulee alkaa pienellä kirjaimella 
-  - muuttujat esitetään funktion alussa. Muuttujan nimen tulee olla kuvaava, yksittäinen kirjain sallitaan vain silmukkalaskurissa. Koska AVR usein on 8-bittinen, käytä 8-bittisiä muuttujatyyppejä, char, ja mieluusti jos mahdollista etumerkitön char eli uint8_t. Erikoisen tärkeää globaaleille muuttujille.+  - Muuttujat esitetään funktion alussa. Muuttujan nimen tulee olla kuvaava, yksittäinen kirjain sallitaan vain silmukkalaskurissa. Koska AVR usein on 8-bittinen, käytä 8-bittisiä muuttujatyyppejä, char, ja mieluustijos mahdollistaetumerkitön char eli uint8_t. [[:projektit:globaali_muuttuja | Erikoisen tärkeää globaaleille muuttujille]].
   - Vältä 16- ja 32-bittisten muuttujien käyttöä, jos se ei koskaan tarvitse niin suurta muistialuetta. Haaskaat turhaan muistia.   - Vältä 16- ja 32-bittisten muuttujien käyttöä, jos se ei koskaan tarvitse niin suurta muistialuetta. Haaskaat turhaan muistia.
-  - local-muuttujia käytetään pääsääntöisesti rekisterissä (niitähän on AVR:ssä paljon, yleensä 32 kpl), se tuo nopeutta lisää, käytä siksi local-muuttujia +  - Local-muuttujia käytetään pääsääntöisesti rekisterissä (niitähän on AVR:ssä paljon, yleensä ainakin 32 kpl), se tuo nopeutta lisää, eli käytä local-muuttujia. 
-  - jos on tarvetta (esim. laskuri) käytä funktion sisällä muuttujan määrityksessä static-määrettä. Se muistaa arvonsa funktiokutsujen välillä. Funktion alussa muuttuja siirretään rekisteriin, ja lopussa palautetaan SRAMmiin, se lisää tehoa+  - Jos on tarvetta (esim. laskuri) käytä funktion sisällä muuttujan määrityksessä static-määrettä. Se muistaa arvonsa funktiokutsujen välillä. Funktion alussa muuttuja siirretään rekisteriin, ja lopussa palautetaan SRAMmiin, se lisää suoritustehoa
-  - käytä datan siirtoon funktioiden välillä argumentti-parametri ja return määrityksiä (globaalien muuttujien sijasta). [[:projektit:argumentti_parametri_return | Tämä on tärkeää!]] +  - Käytä datan siirtoon funktioiden välillä argumentti-parametri ja return määrityksiä (globaalien muuttujien sijasta). [[:projektit:argumentti_parametri_return | Tämä on tärkeää!]] 
-  - jos tarvitset kontrollilippua, esim. muuttujan arvon testauksessa, käytä määritykseen käyttämätöntä rekisteriä. Jos se on muuttujassa, niin lippu pitää hakea muistista rekisteriin ja testin jälkeen palauttaa muistiin. Mutta jos esim UART ei ole käytössä, käytä sen UBRR rekisteriä lippuna, testi nopeutuu. +  - Jos tarvitset kontrollilippua, esim. muuttujan arvon testauksessa, käytä määritykseen käyttämätöntä rekisteriä. Jos se on muuttujassa, niin lippu pitää hakea muistista rekisteriin ja testin jälkeen palauttaa muistiin. Mutta jos esim UART ei ole käytössä, käytä sen UBRR rekisteriä lippuna, testi nopeutuu. 
-  - vakio kopioidaan flashistä SRAMmiin heti ohjelman alussa (startup) ja se säilyy siellä ohjelman ajon ajan, eli se haaskaa SRAMmia. Talleta vakio flash-muistiin erityismääreellä <code>__flash char string[]</code>, ja käytä pointeria kun muuttujaa/tekstiä tarvitaan. +  - Vakio kopioidaan flashistä SRAMmiin heti ohjelman alussa (startup) ja se säilyy siellä ohjelman ajon ajan, eli se haaskaa SRAMmia. Talleta vakio flash-muistiin erityismääreellä <code>__flash char string[]</code>, ja käytä pointeria kun muuttujaa/tekstiä tarvitaan. 
-  - kesketytyksessä kaikki käytettävät rekisterit talletetaan pinoon, stack. Jotta koodi olisi pienikokoista ja nopeaa, keskeytysrutiinin tulisi olla pieni, siellä vaan käydään ja siitä ei tule kutsua muita funktioita.+  - Kesketytyksessä kaikki käytettävät rekisterit talletetaan pinoon, stack. Jotta koodi olisi pienikokoista ja nopeaa, keskeytysrutiinin tulisi olla pieni, siellä vaan käydään ja sieltä ei tule kutsua muita funktioita.
   - do{}while on parempi kuin while() tai for(). for(;;) on parempi kuin while(1) [[:projektit:do_while_vai_for | selitys]]   - do{}while on parempi kuin while() tai for(). for(;;) on parempi kuin while(1) [[:projektit:do_while_vai_for | selitys]]
-  - makro on parempi kuin pieni funktio. +  - [[:projektit:makro | Makro]] on parempi kuin pieni funktio. 
-  - käytä I/O-avaruuden osoittamista suoraan, ei pointerilla, nopeuttaa.+  - Käytä I/O-avaruuden osoittamista suoraan, ei pointerilla, nopeuttaa.
  
 __Oikeastaan mihin on kiire? Mutta muistista on ennen pitkää pulaa...__ __Oikeastaan mihin on kiire? Mutta muistista on ennen pitkää pulaa...__
 
projektit/hyva_sulautettu_c_koodi.1551364019.txt.gz · Last modified: 2019/02/28 16:26 by fireflower
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki