Zde si poznamenávám zajímavosti k architektuře mikrokontrolerů PICAXE. Pro člověka, přicházejícého z jiných platforem, mohou být některé vlastnosti PICAXE velmi překvapivé.
Arhitektura mikrokontroleru
- PICAXE má poněkud podivné omezení na používání gosub. V rámci celého programu je omezený celkový počet použitých volání podprogramů "gosub" na 15 nebo 255 podle typu kontroléru. Těch 255 vypadá jako dostatečný počet, ale snadno se lze dostat do problémů, pokud třeba používáte LCD s I2C rozhraním, vytvořeným pomocí obvodu 8574 (což je většina levnějších displejů s rozhraním IIC) - vlastní zkušenost. Pak je třeba začít s "gosub" šetřit i za cenu složitějšího kódu programu.
- PICAXE má maximálně 4 nebo 8 úrovní vnoření gosub (hloubka stacku) - podle typu
- Basic nezná prioritu aritmetických operátorů (tj. 1+2*3=9). V aritmetických výrazech nelze používat závorky.
- 08M2, 18M2: Paměť programu na adresách 1792 až 2048 je sdílena rovněž jako EEPROM (adr. 255 až 0)
- Paměti pro data
PICAXE má značně rozmanité řešení ukládání dat (přehled např. v diskusi na fóru PICAXE - odkaz na soubor, nebo v mém předchozím článku na tomto blogu)- RAM (registry "proměnné") b0-b27 (b55 pro X2), w0-w13 (w27 pro X2) (let, peek, poke, bptr)
- EEPROM (eeprom, write, read)
- Paměť programu (table, readtable)
- ScratchPad (ptr, get, put)
- Externí paměť EEPROM (READI2C, WRITEI2C)
- SFR - System Function Registers (peeksfr, pokesfr) - hodně zmateně dokumentovaná paměť systémových proměnných.
- PICAXE ukládá vnitřně program a data nezarovnané na hranici byte!
(viz http://elecurls.tripod.com/filz/PICAXE-ProgramSizeOptimisationAndSpeed-Rev_D-1.pdf) - Maximální úroveň vnoření for .. next je 8
- Uživatelsky přístupný zásobník (stack) je k dispozici jen u kontrolérů řady X2. Používá příkazy push a pop. Je 32 úrovňový a ukládají se byte (16bitové proměnné se musí ukládat po svých částech, jako 2 byte). Mimo to existuje u X2 i zvláštní 4úrovňový zásobník pro hromadné ukládání a obnovu obsahů proměných b0-b15 (operace pushram a popram).
Picaxe BASIC
- Komentáře. PICAXE umožňuje používání několika typů komentářů. V tomto se dost liší Picaxe Editor v6 a v5.
- REM Toto je klasicka poznamka ve stylu Basic. Kupodivu nefunguje v Picaxe
REM Editoru v5. - ; (Strednik) Tento komentar muze byt v radku programu. Text za ";" se az do konce
; radku chape jako komentar - ' (Apostrof) Stejna funkce jako ";"
- #REM
Veskery text mezi #REM a #ENDREM se chape jako poznamka.
Obvykle se pouziva na docasne vyrazeni casti kodu z prekladu pri ladeni
#ENDREM
- REM Toto je klasicka poznamka ve stylu Basic. Kupodivu nefunguje v Picaxe
- Makra. PICAXE podporuje jednoduchá makra. Funguje jen ve v6 PE.
#macro lcd_goto_char(row,col) lookup row, (128,192,148,212), char char=char+col gosub SendCmdByte #endmacro ... lcd_goto_char(0,0)
Poznámka: mezi jménem makra a závorkami s parametry nesmi byt mezery. - Podmíněný překlad
#define clock8 ; definování „clock8“
#ifdef clock8 ; když je definováno „clock8“
let b1 = 8 ; pak b1 = 8
#else ; jinak (když není definován)
let b1 = 4 ; b1 = 4
#endif ; konec endif
- Definice typu procesoru
#PICAXE 28X2
Tato direktiva automaticky definuje symbol pro všechny typy PICAXE, např. #picaxe 08m2 je ekvivalent #define 08m2. Mimo to pak kompilátor používá jen příkazy, použitelné pro konkrétní typ PICAXE. - Rozdělení dlouhých řádek ("_")
lookup bUploadedCharCode, (BAT.EMP.UL,BAT.EMP.UR,_ BAT.HAL.L,BAT.HAL.R,_ BAT.FUL.BL,BAT.FUL.BR), bUploadedCharShape
- Více příkazů na řádku (":")
char=0 : Gosub SendDataByte
Žádné komentáře:
Okomentovat