SiMiKON v1.0 Uputstva za korisnike

Alen Kovač
12 May 2000


Sadržaj


1. Alati korišteni prilikom razvoja programa

Program je razvijen pomoću slijedećih alata:

Primarna razvojna platforma je Linux. (Red Hat 6.1) Budući da u samom programu nema system-dependent funkcijskih poziva, samo portanje ne bi smjelo predstavljati veći problem. QT widget set je cross platform GUI framework što znači da se isti kod može rekompajlirati na bilo kojoj platformi koja je podržana od strane QT-a odnosno Troll Tech-a. Win32 platforme su također podržane ali library nije dostupan besplatno za nekomercijalnu upotrebu.


2. Opis programa

SiMiKON je potpuno razvojno okruženje za programiranje i simuliranje mikrokontrolera iz porodice 8052. (8052 je naprednija izvedba 8051 porodice) Ima ugrađen Project Manager, Simulator, Editor i Debugger. Osnovni zadatak simulatora je da simulira izvođenje instrukcija onako kako bi ih izvodio pravi mikrokontroler, te da na što pregledniji način daje uvid u stanje pojedinih registara mikrokontrolera te u isto vrijeme pruža potpunu fleksibilnost kontrole toka programa koji se simulira.

Simulator učitava HEX datoteku (standard Intel HEX file format) koju generira assembler, a u kojoj se nalazi niz bajtova koji predstavljaju instrukcije. Proces rastavljanja tih bajtova u ljudima pregledniji oblik mnemonike zove se disassembling; assembling je obrnut postupak gdje se niz mnemonika pretvara u niz bajtova. Disassembliranjem se gube mnoge informacije kao što su: komentari, labeles, formatiranje koda, konstante, itd. Ova činjenica stvara mnogo problema prilikom analiziranja kompleksnijih programa jer disassemblirani kod postaje vrlo nepregledan. Taj problem je riješen paralelnim parsanjem .HEX i .ASM datoteka. Parser svaku instrukciju iz .HEX datoteke mapira sa odgovarajućom linijom u .ASM datoteci. Tako da sada prilikom debugiranja možemo pratiti tijek izvođenja i u .ASM datoteci.

2.1. Project Manager

Project Manager, kao što mu i samo ime navodi, služi za upravljanje projektima, učitavanje, pospremanje, zatvaranje te prebacivanje između više otvorenih projekata.

Na Console stranici se nalazi log konzola koja služi za ispisivanje raznih poruka (warning, error, info).

Važnost poruke se očituje na slijedeči način:

Narebe koje možemo pokretati iz Toolbara su redom:

2.2. Debugger / Editor

Debugger se sastoji od disassemblera i kod editora.

Prva naredba iz toolbara je Start. Naredba Start služi za početak debugiranja. Pritiskom na taj gumb prelazi se u "debugging mode". Dokle god smo u tom modu nisu moguće nikakve promjene programa u editoru. Tada editor služi isključivo kao "High Level Disassembler". Slijedeća naredba je Stop, prekida "debugging mode". Naredba Reset služi za resetiranje kontrolera, dakle vraća sve u početno stanje.

Disassembler nam pruža potpunu kontrolu izvođenja programa pomoću slijedećih naredbi:

Prekidne točke su označene crvenim kružićem, a postavljaju se dvostrukim klikom u BRK stupcu. Ponovnim dvostrukim klikom na već postavljenu prekidnu točku se prekidna točka uklanja. Važno je napomenuti da naredba Reset ne uklanja prekidne točke. Naredbom Stop, kao što je ranije rečeno, izlazi se iz "debugging moda" i uklanjaju se sve postavljene prekidne točke. Linija disassemblera u plavoj boji pokazuje adresu, odnosno instrukciju na koju će se program granati ako se izvrši označena instrukcija.

Editor služi za pisanje programa u assembleru za 8051 MCU. Ukoliko je program mijenjan to će se očitovati promjenom boje imena datoteke koja se editira u crveno. Dakako da je sada naredba Assemble omogučena. Assemble naredba posprema program, te ga assemblira i ponovno disassemblira. Search služi za traženje određene riječi u programu. U donjem desnom kutu označena je trenutna pozicija kursora.

2.3. Registers

Registers modul nam daje uvid u stanje SFR i GPR registara.

SFR je kratica od Special Function Registers ili prevedeno registri specijalnih namjena. Opis funkcije svakog od njih je izvan dosega ovog teksta, dovoljno je navesti da su to registri kojima se podešava rad kontrolera. npr. tajmeri, serijska komunikacija, omogućavanje i isključivanje prekida, nivoi prednosti prekida, itd.

GPR dolazi od General Purpose Registers, prevedeno registri općih namjena. To su registri R0 do R7.

Svrha Registers modula nije samo za nadziranje stanja, već i za mijenjanje sadržaja pojedinih registara.


2.4. Special Function Registers (SFR)

Budući da se SFR-ovi mogu adresirati po bitu SFR modul nam daje mogućnost pregleda i postavljanja pojedinog bita SFR-a.


2.5. Stack

Simikon Stack modul pokazuje adresu i sadržaj memorije na datoj adresi stacka (stoga).

Stack je organizacija podataka koja ima LIFO karakter (Last-In-First-Out), sto znači da zadnji podatak koji se gurne na stack (push) će biti prvi koji će i izaći sa stacka (pop). Stack nije nikakva posebna memorija kako se to obično shvaća. Stackom je onaj dio RAM memorije koji je rezerviran za podatke koji se pohranjuju ili čitaju pomoću instrukcija za rad sa stackom.

