sobota 23. dubna 2016

Zvláštnosti PICAXE

23. 4. 2016

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

  1. 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.
  2. PICAXE má maximálně 4 nebo 8 úrovní vnoření gosub (hloubka stacku) - podle typu
  3. Basic nezná prioritu aritmetických operátorů (tj. 1+2*3=9). V aritmetických výrazech nelze používat závorky. 
  4. 08M2, 18M2: Paměť programu na adresách 1792 až 2048 je sdílena rovněž jako EEPROM (adr. 255 až 0)
  5. 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)
    1. RAM (registry "proměnné") b0-b27 (b55 pro X2), w0-w13 (w27 pro X2) (let, peek, poke, bptr)
    2. EEPROM (eeprom, write, read)
    3. Paměť programu (table, readtable)
    4. ScratchPad (ptr, get, put)
    5. Externí paměť EEPROM (READI2C, WRITEI2C)
    6. SFR - System Function Registers (peeksfr, pokesfr) - hodně zmateně dokumentovaná paměť systémových proměnných.
  6. PICAXE ukládá vnitřně program a data nezarovnané na hranici byte!
    (viz http://elecurls.tripod.com/filz/PICAXE-ProgramSizeOptimisationAndSpeed-Rev_D-1.pdf)
  7. Maximální úroveň vnoření for .. next je 8 
  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

  1. 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
  2. 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. 

  3. 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


  4. 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.

  5. 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
    
     
  6. Více příkazů na řádku (":")
    char=0 : Gosub SendDataByte
     
     

Žádné komentáře:

Okomentovat