A RobotC programozási nyelv

Nyelvi elemek

Általános nyelvi elemek

A RobotC nyelv az azonosítók, literálok, és megjegyzések területén teljes egyezést mutat a C-vel, míg a kulcsszavakban van némi bővítés.

Kulcsszavak

A C-ben található vezérlési szerkezeteket, primitív típusokat illetve típuskonstrukciós eszközöket jelölő nyelvi elemek RobotC-ben is kulcsszavak.

C standard library

A RobotC firmware-je tartalmazza a C standard library egy részhalmazát (ez a halmaz a leggyakrabban használt és így a fejlesztők által szükségesnek ítélt alprogramokból és konstansokból áll, de bárki tehet javaslatot mi kerüljön a firmware szintjére).
Ezeknek az alprogramoknak a használatához nem kell megadnunk az implementációt, mert az implementáció a nyelv szerkezetében mélyebben, a futtatást végző virtuális gépben van elhelyezve. Tehát nincs szükség #include-ra, se az std lib forrásfájljaira.
Ezen alprogramok és konstansok azonosítói kulcsszavai a RobotC nyelvnek, nem definiálhatók felül.

Példaként nézzük meg, hogy a következő program #include pragma nélkül futtatható.

task main() { int r = random(50); //Ez a függvényv ANSI C-ben a Random.h-ban található float f = sin(PI/4); //Ez a függvényv ANSI C-ben a Math.h-ban található }

Robothardver utasítások

A programozott robot más felületeken érintkezik a külvilággal, mint a számítógépünk. Itt nem a standard kimenetre írunk, hanem pl.: kijelzőre rajzolunk (NXT), és nem standard bemenetről olvasunk, hanem gombnyomásokra kell reagálnunk.Ezeket a funciókat kezelő alprogramok hasonlóan az előzőekhez nem külön könyvtárban, hanem a nyelv részeként vannak jelen és így kulcsszavai a nyelvnek.
Ezeknél is fontosabb a robotprogramozás szempontjából a motorok és szenzorok kezelése, az ezekkel kapcsolatos függvények is kulcsszavak.

Fontos megemlíteni, hogy a 3 különböző hardverre a RobotC nyelvnek 3 különböző változata létezik melyek különböző beépített alprogramokkal rendelkeznek.

Az alábbi linkeken elérhető a beépített függvények listája a különböző hardverekre:

http://www.robotc.net/support/vex/WebHelpCortex/
http://www.robotc.net/support/nxt/MindstormsWebHelp/

Még egy rövidebb összefoglalása a kulcsszavaknak:
http://www.robotc.net/teachingmindstorms/reference/hp_res_words.pdf

Egyéb kulcsszavak

task ld. a párhuzamosságról szóló fejezetben
const C++ -ból átvett nyelvi elem
inline inline függvények jelzésére szolgál
true bool típusnak megfelelő igaz értékű konstans, 1 értékű bájt
false bool típusnak megfelelő hamis értékű konstans, 0 értékű bájt

Hatókör, élettartam

A C-ben található vezérlési szerkezeteket, primitív típusokat illetve típuskonstrukciós eszközöket jelölő nyelvi elemek RobotC-ben is kulcsszavak.

Hatókör

A változók láthatósága teljesen ugyanúgy működik mint C-ben.

Élettartam

A változók élettartamára ugyanez nem mondható el, nagyobb különbség a C-vel nem is lehetne: RobotC-ben ugyanis nincsen hagyományos értelemben vett stack.
Van ugyan egy verem, ami a függvényhívásokat követi, de ez nem kezel aktivációs rekordokat. Ennek a nyelvi tualjdonságnak az következménye, hogy RobotC-ben minden deklarált változó statikus memóriafoglalással kerül a memóriába.
Ebből következően nincs rekurzió a nyelvben, és párhuzamosság esetén nagyon óvatosan kell bánni a közösen használt függvényekkel.

A fejlesztők azért élhettek ezzel a nem-szokványos nyelvtervezési döntéssel, hogy a sebességet és a szabad memóriát növeljék. Feltételezték, hogy minden változó statikusként való tárolása, még ha egyáltalán nem is szép megoldás, hatékonyabb, mint heap és stack kezelése.