![Page 1: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/1.jpg)
Ambiente de DesenvolvimentoWalter Fetter [email protected]
Universidade Federal do Rio Grande do Sul
Escola de Engenharia
Departamento de Sistemas Elétricos de Automação e Energia
ENG04056 Microcontroladores
Copyright (c) Walter Fetter Lages – p.1
![Page 2: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/2.jpg)
Tópicos
• Editor de Textos• Compilador• Montador• Linker
• Linkagem Incremental• Linkagem Estática• Linkagem Dinâmica
• Make• Gerenciador de Bibliotecas• Depurador• Ambiente Integrado de Desenvolvimento
Copyright (c) Walter Fetter Lages – p.2
![Page 3: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/3.jpg)
Introdução
• Linguagem de máquina• Assembly• Montador• Compilador• SistemaHost• SistemaTarget
Copyright (c) Walter Fetter Lages – p.3
![Page 4: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/4.jpg)
Editor de Textos
• Produz o arquivo fonte (.c, .pas, .java,.cpp, . . . )• MS-DOS Editor (edit)• Windows notepad (notepad)• Norton Editor (ne)• Brief (brief)• Windows Programmer’s Editor (wpe)• Joe’s Own Editor (joe)• Visual Editor (vi)• VI Improoved (vim)• KDE Text Editor (kedit)• Editor of Macros (emacs)
Copyright (c) Walter Fetter Lages – p.4
![Page 5: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/5.jpg)
Compilador
• Traduz os módulos fonte para outra linguagem(.asm, .s) ou para módulos objeto (.obj, .o)• Microsoft C (cc)• Turbo Pascal (tpc)• Turbo C++ (tcc)• Borland C++ (bcc)• GNU Compiler Collection (gcc, g++, g77,gjc, . . . )
Copyright (c) Walter Fetter Lages – p.5
![Page 6: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/6.jpg)
Montador
• Traduz os módulos fonte em Assembly (.asm,.s) para módulos objeto (.obj, .o)• Microsoft Macro Assembler (ml, masm)• Turbo Assembler (tasm)• GNU Assembler (as)• Netwide Assembler (nasm)
Copyright (c) Walter Fetter Lages – p.6
![Page 7: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/7.jpg)
Linker
• Liga os diversos módulos objeto (.obj, .o) paracriar:• um programa executável, ou• um módulo maior, ou• uma biblioteca de linkagem dinâmica
• As referências internas são resolvidas• Microsoft Linker (link)• Turbo Linker (tlink)• GNU Linker (ld, collect2)
Copyright (c) Walter Fetter Lages – p.7
![Page 8: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/8.jpg)
Fluxo Mínimo
Editor deTexto
programa
programafonte.c, .pas, .cpp, . . .
. . .
. . .
Compiladorou
Montador
móduloobjeto.o
Linker
executável(sem extensão)
SistemaOperacional
processo
Copyright (c) Walter Fetter Lages – p.8
![Page 9: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/9.jpg)
Gerenciador de Bibliotecas
• Agrupa diversos módulos objeto (.obj, .o) emum arquivo de biblioteca (.lib, .a)
• As referências internasnãosão resolvidas• A unidade de linkagem é o módulo objeto
• Microsoft Library Manager (lib)• Turbo Library Manager (tlib)• GNU Archive (ar)
Copyright (c) Walter Fetter Lages – p.9
![Page 10: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/10.jpg)
Depurador
• debug• Codeview (cv)• Turbo Debugger (td)• GNU Debuger (gdb)
• Front-ends (xxgdb, kdbg)
Copyright (c) Walter Fetter Lages – p.10
![Page 11: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/11.jpg)
Linkagem Incremental
• Diversos módulos objeto são ligados para formarum módulo objeto maior
• São resolvidas as referências internas
Copyright (c) Walter Fetter Lages – p.11
![Page 12: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/12.jpg)
Linkagem Estática
• Um ou mais módulos são ligados para criar umprograma executável (.exe) ou imagem binária(.com)
• Podem ser ligados módulos em sí ou móduloscontidos em bibliotecas estáticas
• Cada programa tem a sua própria copia dosmódulos objeto (.obj, .o)
Copyright (c) Walter Fetter Lages – p.12
![Page 13: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/13.jpg)
Linkagem Dinâmica
• Bibliotecas dinâmicas (.dll, .so) não sãoligadas com o programa pelo linker
• Carregada pelo sistema operacional• Compartilhada por todos os programas que usam
a biblioteca dinâmica
Copyright (c) Walter Fetter Lages – p.13
![Page 14: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/14.jpg)
Fluxo Completo
Editor deTexto
programa
programafonte.c, .pas, .cpp, . . .
. . .
. . .
Compiladorou
Montador
módulo
módulo
objeto
objeto
.o
.o
Linker
executável(sem extensão)
SistemaOperacional
processo
biblioteca
biblioteca
dinâmicalib .so
estáticalib .a imagem
binária.bin
(E)EPROM
Gerenciadorde
Biblioteca
...
Copyright (c) Walter Fetter Lages – p.14
![Page 15: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/15.jpg)
Make
• Programa para automatizar e otimizar o processode compilação e linkagem
• Executa apenas os procedimentos que sãonecessários
• Funciona baseado na comparação das datas ehoras dos arquivos
• Makefile = Arquivo interpretado pelomake• Microsoft Program Maintenance Utility
(make, nmake)• Borland Make (make)• GNU Make (make)
Copyright (c) Walter Fetter Lages – p.15
![Page 16: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/16.jpg)
IDE
• Editor, Compilador, Linker, Make, . . . integrados• Alguns podem ser configurados para utilizar
diversos compiladores, linkers, . . .• Microsoft Visual C (msc)• Turbo Pascal (turbo)• Borland C++ (bc)• Windows Programmer’s Editor (wpe)• KDE Development Environment
(kdevelop)
Copyright (c) Walter Fetter Lages – p.16
![Page 17: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/17.jpg)
Exemplo 1
• Hello, World! em C• hello.c• Makefile
Copyright (c) Walter Fetter Lages – p.17
![Page 18: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/18.jpg)
hello.c
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("Hello, world!\n");
return 0;
}
Copyright (c) Walter Fetter Lages – p.18
![Page 19: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/19.jpg)
Makefile
1 TARGET=hello
2 SRCS=$(TARGET).c
3
4 FLAGS=-O2 -Wall -MMD
5 INCLUDE=-I. -I$(HOME)/include
6 LIBDIR=-L$(HOME)/lib
7 LIBS=
8
9 CC=gcc
10 CFLAGS=$(FLAGS) $(INCLUDE)
11 LDFLAGS=$(LIBDIR) $(LIBS)
Copyright (c) Walter Fetter Lages – p.19
![Page 20: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/20.jpg)
Makefile – Continuação
13 all: $(TARGET)
14
15 $(TARGET): $(SRCS:.c=.o)
16 $(CC) -o $@ $^ $(LDFLAGS)
17
18 %.o: %.c
19 $(CC) $(CFLAGS) -c -o $@ $<
20
21 -include $(SRCS:.c=.d)
22
23 clean:
24 rm -f *~ *.bak *.o *.d
25
26 distclean: clean
27 rm -f $(TARGET)
Copyright (c) Walter Fetter Lages – p.20
![Page 21: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/21.jpg)
Exemplo 2
• Hello, World! em C++• hello.cpp• Makefile
Copyright (c) Walter Fetter Lages – p.21
![Page 22: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/22.jpg)
hello.cpp
#include <iostream>
int main(int argc,char *argv[])
{
std::cout << "Hello, world!" << std::endl;
return 0;
}
Copyright (c) Walter Fetter Lages – p.22
![Page 23: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/23.jpg)
Makefile
1 TARGET=hello
2 SRCS=$(TARGET).cpp
3
4 FLAGS=-O2 -Wall -MMD
5 INCLUDE=-I. -I$(HOME)/include -I$(HOME)/include/cpp
6 LIBDIR=-L$(HOME)/lib
7 LIBS=
8
9 CXX=g++
10 CXXFLAGS=$(FLAGS) $(INCLUDE)
11 LDFLAGS=$(LIBDIR) $(LIBS)
Copyright (c) Walter Fetter Lages – p.23
![Page 24: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/24.jpg)
Makefile – Continuação
13 all: $(TARGET)
14
15 $(TARGET): $(SRCS:.cpp=.o)
16 $(CXX) -o $@ $^ $(LDFLAGS)
17
18 %.o: %.cpp
19 $(CXX) $(CXXFLAGS) -c -o $@ $<
20
21 -include $(SRCS:.cpp=.d)
22
23 clean:
24 rm -f *~ *.bak *.o *.d
25
26 distclean: clean
27 rm -f $(TARGET)
Copyright (c) Walter Fetter Lages – p.24
![Page 25: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/25.jpg)
Exemplo 3
• Hello, World! em Assembly• Utiliza serviço do Linux para mostrarstring• Sintaxe dogas
• hello.s• Makefile
Copyright (c) Walter Fetter Lages – p.25
![Page 26: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/26.jpg)
hello.s
.intel_syntax noprefix
.text
.global _start
_start: mov edx,offset len # message length
mov ecx,offset msg # pointer to message to write
mov ebx,1 # file handle (stdout)
mov eax,4 # system call number (sys_write)
int 0x80 # call kernel
mov ebx,0 # first argument: exit code
mov eax,1 # system call number (sys_exit)
int 0x80 # call kernel
.data
msg: .string "Hello, world!\n"
len= . - msg
Copyright (c) Walter Fetter Lages – p.26
![Page 27: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/27.jpg)
Makefile
1 TARGET=hello
2 SRCS=$(TARGET).s
3
4 FLAGS=--gstabs -a=‘echo $@ | cut -f 1 -d.‘.lst \
5 -MD=‘echo $@ | cut -f 1 -d.‘.d
6 INCLUDE=
7 LIBDIR=
8 LIBS=
9
10 AS=as
11 ASFLAGS=$(FLAGS) $(INCLUDE)
12 LD=ld
13 LDFLAGS=
Copyright (c) Walter Fetter Lages – p.27
![Page 28: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/28.jpg)
Makefile – Continuação
14
15 all: $(TARGET)
16
17 $(TARGET): $(SRCS:.s=.o)
18 $(LD) $(LDFLAGS) -o $@ $(LIBS) $^
19
20 %.o: %.s
21 $(AS) $(ASFLAGS) -o $@ $<
22
23 -include $(SRCS:.s=.d)
24
25 clean:
26 rm -f *~ *.bak *.o *.d *.lst
Copyright (c) Walter Fetter Lages – p.28
![Page 29: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/29.jpg)
Exemplo 4
• Hello, World! com interface gráfica• Utiliza o toolkit Qt versão 4
• hello.cpp• makefile
• makefile tem prioridade sobre o Makefile• Utiliza qmake para gerar Makefile
Copyright (c) Walter Fetter Lages – p.29
![Page 30: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/30.jpg)
hello.cpp
#include <QApplication>
#include <QPushButton>
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QPushButton hello("Hello, world!",0);
hello.show();
return app.exec();
}
Copyright (c) Walter Fetter Lages – p.30
![Page 31: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/31.jpg)
makefile
1 TARGET=hello
2
3 QMAKE=qmake
4
5 all: $(TARGET)
6
7 $(TARGET): Makefile
8 $(MAKE) -f Makefile
9
10 Makefile: $(TARGET).pro
11 $(QMAKE) -o $@
12
13 $(TARGET).pro: $(PWD)
14 $(QMAKE) -project -o $@
Copyright (c) Walter Fetter Lages – p.31
![Page 32: Walter Fetter Lages Universidade Federal do Rio Grande do ...fetter/eng04056/sdk.pdf · • KDE Text Editor (kedit)](https://reader031.vdocuments.net/reader031/viewer/2022020303/5b56a81d7f8b9a8f128caf82/html5/thumbnails/32.jpg)
Referências[1] S. Chamberlain and I. L. Taylor.Using ld, the GNU Linker, 2003.
<http://sourceware.org/binutils/docs>.
[2] D. Elsner, J. Fenlason, and friends.Using as, the GNU Assembler, 2002.
<http://sourceware.org/binutils/docs>.
[3] R. H. Pesch, J. M. Osier, and Cygnus Support.The GNU Binary Utilities, 1993.
<http://sourceware.org/binutils/docs>.
[4] R. M. Stallman, R. McGrath, and P. Smith.GNU Make, A Program for Directing
Recompilation. Boston, 2002.
<http://www.gnu.org/software/make/manual/make.pdf>.
[5] R. M. Stallman, R. Pesch, S. Shebs, and etal.Debugging with GDB, The GNU Source-Level
Debugger. Boston, 2002.
<http://sourceware.org/gdb/current/onlinedocs/gdb.pdf.gz>.
[6] R. M. Stallman and The GCC Developer Community.Using the GNU Compiler Collection,
2004.<http://gcc.gnu.org/onlinedocs/gcc>.
Copyright (c) Walter Fetter Lages – p.32