aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--.vscode/settings.json4
-rw-r--r--.vscode/tasks.json58
-rw-r--r--client/main.c1
-rw-r--r--client/makefile27
-rw-r--r--makefile44
-rw-r--r--readme.md88
-rw-r--r--robot/main.c (renamed from main.c)0
-rw-r--r--robot/makefile42
-rw-r--r--robot/readme.md10
10 files changed, 223 insertions, 56 deletions
diff --git a/.gitignore b/.gitignore
index 6c066de..e76e25e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
compile_commands.json
*.o
-out.hex
-a.out
+robot/out.hex
+robot/a.out
+client/main
.cache
*.log
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 5647e49..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "makefile.extensionOutputFolder": "./.vscode",
- "makefile.makefilePath": "makefile"
-} \ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..056c4b9
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,58 @@
+{
+ "version": "2.0.0",
+ "command": "sh",
+ "options": { "cwd": "${workspaceFolder}" },
+ "args": [ "-c" ],
+ "tasks": [
+ {
+ "label": "build client",
+ "group": {
+ "isDefault": false,
+ "kind": "build"
+ },
+ "args": [ "make", "-C", "client" ],
+ "command": "",
+ "type": "shell"
+ },
+ {
+ "label": "build robot",
+ "group": {
+ "isDefault": false,
+ "kind": "build"
+ },
+ "args": [ "make", "-C", "robot" ],
+ "command": "",
+ "type": "shell"
+ },
+ {
+ "label": "flash robot",
+ "group": {
+ "isDefault": false,
+ "kind": "test"
+ },
+ "args": [ "make", "flash", "-C", "robot" ],
+ "command": "",
+ "type": "shell"
+ },
+ {
+ "label": "clean directories",
+ "group": {
+ "isDefault": false,
+ "kind": "none"
+ },
+ "args": [ "make", "clean" ],
+ "command": "",
+ "type": "shell"
+ },
+ {
+ "label": "format source files",
+ "group": {
+ "isDefault": false,
+ "kind": "none"
+ },
+ "args": [ "make", "format" ],
+ "command": "",
+ "type": "shell"
+ },
+ ]
+}
diff --git a/client/main.c b/client/main.c
new file mode 100644
index 0000000..76e8197
--- /dev/null
+++ b/client/main.c
@@ -0,0 +1 @@
+int main() { return 0; }
diff --git a/client/makefile b/client/makefile
new file mode 100644
index 0000000..dcba6f3
--- /dev/null
+++ b/client/makefile
@@ -0,0 +1,27 @@
+CC = gcc
+LD = gcc
+RM = rm -f
+CFLAGS =
+EXECNAME = main
+
+SOURCES := $(wildcard *.c)
+HEADERS := $(wildcard *.h)
+OBJECTS := $(patsubst %.c,%.o, $(SOURCES))
+
+all: main
+
+.o:
+ $(CC) -c $(CFLAGS) $<
+
+$(EXECNAME): $(OBJECTS)
+ $(CC) $(OBJECTS) -o $(EXECNAME)
+
+clean:
+ $(RM) $(EXECNAME) *.o
+
+format:
+ clang-format -i $(SOURCES) $(HEADERS)
+
+compile_commands: clean
+ bear -- make
+
diff --git a/makefile b/makefile
index 6ded896..7795106 100644
--- a/makefile
+++ b/makefile
@@ -1,42 +1,8 @@
-DEVICE = atmega328p
-MCU = atmega328p
-AVRDUDE_DEVICE = m328p
-DEVICE ?= atmega168
-MCU ?= atmega168
-AVRDUDE_DEVICE ?= m168
+SUBDIRS := client robot
-CFLAGS=-g -Wall -mcall-prologues -mmcu=$(MCU) $(DEVICE_SPECIFIC_CFLAGS) -Os
-LDFLAGS=-Wl,-gc-sections -lpololu_$(DEVICE) -Wl,-relax
+all clean format compile_commands: $(SUBDIRS) FORCE
-PORT ?= /dev/ttyACM0
+$(SUBDIRS): FORCE
+ $(MAKE) -C $@ $(MAKECMDGOALS)
-SOURCES := $(wildcard *.c)
-HEADERS := $(wildcard *.h)
-OBJECTS := $(patsubst %.c,%.o, $(SOURCES))
-
-AVRDUDE=avrdude
-CC=avr-gcc
-OBJ2HEX=avr-objcopy
-
-all: out.hex
-
-clean:
- rm -f *.o out.hex a.out compile_commands.json
-
-a.out: $(OBJECTS)
- $(CC) $(OBJECTS) $(CFLAGS) $(LDFLAGS)
-
-.o:
- $(CC) -c $(CFLAGS) $<
-
-out.hex: a.out
- $(OBJ2HEX) -R .eeprom -O ihex $< $@
-
-flash: out.hex
- $(AVRDUDE) -p $(AVRDUDE_DEVICE) -c avrisp2 -P $(PORT) -U flash:w:out.hex
-
-format:
- clang-format -i $(SOURCES) $(HEADERS)
-
-compile_commands: clean
- bear -- make
+FORCE: \ No newline at end of file
diff --git a/readme.md b/readme.md
index bfa15dd..cb004ba 100644
--- a/readme.md
+++ b/readme.md
@@ -3,19 +3,85 @@
- [link naar robot productpagina](https://www.pololu.com/product/975/resources)
- [link naar wixel productpagina](https://www.pololu.com/product/1336/resources)
-## make gedoe
+het project is opgedeeld in twee submappen, een voor de code die op de robot
+zelf draait, en een programma dat op een computer draait en de robot kan
+aansturen.
-deze commando's kun je uitvoeren op de command-line als je alle build tools
-goed geïnstalleerd hebt. er hoort ook een configuratie te zijn voor visual
-studio code. hievoor moet je de [makefile tools
-extensie](https://marketplace.visualstudio.com/items?itemName=ms-vscode.makefile-tools)
-installeren.
+voor de client worden sommige externe libraries gebruikt, hier is een lijst met
+gebruikte externe libraries:
+
+|naam|doel|
+|-|-|
+|[yan9a/serial](https://github.com/yan9a/serial)|cross-compatibiliteit voor seriële poorten lezen/schrijven voor windows en linux|
+
+## noob hoek
+
+hier wat korte uitleg over dingen die niet zijn uitgelegd in vorige blokken van
+de opleiding:
+
+### make
+
+make is een los build-systeem. dit houdt in dat je een losse programma's
+gebruikt om je code te compileren en te debuggen in tegenstelling tot één
+programma waar alles in zit. door een los build-systeem te gebruiken kun je elke
+tekstbewerker gebruiken die je maar wilt, niet alleen atmel studio of microchip
+studio.
+
+make wordt geconfigureerd via een _makefile_. hier staat in hoe je code
+gecompileerd moet worden. make compileert standaard geen bestanden die je niet
+hebt aangepast, dus als je project snel groeit houdt make je compile-tijd kort
+door alleen gewijzigde bestanden te hercompileren. hier zijn wat standaard make
+commando's die voor dit project in zowel de robot map als de client map zullen
+werken:
```sh
-make # build
-make flash # upload executable to robot
-make clean # clean working directory
-make format # format source and header files
-make compile_commands # generate compile_commands.json (clangd)
+make # alle (gewijzigde) bestanden compileren
+make clean # rommel opschonen uit je werkmap (.o bestanden, etc.)
+make format # alle bronbestanden (.c, .h) formatten
```
+als je deze commando's niet wil onthouden heb ik (loek) ook een visual studio
+configuratie gemaakt die automatisch laadt wanneer je de projectmap opent. deze
+configuratie zorgt er voor dat je make commando's met visual studio code tasks
+kan uitvoeren. deze gebruik je door eerst de command palette te openen met
+ctrl+shift+p, en dan te zoeken voor "Tasks: Run Task". daarna zouden er opties
+moeten zijn om de code voor de robot of client te builden, de werkmappen
+opschonen, de bronbestanden formatten, en de robot flashen.
+
+### git
+
+git is het versiebeheersysteem dat we in dit project gaan gebruiken. een project
+in git wordt ook soms een _repository_ genoemd. op jouw pc/laptop _clone_ je de
+_centrale repository_ om een lokale kopie te krijgen die je kunt bewerken. git
+houdt elke 'versie' bij van je project in zogehete _commits_. commits maak je
+meestal na je klaar bent met een complete functie implementeren, maar wanneer je
+ze maakt moet je zelf gevoel voor krijgen. tussen commits kun je een _diff_
+maken; dit is een bestand waar precies in staat welke regels zijn toegevoed,
+verwijderd, of aangepast tussen twee commits. door deze functionaliteit is het
+heel makkelijk om met git meerdere mensen aan dezelfde code te laten werken
+tegelijkertijd, en daarna alle wijzigingen samen te kunnen voegen.
+
+voor gemak werkt iedereen op zijn eigen _branch_, met hun eigen naam. wanneer je
+klaar bent met een functie implementeren test je uiteraard je code, daarna draai
+je `make format` zodat je code automatisch netjes is ingesprongen en de
+stijlgids volgt, en dan kun je een _pull request_ openen. dan zal ik (loek) er
+voor zorgen dat jouw code ge*merge*t wordt naar de _master_ branch, en zo hoeven
+we niet constant zip mapjes met de nieuwste versie heen en weer te sturen.
+
+wanneer je een commit maakt, staat deze alleen op je eigen laptop/pc. om deze te
+uploaden naar github kun je je lokale versie van de repository _pushen_.
+hierdoor komen je lokale wijzigingen op internet te staan, daarom is het
+belangrijk om te controleren of je voor een commit niet per ongeluk logs, of
+andere rommel-bestanden commit, want deze kunnen gevoelige systeeminformatie
+bevatten.
+
+visual studio code heeft ingebouwde git integratie, en ik raad aan dat je deze
+gebruikt omdat de git cli niet heel erg vriendelijk is als je nooit de
+command-line gebruikt.
+[hier](https://docs.microsoft.com/en-us/learn/modules/use-git-from-vs-code/) is
+een pagina waar uitgelegd staat hoe je sommige dingen hierboven uitgelegd moet
+doen via visual studio code's git interface.
+
+[dit](https://www.youtube.com/watch?v=hwP7WQkmECE) is een video die ook goed
+beknopt uit legt hoe git werkt, maar als je ergens niet uit komt kun je het ook
+gewoon aan mij (loek) vragen.
diff --git a/main.c b/robot/main.c
index dfc8d68..dfc8d68 100644
--- a/main.c
+++ b/robot/main.c
diff --git a/robot/makefile b/robot/makefile
new file mode 100644
index 0000000..d01ad30
--- /dev/null
+++ b/robot/makefile
@@ -0,0 +1,42 @@
+DEVICE = atmega328p
+MCU = atmega328p
+AVRDUDE_DEVICE = m328p
+DEVICE ?= atmega168
+MCU ?= atmega168
+AVRDUDE_DEVICE ?= m168
+
+CFLAGS=-g -Wall -mcall-prologues -mmcu=$(MCU) $(DEVICE_SPECIFIC_CFLAGS) -Os
+LDFLAGS=-Wl,-gc-sections -lpololu_$(DEVICE) -Wl,-relax
+
+PORT ?= /dev/ttyACM1
+
+SOURCES := $(wildcard *.c)
+HEADERS := $(wildcard *.h)
+OBJECTS := $(patsubst %.c,%.o, $(SOURCES))
+
+AVRDUDE=avrdude
+CC=avr-gcc
+OBJ2HEX=avr-objcopy
+
+all: out.hex
+
+clean:
+ rm -f *.o out.hex a.out compile_commands.json
+
+a.out: $(OBJECTS)
+ $(CC) $(OBJECTS) $(CFLAGS) $(LDFLAGS)
+
+.o:
+ $(CC) -c $(CFLAGS) $<
+
+out.hex: a.out
+ $(OBJ2HEX) -R .eeprom -O ihex $< $@
+
+flash: out.hex
+ $(AVRDUDE) -p $(AVRDUDE_DEVICE) -c avrisp2 -P $(PORT) -U flash:w:out.hex
+
+format:
+ clang-format -i $(SOURCES) $(HEADERS)
+
+compile_commands: clean
+ bear -- make
diff --git a/robot/readme.md b/robot/readme.md
new file mode 100644
index 0000000..5c2aa13
--- /dev/null
+++ b/robot/readme.md
@@ -0,0 +1,10 @@
+# robot code
+
+dit is de submap voor alle code die op de robot zelf draait
+
+## make gedoe
+
+om de code te uploaden naar de robot moet je de juiste com-poort instellen in de
+makefile in deze map (regel waar `PORT ?= /dev/ttyACM0` staat). deze kun je
+waarschijnlijk vinden in apparaatbeheer op windows. daarna kun je `make flash`
+uitvoeren om de code te uploaden