12-05-2012, 08:29 PM
Ma Microchipi prosede peal kõrgkeeli kasutanud pole, nii et oskan vaid üldist nõu anda. Ehk on abi.
Lokaalsed muutujad ja funktsioonide parameetrid asuvad nn. pinumälus. Igal funktsiooni väljakutsel võetakse pinumälust kasutusele järjekordne jupp, nn. frame, milles on funktsioooni lokaalsed muutujad ja parameetrid; funktsioonist tagasi tulekult lõpetatakse selle frame'i kasutamine ja jupp pinumälu on jälle vaba.
Programmi tööks vajaliku pinumälu maht on määratud väljakutsutavates funktsioonides kasutusel olevate lokaalsete muutujate ja parameetritega. Seda mälumahtu kompilaatorid tavaliselt arvutada ei oska ja seega ei saa nad ka hoiatada pinumälu ületäitumise eest. Mõnikord oskab kompilaatori genereerida pinumälu kasutamist kontrollivat koodi; sellisel juhul pinumälu ületäitumisel kirjutatakse silumisporti ntx. "Stack overflow". Tavaliselt ületäitumist ei kontrollita, sel juhul pinumälu ületäitumine avaldub näiliselt ebaloogilise veana - muutujate ootamatu väärtuse nullimine, mikrokontrolleri ootamatu reset vms.
Keel "C" oli algselt mõeldud arvutile PDP-11 (alguses oli PDP-7, aga sellest kasvati ruttu välja), mida iseloomustasid:
* 16-bitine aadressruum, ühine käskudele ja andmetele (von Neumann).
* I/O portide käsitlemiseks eraldi käsku ei olnud, nendele oli eraldatud osa aadressiruumist.
* Trobikond (täpne arv pole oluline) 16-bitiseid üldotstarbelisi registreid.
* Kõik käsud lubasid kõiki adresseerimisrežiime - ortogonaalsus.
* Pinumäluna võis kasutada suvalist mäluala (mitte raualine pinumälu nagu 8-bitisel PIC-il).
Sellest arhitektuurist erinemine kipub C kompilaatoritele raskusi valmistama, tekib vajadus erinevate mälumudelite järele, mikrokontrollerite puhul tavalise Harvardi arhitektuuri kasutamisel on tarvis püsimällu minevate konstantide jaoks spetsiaalset süntaksit jms. PIC24 on üldvaates üsna lähedane keele "C" arusaamisele arvutist ja probleeme oleks arvatavasti vähem.
Lokaalsed muutujad ja funktsioonide parameetrid asuvad nn. pinumälus. Igal funktsiooni väljakutsel võetakse pinumälust kasutusele järjekordne jupp, nn. frame, milles on funktsioooni lokaalsed muutujad ja parameetrid; funktsioonist tagasi tulekult lõpetatakse selle frame'i kasutamine ja jupp pinumälu on jälle vaba.
Programmi tööks vajaliku pinumälu maht on määratud väljakutsutavates funktsioonides kasutusel olevate lokaalsete muutujate ja parameetritega. Seda mälumahtu kompilaatorid tavaliselt arvutada ei oska ja seega ei saa nad ka hoiatada pinumälu ületäitumise eest. Mõnikord oskab kompilaatori genereerida pinumälu kasutamist kontrollivat koodi; sellisel juhul pinumälu ületäitumisel kirjutatakse silumisporti ntx. "Stack overflow". Tavaliselt ületäitumist ei kontrollita, sel juhul pinumälu ületäitumine avaldub näiliselt ebaloogilise veana - muutujate ootamatu väärtuse nullimine, mikrokontrolleri ootamatu reset vms.
Keel "C" oli algselt mõeldud arvutile PDP-11 (alguses oli PDP-7, aga sellest kasvati ruttu välja), mida iseloomustasid:
* 16-bitine aadressruum, ühine käskudele ja andmetele (von Neumann).
* I/O portide käsitlemiseks eraldi käsku ei olnud, nendele oli eraldatud osa aadressiruumist.
* Trobikond (täpne arv pole oluline) 16-bitiseid üldotstarbelisi registreid.
* Kõik käsud lubasid kõiki adresseerimisrežiime - ortogonaalsus.
* Pinumäluna võis kasutada suvalist mäluala (mitte raualine pinumälu nagu 8-bitisel PIC-il).
Sellest arhitektuurist erinemine kipub C kompilaatoritele raskusi valmistama, tekib vajadus erinevate mälumudelite järele, mikrokontrollerite puhul tavalise Harvardi arhitektuuri kasutamisel on tarvis püsimällu minevate konstantide jaoks spetsiaalset süntaksit jms. PIC24 on üldvaates üsna lähedane keele "C" arusaamisele arvutist ja probleeme oleks arvatavasti vähem.