A tárgy célja, hogy megismerkedjetek a beágyazott rendszer programozásának alapjaival. Ehhez többek között az egyik legelterjedtebb beágyazott rendszer architektúrát fogjuk használni: az ARM-ot.
Témák
- Beágyazott rendszerek általános tulajdonsági, programozási szemlélete, real-time rendszerek
- ARM assembly alapok, gyakorlás
- ARM folytatás, gyakorlás
- Raspberry PI, GPIO lábak
- Projekt munka
- ZH
ARM assembly
Irodalom: ARM utasításkészlet, ARM architektúra.
Minden gépre telepítve van a gcc arm-ra fordító változata - otthonra letöltheted innen. Fordítani az arm-elf-gcc paranccsal tudtok (pl. arm-elf-gcc -o hw hw.c), az elkészült futtathatót pedig az arm-elf-run paranccsal futtathatjátok (pl. arm-elf-run hw).
Általában csak ritkán programozunk assembly nyelven, akkor is csak kis részeket (ha nem lehet másképp megoldani, mert nincs olyan C utasítás, avagy nagyon-nagyon kell optimalizálnunk azt a kis részt). A következő példa két részből áll, egy C forrás, és egy assembly állomány.
#include <stdio.h> int f(int); main() { printf("%d\n",f(4)); }
.file "f.c" .text .align 2 .global f .type f, %function f: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. add r0, r0, r0 @ lr needed for prologue bx lr .size f, .-f .ident "GCC: (GNU) 4.0.2"
Fordítása: arm-elf-gcc -o h main.c f.s
Futtatása: arm-elf-run h
Ennek módosításával kapcsolódó feladatok:
- Várjon két paramétert, a-t és b-t (r0-ban és r1-ben veszi át), és térjen vissza 2*a+3*b értékével. (add javasolt szorzás helyett)
- Várjon továbbra is egy paramétert (r0-ban veszi át), és térjen vissza az addig lévő egész számok összegével. Tehát 4 esetében 1+2+3+4=10-zel.
- Várjon továbbra is egy paramétert (r0-ban veszi át), és térjen vissza az annyadik fibonacci számmal.
- Ugyanaz, mint az előző, csak rekurzív megoldással.
ARM hack kihívás: itt (kapcsolódó program neve: arm-elf-objdump)
Raspberry Pi infók
Programozási infók: http://elinux.org/Rpi_Low-level_peripherals
LED kapcsolás: https://www.circuitlab.com/circuit/456ph8/screenshot/540x405/
BC547 tranziszor lábai: http://potentiallabs.com/cart/image/cache/data/BC547-500x416.jpg
Választható projektfeladatok
- ARM assembly-ben 8 királynő probléma összes megoldása - konzolra rajzolással: Balázs Tibor
- ARM assembly-ben prímszámok folyamatos felsorolása: Horváth Dániel
- ARM assembly-ben pi első x tizedesjegyének kiszámolása:
- Raspberry Pi biztonsági kamera: képe távolról lekérdezhető, mozgás esetén automatikusan rögzítés indul:
-
Rapberry PI NAS
-
Raspberry Pi-ből cluster/grid építés: legalább 2-3 pi összeépítése, Vezérlő szoftver telepítése, Elosztott feladat számoltatása
-
Raspberry PI webfigyelő, esemény bekövetkeztét síppal jelző. Paraméterek: weboldal, keresett rexexp, lekérés sűrűsége, riasztás hozza:
- Raspberry PI szenzorról hőmérséklet leszedő, és azt led villogtatással tizedesjegyenként levilligó: Krizsák Tibor
- Raspberry PI webről hőmérséklet leszedő (pl. koponyeg.hu ), és azt led villogtatással tizedesjegyenként levilligó:
- Raspberry Pi infravörös szenzor/adó:
- Saját routeren: email küldés, ha X fok alá megy a hőmérséklet
- Önerőből Raspberry Pi-hez bármilyen (saját) szenzor vagy periféria progrmazás
- Pi-vel netről pontos idő letöltése, és kijelzőn kiíratás