Beágyazott rendszerek

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