Embedded SW – C & picoBlaze
PicoBlaze – resume/constraints
PicoBlaze <> Ardunio Uno PB 1k instruktioner for PB Atmega8 8kB for kode (minus bootloader) PB scratchpad RAM + 31 dyb call stack Atmega 1kB ram, 512B eeprom Sammenlignelig på kode, faktor 4-10 på RAM - ! so bad PB fylder kun ca 5% af FPGA... ? kan man skohorne flere PB ind på fpga ?
PB & C – nogle kommentarer Der er en række C compilere baseret bla på Hendrics smallC (sdcc) og pbcc (picoBlaze C) De seneste jeg har fået til at køre er at se på kursus WWW SE http://es.aau.dk/staff/jdn/edu/courses/14-1/embSW/c2 (eller også 15-1) Hvor compilere er hentet Det hele kører på xp eller med wine på linux/mac wine pccomp.exe <parms>
PC C & linux Der er C compilere til PB kørende på linux, men det er “alles inclusive” - man skal selv hente src træ og kompilere op. Ej interessant “Main” dokument pccomp_manual.pdf som er på www
Dagens opgave Hent SW Skriv “hello world” C compile it Asm it Vejen frem
Om PB C I Jordens dummeste C compiler ! Ingen kode optimering – du er kode optimator Undgå lokale variable – brug globale Undgå for dybe (rekursive) funktionskald aht call stack Pas på med mixede typer operationer – int/char Kig maskin kode igennem !
Om PB C II LÆS MANUAL pccomp_manual.pdf !!! Subset af C (obvious :-) Datatypes: (no news) char 8 bit unsigned char 8 bit int 16 bit unsigned int 16 bit Arrays – NB (unsigned) char for indexing only Pointers – 1D only
Om PB C III Type casting (unsigned)char -> (unsigned)int)
“if” as usual “while” as usual Endless loops: No check af asm part
Om PB C IV do {} while () switch
Datz all :-)
næsten
interrupts PB har et eksternt interrupt IRQ rutine skal hedde my_irq Kan aktiveres og deaktiveres online IRQ rutine skal holdes i asm Ved IRQ “end” er default at IRQ igen er aktiveret Kan dog kodes til at afslutte med IRQ disablet
IO space Ej testet af mig ...
// READ FUNCTION char inchar(char addr){ char x; #asm LOAD TMP , YL ADD TMP , 01 FETCH TMP, (TMP) ; TMP = addr INPUT TMP,(TMP) ; TMP = datain STORE TMP,(YL) ; save in x #endasm return x; } JDN: NOK EN IDE AT LEGE MED AT PAR FUKTIONER OG SE PÅ KODE LAYOUT:
_a_fct: LOAD XL, YL INPUT ZL,(XL) SUB YL , 01 OUTPUT ZL,(YL) LOAD ZL,01 INPUT XL,(YL) ADD YL , 01 ADD XL , ZL RETURN _main: LOAD ZL,04 CALL _a_fct OUTPUT XL,_c char c; char a_fct(char cc); // need prototype... char a_fct(char cc) { return cc+1; } void main(void) c = a_fct(4);
Nu til kødgryderne... pccomp.exe x.c - kun een C src Resten som #include <x.h> også selvom der er kode i filen Maskine kode i psm fil skal nu assembles \xilinx\13.4\IS_DSE\ISE\sysgen\bin\nt\kcpsm3.exe jdn3.psm .
_a_fct: LOAD XL, YL INPUT ZL,(XL) SUB YL , 01 OUTPUT ZL,(YL) LOAD ZL,01 INPUT XL,(YL) ADD YL , 01 ADD XL , ZL RETURN _main: LOAD ZL,04 CALL _a_fct OUTPUT XL,_c NAMEREG sf , XL NAMEREG se , YL NAMEREG sd , ZL NAMEREG sc , XH NAMEREG sa , ZH NAMEREG sb , TMP NAMEREG s9 , SH NAMEREG s8 , SL NAMEREG s7 , KH NAMEREG s6 , KL NAMEREG s5 , TMP2 CONSTANT _c , ff LOAD YL , ff JUMP _main