Ovo je ostvareno pomoću SP (stack pointer) SFR registra, koji uvijek pokazuje na vrh stoga. Kada se kontroler resetira SP je inicijaliziran na vrijednost 0x07h. Ako planiramo koristiti banke registara 1,2 i 3 koje se selektiraju pomoću RS0 i RS1 flagova iz PSW registra potrebno je inicijalizirati SP na odgovarajuću adresu kako ne bi došlo do prepisivanja podataka što bi naravno rezultiralo padom sistema.

Instrukcije za rad sa stogom su push i pop.

Stog uglavnom služi za spremanje povratnih adresa iz procedura. Za to je zadužen sam procesor. Prilikom poziva lcall ili acall instrukcija na stack se stavlja 16-bitna vrijednost PC registra i to prvo LSB pa MSB byte. ret instrukcija nastavlja izvođenje programa na 16-bitnoj adresi koja se dobiva spajanjem dva bajta sa stoga. (prvi pop vraca MSB byte adrese, a drugi LSB)


2.6. Memory

Simikon Memory modul prikazuje sadržaj RAM i ROM memorije, koja može biti interna u cipu i/ili eksterna izvan čipa.

Kada je Auto opcija uključena, skok na određenu lokaciju u memoriji se izvršava izravno dok se upisuje adresa.

Editable opcija dozvoljava ili zabranjuje mogućnost namjerne ili slučajne promjene sadržaja RAM-a. U slučaju ROM memorije opcija je onemogućena jer nema smisla.

Pritiskom na početnu adresu, selektira se cijeli red. To je vrlo korisno ako nas zanima samo stanje memorijskih lokacija u tom redu jer je tako puno uočljivije i lakše za nadgledati. Također moguće je označiti samo pojedinu lokaciju ili više njih.


2.7. I/O Ports

I/O ports modul služi za nadgledanje stanja četriju ulazno-izlaznih portova (P0-P3) koji su definirani 8051 standardom. Neke izvedbe 8051 kontrolera imaju vise ili manje portova. Portovima se može pristupit i iz SFR modula.


2.8. Serial

Simulator serijskog porta. Ovdje vidimo sve što kontroler šalje na port. Ukoliko je REN bit u SCON SFR registru postavljen onda je omogućeno pisanje na serijski port. REN je kratica od Receive ENable.


2.9. Interrupts

Ovdje možemo ručno proizvesti interrupt. Ukoliko određeni interrupt nije omogućen u IE SFR registru onda će i ovdje biti isključen. Ovo je vrlo korisno za testiranje ISR-ova (Interrupt Service Routine) da bi provjerili sto-bi-bilo kad-bi-bilo (TM).


2.10. Performance Analyzer

SimikonPerformance modul analizira vrijeme izvođenja određenog segmenta koda. Vrijeme proračunava tako da izbrojene cikluse između početne i krajnje adrese pomnoži sa 12 / fosc.

To je tako jer se jedan strojni ciklus sastoji od 12 impulsa oscilatora, a vrijeme T = 1/f. Prema tome ako imamo kristal od 12MHz vrijeme trajanja jednog ciklusa iznosit če točno 1us (mikrosekundu).


3. Pseudo-kod algoritama

3.1. Disassembliranje Intel HEX datoteka


4. Pregled organizacije izvornog koda


5. Primjeri

5.1. example01.asm: Primjer za serijski port

.equ CR, 10

.org 0x0000h
  ajmp START ; PC := START

.org 0x0023h ; Serial Interrupt vector
  reti       ; return from interrupt

SEND_BUFFER:
     mov A, #0x00h
     ajmp L01
L00: pop ACC
     inc A
L01: push ACC
     movc A, @A+DPTR
     mov SBUF, A
     cjne A, #CR, L00
     pop ACC
ret

START:
  mov IE, #0x90h ; enable serial int

  mov DPTR, #BannerString
  acall SEND_BUFFER

  mov DPTR, #NekiString
  acall SEND_BUFFER

  mov DPTR, #PromptString
  acall SEND_BUFFER

LOOP: ajmp LOOP
  nop

.org 0xF000h
.db 0xA5h

BannerString: .db "Serial port example", CR
NekiString: .db "Copyright (c) 2000 Alen Kovac", CR
PromptString: .db "Input: ", CR



6. Dodaci

6.1. Standard Intel HEX file format

Intel HEX record format je definiran na slijedeci nacin:

:LLAAAARRDDDD...DDDDCC

Obratite paznju na ':' dvotocku; svaki record zapocinje sa dvotockom.

Znacenja polja su:

Primjer: :0300300002337A1E

Checksum se racuna na slijedeci nacin:

0x03 + 0x00 + 0x30 + 0x00 + 0x02 + 0x33 + 0x7A = 0xE2

Checksum je drugi komplement zbroja svih bajtova. Drugi komplement broja 0xE2 je 0x1E.

Drugi komplement se racuna tako da se od 0x100 oduzme broj od kojeg trazimo drugi komplement. npr. 0x100 - 0xE2 = 0x1E U slucaju da je broj veci od 0x100, npr. 0x494, onda se samo odbaci najvise znacajna znamenka, u ovom slucaju '4'. Drugi komplement broja 0x494 bi bio 0x100 - 0x94 = 0x6C


7. Kontakt

Ukoliko imate bilo kakve konstruktivne komentare, kritike ili želite na neki način pomoći u razvoju SiMiKON-a javite mi se na email: Alen Kovac <akovac@jagor.srce.hr>

SiMiKON je potpuno otvoren i besplatan program, dostupan pod GNU Public License (GPL) sto znači da slobodno možete mijenjati i/ili distribuirati kod programa sve dok je to u skladu sa GPL-om.

Web stranica SiMiKON projekta nalazi se na slijedećoj adresi: http://simikon.sourceforge.net.