Systemy wbudowane
Sprawozdanie laboratoryjne
Ćw. nr 2
Temat: Warsztat projektanta systemów
mikrokomputerowych – środowiska uruchomieniowe
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.
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 #~~~~~~~~#
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 ...
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