Add other gobble programs

This commit is contained in:
Michael Hayes
2013-09-29 21:24:38 +13:00
parent 9d96f739c0
commit 36d8c942e2
15 changed files with 1153 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 12 Sep 2010
# Descr: Makefile for gobble1
# Definitions.
CC = avr-gcc
CFLAGS = -mmcu=atmega32u2 -Os -Wall -Wstrict-prototypes -Wextra -g -I../../drivers/avr -I../../drivers -I../../utils
OBJCOPY = avr-objcopy
SIZE = avr-size
DEL = rm
# Default target.
all: gobble1.out
# Compile: create object files from C source files.
gobble1.o: gobble1.c ../../drivers/avr/system.h ../../drivers/display.h ../../utils/font.h ../../utils/pacer.h ../../utils/tinygl.h
$(CC) -c $(CFLAGS) $< -o $@
pio.o: ../../drivers/avr/pio.c ../../drivers/avr/pio.h ../../drivers/avr/system.h
$(CC) -c $(CFLAGS) $< -o $@
system.o: ../../drivers/avr/system.c ../../drivers/avr/system.h
$(CC) -c $(CFLAGS) $< -o $@
timer.o: ../../drivers/avr/timer.c ../../drivers/avr/system.h ../../drivers/avr/timer.h
$(CC) -c $(CFLAGS) $< -o $@
display.o: ../../drivers/display.c ../../drivers/avr/system.h ../../drivers/display.h ../../drivers/ledmat.h
$(CC) -c $(CFLAGS) $< -o $@
ledmat.o: ../../drivers/ledmat.c ../../drivers/avr/pio.h ../../drivers/avr/system.h ../../drivers/ledmat.h
$(CC) -c $(CFLAGS) $< -o $@
font.o: ../../utils/font.c ../../drivers/avr/system.h ../../utils/font.h
$(CC) -c $(CFLAGS) $< -o $@
pacer.o: ../../utils/pacer.c ../../drivers/avr/system.h ../../drivers/avr/timer.h ../../utils/pacer.h
$(CC) -c $(CFLAGS) $< -o $@
tinygl.o: ../../utils/tinygl.c ../../drivers/avr/system.h ../../drivers/display.h ../../utils/font.h ../../utils/tinygl.h
$(CC) -c $(CFLAGS) $< -o $@
# Link: create output file (executable) from object files.
gobble1.out: gobble1.o pio.o system.o timer.o display.o ledmat.o font.o pacer.o tinygl.o
$(CC) $(CFLAGS) $^ -o $@ -lm
$(SIZE) $@
# Create hex file for programming from executable file.
gobble1.hex: gobble1.out
$(OBJCOPY) -O ihex gobble1.out gobble1.hex
# Target: clean project.
.PHONY: clean
clean:
-$(DEL) *.o *.out *.hex
# Target: program project.
.PHONY: program
program: gobble1.hex
dfu-programmer atmega32u2 erase; dfu-programmer atmega32u2 flash gobble1.hex; dfu-programmer atmega32u2 start
+61
View File
@@ -0,0 +1,61 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 11 Sep 2010
# Descr: Makefile for gobble1
CC = gcc
CFLAGS = -Wall -Wstrict-prototypes -Wextra -g -I../../drivers/test -I../../drivers -I../../utils
DEL = rm
# Default target.
all: gobble1
# Compile: create object files from C source files.
gobble1-test.o: gobble1.c ../../drivers/display.h ../../drivers/test/system.h ../../utils/font.h ../../utils/pacer.h ../../utils/tinygl.h
$(CC) -c $(CFLAGS) $< -o $@
display-test.o: ../../drivers/display.c ../../drivers/display.h ../../drivers/ledmat.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
ledmat-test.o: ../../drivers/ledmat.c ../../drivers/ledmat.h ../../drivers/test/avrtest.h ../../drivers/test/pio.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
mgetkey-test.o: ../../drivers/test/mgetkey.c ../../drivers/test/mgetkey.h
$(CC) -c $(CFLAGS) $< -o $@
pio-test.o: ../../drivers/test/pio.c ../../drivers/test/avrtest.h ../../drivers/test/pio.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
system-test.o: ../../drivers/test/system.c ../../drivers/test/avrtest.h ../../drivers/test/mgetkey.h ../../drivers/test/pio.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
timer-test.o: ../../drivers/test/timer.c ../../drivers/test/system.h ../../drivers/test/timer.h
$(CC) -c $(CFLAGS) $< -o $@
font-test.o: ../../utils/font.c ../../drivers/test/system.h ../../utils/font.h
$(CC) -c $(CFLAGS) $< -o $@
pacer-test.o: ../../utils/pacer.c ../../drivers/test/system.h ../../drivers/test/timer.h ../../utils/pacer.h
$(CC) -c $(CFLAGS) $< -o $@
tinygl-test.o: ../../utils/tinygl.c ../../drivers/display.h ../../drivers/test/system.h ../../utils/font.h ../../utils/tinygl.h
$(CC) -c $(CFLAGS) $< -o $@
# Link: create executable file from object files.
gobble1: gobble1-test.o display-test.o ledmat-test.o mgetkey-test.o pio-test.o system-test.o timer-test.o font-test.o pacer-test.o tinygl-test.o
$(CC) $(CFLAGS) $^ -o $@ -lrt
# Clean: delete derived files.
.PHONY: clean
clean:
-$(DEL) gobble1 gobble1-test.o display-test.o ledmat-test.o mgetkey-test.o pio-test.o system-test.o timer-test.o font-test.o pacer-test.o tinygl-test.o
+45
View File
@@ -0,0 +1,45 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 11 Sep 2010
# Descr: Makefile for led5 docs
# The scripts used to make the graphs require the program dot; this
# is part of the graphviz package.
DEL = rm
all: file_dependencies.pdf module_dependencies.pdf makefile_dependencies.pdf build_dependencies.pdf callgraph.pdf
file_dependencies.pdf: files.d
../../../etc/graphdeps.py $< --out $@
module_dependencies.pdf: modules.d
../../../etc/graphdeps.py $< --modules --rotate --out $@
makefile_dependencies.pdf: ../Makefile
../../../etc/graphdeps.py $< --out $@
build_dependencies.pdf: ../Makefile
../../../etc/graphdeps.py $< --out $@ --showops
callgraph.pdf: callgraph.d
../../../etc/graphdeps.py --calls --modules $< --out $@ --showops
files.d: ../Makefile
(cd ..; ../../etc/makemake.py --relpath --files . . ../../drivers ../../drivers/avr ../../utils ../../extra --exclude system.h > doc/files.d)
modules.d: ../Makefile
(cd ..; ../../etc/makemake.py --relpath --modules . . ../../drivers ../../drivers/avr ../../utils ../../extra --exclude system > doc/modules.d)
callgraph.d: ../Makefile
(cd ..; ../../etc/makemake.py --cc="avr-gcc" --cflags="-Os -mmcu=atmega32u2" --relpath --calls . . ../../drivers ../../drivers/avr ../../utils ../../extra --exclude system.h > doc/callgraph.d)
# Clean: delete derived files.
.PHONY: clean
clean:
-$(DEL) *.d *.pdf
+16
View File
@@ -0,0 +1,16 @@
Running make in this directory will generate a number of PDF graphs.
In the callgraph, the arrows means "calls". In the dependency graphs,
the arrows means "requires" (or "depends upon").
callgraph.pdf This shows the callgraph, i.e., what functions each
function in the program calls.
module_dependencies.pdf This shows the dependencies between the modules.
file_dependencies.pdf This shows the dependencies between the files.
makefile_dependencies.pdf This shows the dependencies required by make when
building the program.
build_dependencies.pdf This is like makefile_dependencies.pdf but shows
the operations performed to generate the new file.
callgraph.d This shows the callgraph in text format.
files.d This shows the file dependencies in text format.
modules.d This shows the module dependencies in text format.
+157
View File
@@ -0,0 +1,157 @@
/** @file gobble2.c
@author M.P. Hayes
@date 28 Sep 2013
@brief
*/
#include <stdlib.h>
#include "system.h"
#include "pacer.h"
#include "tinygl.h"
/* Number of initial objects. */
#define NUM_MONSTERS 6
#define LOOP_RATE 300
#define MOVE_RATE 10
typedef struct monster_struct
{
tinygl_point_t pos;
bool alive;
} monster_t;
static int8_t monster_find (monster_t *monsters, uint8_t num,
uint8_t x, uint8_t y)
{
uint8_t i;
for (i = 0; i < num; i++)
{
if (monsters[i].pos.x == x
&& monsters[i].pos.y == y
&& monsters[i].alive)
return i;
}
return -1;
}
static int8_t monster_choose (monster_t *monsters, uint8_t num)
{
while (1)
{
int8_t this;
this = rand () % num;
if (monsters[this].alive)
return this;
}
}
static void monster_move (monster_t *monsters, uint8_t num)
{
uint8_t x;
uint8_t y;
uint8_t this;
this = monster_choose (monsters, num);
tinygl_draw_point (monsters[this].pos, 0);
x = monsters[this].pos.x;
y = monsters[this].pos.y;
while (1)
{
int8_t dx[] = {
int8_t dx;
int8_t dy;
dx = (rand () % 3) - 1;
dy = (rand () % 3) - 1;
if ((dx || dy)
&& x + dx >= 0 && x + dx < TINYGL_WIDTH
&& y + dy >= 0 && y + dy < TINYGL_HEIGHT)
{
int8_t other;
other = monster_find (monsters, num, x + dx, y + dy);
if (other != -1)
monsters[other].alive = 0;
monsters[this].pos.x = x + dx;
monsters[this].pos.y = y + dy;
tinygl_draw_point (monsters[this].pos, 1);
return;
}
}
}
static void monsters_create (monster_t *monsters, uint8_t num)
{
uint8_t i;
for (i = 0; i < num; i++)
{
uint8_t x;
uint8_t y;
do
{
x = rand () % TINYGL_WIDTH;
y = rand () % TINYGL_HEIGHT;
} while (monster_find (monsters, i, x, y) != -1);
monsters[i].pos.x = x;
monsters[i].pos.y = y;
monsters[i].alive = 1;
tinygl_draw_point (tinygl_point (x, y), 1);
}
}
int main (void)
{
uint16_t tick = 0;
uint8_t col;
monster_t monsters[NUM_MONSTERS];
system_init ();
tinygl_init (LOOP_RATE);
pacer_init (LOOP_RATE);
monsters_create (monsters, NUM_MONSTERS);
while (1)
{
/* Refresh monsters. */
for (col = 0; col < TINYGL_WIDTH; col++)
{
pacer_wait ();
tinygl_update ();
}
tick++;
if (tick >= LOOP_RATE / MOVE_RATE)
{
tick = 0;
monster_move (monsters, NUM_MONSTERS);
}
}
return 0;
}