background image

Systemy wbudowane

Sprawozdanie laboratoryjne

Ćw. nr 2

Temat: Warsztat projektanta systemów 
mikrokomputerowych – środowiska uruchomieniowe 

background image

0

Specyfikacja oprogramowania

Przygotowanie oprogramowania:
- BCC32.exe
- CSILOG.exe

Osadzanie oprogramowania:
- FLASHLDR.exe
- Soft Scope
- Typer Terminal 

Przebieg zadania

1. Utworzenie dwumodułowego programu w ‘c’

Plik a.c

#include "b.h"

int main()
{

wypisz();
return 0;

}

Plik b.c
#include "b.h"

#include <stdio.h>

void wypisz()
{

printf("Hello\n");

}

Plik b.h

#include <stdio.h>

extern void wypisz();

Moduł a wywołuje funkcje “wypisz()”, wypisującą na standardowe wyjście ciąg 
„Hello\n”, z modułu b.

background image

2. Tworzenie pliku *.hex

W wierszu poleceń wpisywaliśmy poniższe komendy, które miały wygenerować 
plik a.map. Natomiast w celu automatyzacji wykonywanych czynności 
utworzyliśmy plik compile.bat

bcc32 -v -O- -c -3 a.c b.c

// Generuje a.obj, b.obj

bcc32 -M -3 a.obj b.obj

// Generuje a.map, a.exe

csiloc a.cmd

// Generuje a.hex

Powyższy skrypt kompiluje i linkuje pliki a.c, b.c tworząc plik a.exe. csiloc 
generuje plik a.hex na podstawie pliku a.cmd:

Debug

//tworzy debug file

HEX A.HEX

//tworzy plik a.hex

cpu 386 //ustawienie pracy procesora 386 w trybie 

“real mode”

a.map:

Start

Length

Name

Class

0001:00401000

0000089C0H

_TEXT

CODE

0002:0040A000

00000245CH

_DATA

DATA

0003:0040C45C

000000868H

_BSS

BSS

0004:00000000

00000009CH

_TLS

TLS

Plik *.hex należy osadzić w pamięci 386EX

Dodatkowe komendy:

locate raminit :: 4000p //alokacja pierwszego sektora pamięci
gdt sysgdt[3..64]::reserve // CSiMON wymaga slotów 3 do 64 
(Global Descriptor Table)

idt sysidt[0..40]::reserve // Zarezerwowane dla Intel CPU
tss386 systss::cs:eip=_TEXT //ustawienie cs::eip dla trybu 

pracy chronionej

3. Osadzanie programu #~~~~~~~~#

background image

Wykonywane polecenia:
port=com1

init
FLASH CMD: init com1

//inicjalizuje 

połączenie z płytką (EV386EX) przez port COM1

Port set to COM1
VT Port set to COM1

Establish link to target system on COM1 at 9600 
baud ...

Target system on-line (board = 00010102, prog = 1, 
ver = 2.00)

Flash tables OK
Initialization complete

FLASH CMD: program hello

//wczytuje program 

do pamięci

Program file set to .\HELLO.HEX
Program name set to HELLO

File format set to HEX
Start flash programming ...

Program name already in flash directory!

FLASH CMD: setboot hello

//ustawia program 

który ma się uruchomić podczas startu systemu

Program name set to HELLO

Boot program set to HELLO (start vector = 
8000:0000)

FLASH CMD: shutdown

//zapisuje zmiany

Start shutdown ...

Flash tables not changed
Shutdown complete

FLASH CMD: term

//uruchamia sesję

Start VT session on COM1 at 9600 baud.  Type ESC to 

exit ...

background image

AAAAAAAAAA...

//wynik działania 

programu

Proces osadzania programu na EV386EX można 

zautomatyzować pisząc skrypt o rozszerzeniu .flc i 
uruchomiając go w programie FLASH.

Napisany skrypt:

init com1
system=HELLO

group=
version=2.1

file=hello.hex
echo Hello world

program
setboot

shutdown

Wynik działania:

Flash tables OK
Initialization complete

System name set to HELLO

Group name set to 

Program version set to 2.1

Program file set to .\HELLO.HEX

Program name set to HELLO
File format set to HEX

Hello world

Start flash programming ...

Program name already in flash directory!

Boot program set to HELLO (start vector = 
8000:0000)

Start shutdown ...

Flash tables not changed
Shutdown complete