Project

General

Profile

Revision 1346

Added by Chris Mar almost 12 years ago

added branch for colony scout

View differences:

branches/scout/projects/diagnostic_station/station/test_motors.c
1
#include "test_motors.h"
2
#include "global.h"
3

  
4
#include "comm_robot.h"
5
#include "hardware_dynamos.h"
6

  
7

  
8
// ******************
9
// ** Data sending **
10
// ******************
11

  
12
static void send_motor_data (uint8_t num, uint8_t direction, char *acceleration_string,
13
	uint8_t num_steps, uint8_t *data_pwm, int16_t *data_velocity)
14
{
15
	if (direction!=motor_direction_off)
16
	{
17
		usb_puts ("data motor ");
18
		usb_puti (num);
19
		usb_puts (" ");
20
		usb_puts (motor_direction_string (direction));
21
		usb_puts (" ");
22
		usb_puts (acceleration_string);
23
		usb_puts (" ");
24
			
25
		for (uint8_t i=0; i<num_steps; ++i)
26
		{
27
			usb_putc (' ');
28
			usb_puti (data_pwm[i]);
29
			usb_putc ('/');
30
			usb_puti (data_velocity[i]);
31
		}
32

  
33
		usb_puts (NL);
34
	}
35
}
36

  
37

  
38
// ************************
39
// ** Internal functions **
40
// ************************
41

  
42
	// One way to do it
43
/* 	#define vel_inc 10 */
44
/* 	#define vel_steps 12 */
45
/* 	#define vel_min 140 */
46
/* 	#define vel_max 250 */
47
/* 	#define velocity_steady_delay 400 */
48

  
49
	// More steps at smaller intervals. We don't need so much delay here.
50
 	#define vel_inc 2
51
 	#define vel_steps 56
52
 	#define vel_min 140
53
 	#define vel_max 250
54
 	#define velocity_steady_delay 50
55

  
56
//	#define vel_inc 2
57
//	#define vel_steps 12
58
//	#define vel_min 150
59
//	#define vel_max 172
60
//	#define velocity_steady_delay 50
61

  
62
	
63

  
64

  
65
static void test_motors_direction_acceleration (uint8_t direction1, uint8_t direction2, uint8_t pwm_start, uint8_t num_steps, int8_t pwm_step, char *acceleration_string)
66
{
67
	// Allocate space for the data on the stack
68
//	uint8_t  *data_pwm       =malloc (num_steps*sizeof (uint8_t ));
69
//	int16_t *data_velocity_l =malloc (num_steps*sizeof (uint16_t));
70
//	int16_t *data_velocity_r =malloc (num_steps*sizeof (uint16_t));
71

  
72
	uint8_t pwm=pwm_start;
73
	int16_t left;
74
	int16_t right;
75

  
76
	for (uint8_t i=0; i<num_steps; ++i)
77
	{
78
		robot_set_motors (direction1, pwm, direction2, pwm);
79

  
80
		// Wait some fixed time for the velocity to reach steady state. This could be improved.
81
		delay_ms (velocity_steady_delay);
82

  
83
		// Store it
84
		//data_pwm[i]=pwm;
85

  
86
		// Reset the dynamos, wait some time, then read the dynamos.
87
		// Nothing else should go between dynamos_reset and dynamos_read.
88
		// Note that we are currently using busy waiting which will be totally wrong if there are any interrupts.
89
		dynamos_reset ();
90
		delay_ms (500);
91
		dynamos_read (&left, &right);
92

  
93
		// Velocity readings are dynamo ticks per second.
94
		left*=2;
95
		right*=2;
96

  
97
		// Store it
98
		//dynamos_read (&(data_velocity_l[i]), &(data_velocity_r[i]));
99
		
100

  
101
	// Bad things happening. Methinks it's a stack overflow. Print one data line
102
	// per measurement. The plotting script can probably handle it. Not sure about
103
	// the server.
104
	send_motor_data (0, direction1, acceleration_string, 1, &pwm, &left);
105
	send_motor_data (1, direction2, acceleration_string, 1, &pwm, &right);
106

  
107
//usb_puts ("# ");
108
//usb_puti (i);
109
//usb_puts (" ");
110
//usb_puti (pwm);
111
//usb_puts (" ");
112
//usb_puti (data_velocity_l[i]);
113
//usb_puts (" ");
114
//usb_puti (data_velocity_r[i]);
115
//usb_puts (NL);
116

  
117
		pwm+=pwm_step;
118
	}
119

  
120
//	send_motor_data (0, direction1, acceleration_string, num_steps, data_pwm, data_velocity_l);
121
//	send_motor_data (1, direction2, acceleration_string, num_steps, data_pwm, data_velocity_r);
122

  
123
	robot_set_motors (motor_direction_off, 0, motor_direction_off, 0);
124

  
125
//	free (data_velocity_r);
126
//	free (data_velocity_l);
127
//	free (data_pwm);
128
}
129

  
130
static void test_motors_direction (uint8_t direction1, uint8_t direction2)
131
{
132
	// The following equation must be true: vel_min+(vel_steps-1)*vel_inc=vel_max
133
	// Note that we're setting vel_max twice, once going up and once going down. It's not important for vel_max, but
134
	// vel_min is also reached twice, once at the beginning of accelerating and once at the end of decelerating, and
135
	// this one is important.
136
	
137
	test_motors_direction_acceleration (direction1, direction2, vel_min, vel_steps, vel_inc, "increasing");
138
	test_motors_direction_acceleration (direction1, direction2, vel_max, vel_steps, -vel_inc, "decreasing");
139
}
140

  
141

  
142
// **********************
143
// ** Public functions **
144
// **********************
145

  
146
void test_motor_all (void)
147
{
148
	usb_puts("# Testing motors" NL);
149

  
150
	test_motors_direction (motor_direction_forward, motor_direction_backward);
151
	test_motors_direction (motor_direction_backward, motor_direction_forward);
152

  
153
	robot_set_motors_off ();
154

  
155
	usb_puts("# Testing motors finished" NL);
156
}
157

  
158
void test_motor (uint8_t num)
159
{
160
	if (num==1)
161
	{
162
		test_motors_direction (motor_direction_forward, motor_direction_off);
163
		test_motors_direction (motor_direction_backward, motor_direction_off);
164
	}
165
	else if (num==2)
166
	{
167
		test_motors_direction (motor_direction_off, motor_direction_forward);
168
		test_motors_direction (motor_direction_off, motor_direction_backward);
169
	}
170
}
branches/scout/projects/diagnostic_station/station/Makefile
1
########Update This Section########
2
#
3
#
4

  
5
# Relative path to the root directory (containing lib directory)
6
ifndef COLONYROOT
7
COLONYROOT = ../../../..
8
endif
9

  
10
# Target file name (without extension).
11
TARGET = target
12
MAIN_FUNCTION = main_default
13

  
14
# Uncomment this to use the wireless library
15
USE_WIRELESS = 1
16

  
17
# com1 = serial port. Use lpt1 to connect to parallel port.
18
AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB1'; fi)
19
#
20
#
21
###################################
22

  
23
# Hey Emacs, this is a -*- makefile -*-
24
#----------------------------------------------------------------------------
25
# WinAVR Makefile Template written by Eric B. Weddington, J?rg Wunsch, et al.
26
#
27
# Released to the Public Domain
28
#
29
# Additional material for this makefile was written by:
30
# Peter Fleury
31
# Tim Henigan
32
# Colin O'Flynn
33
# Reiner Patommel
34
# Markus Pfaff
35
# Sander Pool
36
# Frederik Rouleau
37
#
38
#----------------------------------------------------------------------------
39
# On command line:
40
#
41
# make all = Make software.
42
#
43
# make clean = Clean out built project files.
44
#
45
# make coff = Convert ELF to AVR COFF.
46
#
47
# make extcoff = Convert ELF to AVR Extended COFF.
48
#
49
# make program = Download the hex file to the device, using avrdude.
50
#                Please customize the avrdude settings below first!
51
#
52
# make debug = Start either simulavr or avarice as specified for debugging,
53
#              with avr-gdb or avr-insight as the front end for debugging.
54
#
55
# make filename.s = Just compile filename.c into the assembler code only.
56
#
57
# make filename.i = Create a preprocessed source file for use in submitting
58
#                   bug reports to the GCC project.
59
#
60
# To rebuild project do "make clean" then "make all".
61
#----------------------------------------------------------------------------
62

  
63
#if you want your code to work on the Firefly++ and not Firefly+
64
#then add the -DFFPP line to CDEFS
65
CDEFS =
66
#-DFFPP
67

  
68
# MCU name
69
MCU = atmega128
70

  
71
# Processor frequency.
72
#     This will define a symbol, F_CPU, in all source code files equal to the
73
#     processor frequency. You can then use this symbol in your source code to
74
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
75
#     automatically to create a 32-bit value in your source code.
76
F_CPU = 8000000
77

  
78
# Output format. (can be srec, ihex, binary)
79
FORMAT = ihex
80

  
81
# List C source files here. (C dependencies are automatically generated.)
82
SRC = $(wildcard *.c)
83

  
84
# List Assembler source files here.
85
#     Make them always end in a capital .S.  Files ending in a lowercase .s
86
#     will not be considered source files but generated files (assembler
87
#     output from the compiler), and will be deleted upon "make clean"!
88
#     Even though the DOS/Win* filesystem matches both .s and .S the same,
89
#     it will preserve the spelling of the filenames, and gcc itself does
90
#     care about how the name is spelled on its command-line.
91
ASRC =
92

  
93
# Optimization level, can be [0, 1, 2, 3, s].
94
#     0 = turn off optimization. s = optimize for size.
95
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
96
OPT = s
97

  
98
# Debugging format.
99
#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
100
#     AVR Studio 4.10 requires dwarf-2.
101
#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
102
DEBUG =
103

  
104
# Compiler flag to set the C Standard level.
105
#     c89   = "ANSI" C
106
#     gnu89 = c89 plus GCC extensions
107
#     c99   = ISO C99 standard (not yet fully implemented)
108
#     gnu99 = c99 plus GCC extensions
109
CSTANDARD = -std=gnu99
110

  
111
# Place -D or -U options here
112
CDEFS += -DF_CPU=$(F_CPU)UL
113
CDEFS += -DFFP
114
# for wireless library
115
ifdef USE_WIRELESS
116
	CDEFS += -DROBOT
117
endif
118

  
119
# Place -I, -L options here
120
CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
121
CINCS += -L$(COLONYROOT)/code/lib/bin
122
ifdef USE_WIRELESS
123
	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
124
endif
125

  
126
#---------------- Compiler Options ----------------
127
#  -g*:          generate debugging information
128
#  -O*:          optimization level
129
#  -f...:        tuning, see GCC manual and avr-libc documentation
130
#  -Wall...:     warning level
131
#  -Wa,...:      tell GCC to pass this to the assembler.
132
#    -adhlns...: create assembler listing
133
CFLAGS =
134
CFLAGS += -D$(MAIN_FUNCTION)=main
135
# CFLAGS = -g$(DEBUG)
136
CFLAGS += $(CDEFS) $(CINCS)
137
CFLAGS += -O$(OPT)
138
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
139
CFLAGS += -Wall -Wstrict-prototypes
140
CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
141
CFLAGS += $(CSTANDARD)
142

  
143
#---------------- Assembler Options ----------------
144
#  -Wa,...:   tell GCC to pass this to the assembler.
145
#  -ahlms:    create listing
146
#  -gstabs:   have the assembler create line number information; note that
147
#             for use in COFF files, additional information about filenames
148
#             and function names needs to be present in the assembler source
149
#             files -- see avr-libc docs [FIXME: not yet described there]
150
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
151

  
152

  
153
#---------------- Library Options ----------------
154
# Minimalistic printf version
155
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
156

  
157
# Floating point printf version (requires MATH_LIB = -lm below)
158
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
159

  
160
# If this is left blank, then it will use the Standard printf version.
161
#PRINTF_LIB =
162
#PRINTF_LIB = $(PRINTF_LIB_MIN)
163
PRINTF_LIB = $(PRINTF_LIB_FLOAT)
164

  
165

  
166
# Minimalistic scanf version
167
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
168

  
169
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
170
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
171

  
172
# If this is left blank, then it will use the Standard scanf version.
173
SCANF_LIB =
174
#SCANF_LIB = $(SCANF_LIB_MIN)
175
#SCANF_LIB = $(SCANF_LIB_FLOAT)
176

  
177
MATH_LIB = -lm
178

  
179
#---------------- External Memory Options ----------------
180

  
181
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
182
# used for variables (.data/.bss) and heap (malloc()).
183
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
184

  
185
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
186
# only used for heap (malloc()).
187
#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
188

  
189
EXTMEMOPTS =
190

  
191
#---------------- Linker Options ----------------
192
#  -Wl,...:     tell GCC to pass this to linker.
193
#    -Map:      create map file
194
#    --cref:    add cross reference to  map file
195
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
196
LDFLAGS += $(EXTMEMOPTS)
197
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
198
ifdef USE_WIRELESS
199
	LDFLAGS += -lwireless
200
endif
201
LDFLAGS += -ldragonfly
202

  
203

  
204

  
205
#---------------- Programming Options (avrdude) ----------------
206

  
207
# Programming hardware: alf avr910 avrisp bascom bsd
208
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
209
#
210
# Type: avrdude -c ?
211
# to get a full listing.
212
#
213
AVRDUDE_PROGRAMMER = avrisp
214

  
215
# programmer connected to serial device
216

  
217
AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
218
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
219

  
220

  
221
# Uncomment the following if you want avrdude's erase cycle counter.
222
# Note that this counter needs to be initialized first using -Yn,
223
# see avrdude manual.
224
#AVRDUDE_ERASE_COUNTER = -y
225

  
226
# Uncomment the following if you do /not/ wish a verification to be
227
# performed after programming the device.
228
#AVRDUDE_NO_VERIFY = -V
229

  
230
# Increase verbosity level.  Please use this when submitting bug
231
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
232
# to submit bug reports.
233
#AVRDUDE_VERBOSE = -v -v
234

  
235
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
236
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
237
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
238
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
239

  
240
#don't check for device signature
241
AVRDUDE_FLAGS += -F
242

  
243

  
244

  
245
#---------------- Debugging Options ----------------
246

  
247
# For simulavr only - target MCU frequency.
248
DEBUG_MFREQ = $(F_CPU)
249

  
250
# Set the DEBUG_UI to either gdb or insight.
251
# DEBUG_UI = gdb
252
DEBUG_UI = insight
253

  
254
# Set the debugging back-end to either avarice, simulavr.
255
DEBUG_BACKEND = avarice
256
#DEBUG_BACKEND = simulavr
257

  
258
# GDB Init Filename.
259
GDBINIT_FILE = __avr_gdbinit
260

  
261
# When using avarice settings for the JTAG
262
JTAG_DEV = /dev/com1
263

  
264
# Debugging port used to communicate between GDB / avarice / simulavr.
265
DEBUG_PORT = 4242
266

  
267
# Debugging host used to communicate between GDB / avarice / simulavr, normally
268
#     just set to localhost unless doing some sort of crazy debugging when
269
#     avarice is running on a different computer.
270
DEBUG_HOST = localhost
271

  
272

  
273

  
274
#============================================================================
275

  
276

  
277
# Define programs and commands.
278
SHELL = sh
279
CC = avr-gcc
280
OBJCOPY = avr-objcopy
281
OBJDUMP = avr-objdump
282
SIZE = avr-size
283
NM = avr-nm
284
AVRDUDE = avrdude
285
REMOVE = rm -f
286
REMOVEDIR = rm -rf
287
COPY = cp
288
WINSHELL = cmd
289

  
290

  
291
# Define Messages
292
# English
293
MSG_ERRORS_NONE = Errors: none
294
MSG_BEGIN = -------- begin --------
295
MSG_END = --------  end  --------
296
MSG_SIZE_BEFORE = Size before:
297
MSG_SIZE_AFTER = Size after:
298
MSG_COFF = Converting to AVR COFF:
299
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
300
MSG_FLASH = Creating load file for Flash:
301
MSG_EEPROM = Creating load file for EEPROM:
302
MSG_EXTENDED_LISTING = Creating Extended Listing:
303
MSG_SYMBOL_TABLE = Creating Symbol Table:
304
MSG_LINKING = Linking:
305
MSG_COMPILING = Compiling:
306
MSG_ASSEMBLING = Assembling:
307
MSG_CLEANING = Cleaning project:
308

  
309

  
310

  
311

  
312
# Define all object files.
313
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
314

  
315
# Define all listing files.
316
LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
317

  
318

  
319
# Compiler flags to generate dependency files.
320
GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
321

  
322

  
323
# Combine all necessary flags and optional flags.
324
# Add target processor to flags.
325
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
326
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
327

  
328

  
329

  
330

  
331

  
332
# Default target.
333
all: begin gccversion sizebefore build sizeafter end
334

  
335
build: elf hex eep lss sym
336

  
337
elf: $(TARGET).elf
338
hex: $(TARGET).hex
339
eep: $(TARGET).eep
340
lss: $(TARGET).lss
341
sym: $(TARGET).sym
342

  
343

  
344

  
345
# Eye candy.
346
# AVR Studio 3.x does not check make's exit code but relies on
347
# the following magic strings to be generated by the compile job.
348
begin:
349
	@echo
350
	@echo $(MSG_BEGIN)
351

  
352
end:
353
	@echo $(MSG_END)
354
	@echo
355

  
356

  
357
# Display size of file.
358
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
359
ELFSIZE = $(SIZE) -A $(TARGET).elf
360
AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
361

  
362
sizebefore:
363
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
364
	$(AVRMEM) 2>/dev/null; echo; fi
365

  
366
sizeafter:
367
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
368
	$(AVRMEM) 2>/dev/null; echo; fi
369

  
370

  
371

  
372
# Display compiler version information.
373
gccversion :
374
	@$(CC) --version
375

  
376

  
377

  
378
# Program the device.
379
program: $(TARGET).hex $(TARGET).eep
380
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
381

  
382

  
383
# Generate avr-gdb config/init file which does the following:
384
#     define the reset signal, load the target file, connect to target, and set
385
#     a breakpoint at main().
386
gdb-config:
387
	@$(REMOVE) $(GDBINIT_FILE)
388
	@echo define reset >> $(GDBINIT_FILE)
389
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
390
	@echo end >> $(GDBINIT_FILE)
391
	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
392
	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
393
ifeq ($(DEBUG_BACKEND),simulavr)
394
	@echo load  >> $(GDBINIT_FILE)
395
endif
396
	@echo break main >> $(GDBINIT_FILE)
397

  
398
debug: gdb-config $(TARGET).elf
399
ifeq ($(DEBUG_BACKEND), avarice)
400
	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
401
	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
402
	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
403
	@$(WINSHELL) /c pause
404

  
405
else
406
	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
407
	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
408
endif
409
	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
410

  
411

  
412

  
413

  
414
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
415
COFFCONVERT=$(OBJCOPY) --debugging \
416
--change-section-address .data-0x800000 \
417
--change-section-address .bss-0x800000 \
418
--change-section-address .noinit-0x800000 \
419
--change-section-address .eeprom-0x810000
420

  
421

  
422
coff: $(TARGET).elf
423
	@echo
424
	@echo $(MSG_COFF) $(TARGET).cof
425
	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
426

  
427

  
428
extcoff: $(TARGET).elf
429
	@echo
430
	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
431
	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
432

  
433

  
434

  
435
# Create final output files (.hex, .eep) from ELF output file.
436
%.hex: %.elf
437
	@echo
438
	@echo $(MSG_FLASH) $@
439
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
440

  
441
%.eep: %.elf
442
	@echo
443
	@echo $(MSG_EEPROM) $@
444
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
445
	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
446

  
447
# Create extended listing file from ELF output file.
448
%.lss: %.elf
449
	@echo
450
	@echo $(MSG_EXTENDED_LISTING) $@
451
	$(OBJDUMP) -h -S $< > $@
452

  
453
# Create a symbol table from ELF output file.
454
%.sym: %.elf
455
	@echo
456
	@echo $(MSG_SYMBOL_TABLE) $@
457
	$(NM) -n $< > $@
458

  
459

  
460

  
461
# Link: create ELF output file from object files.
462
.SECONDARY : $(TARGET).elf
463
.PRECIOUS : $(OBJ)
464
%.elf: $(OBJ)
465
	@echo
466
	@echo $(MSG_LINKING) $@
467
	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
468

  
469

  
470
# Compile: create object files from C source files.
471
%.o : %.c
472
	@echo
473
	@echo $(MSG_COMPILING) $<
474
	$(CC) -c $(ALL_CFLAGS) $< -o $@
475

  
476

  
477
# Compile: create assembler files from C source files.
478
%.s : %.c
479
	$(CC) -S $(ALL_CFLAGS) $< -o $@
480

  
481

  
482
# Assemble: create object files from assembler source files.
483
%.o : %.S
484
	@echo
485
	@echo $(MSG_ASSEMBLING) $<
486
	$(CC) -c $(ALL_ASFLAGS) $< -o $@
487

  
488
# Create preprocessed source for use in sending a bug report.
489
%.i : %.c
490
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
491

  
492

  
493
# Target: clean project.
494
clean: begin clean_list end
495

  
496
clean_list :
497
	@echo
498
	@echo $(MSG_CLEANING)
499
	$(REMOVE) $(TARGET).hex
500
	$(REMOVE) $(TARGET).eep
501
	$(REMOVE) $(TARGET).cof
502
	$(REMOVE) $(TARGET).elf
503
	$(REMOVE) $(TARGET).map
504
	$(REMOVE) $(TARGET).sym
505
	$(REMOVE) $(TARGET).lss
506
	$(REMOVE) $(OBJ)
507
	$(REMOVE) $(LST)
508
	$(REMOVE) $(SRC:.c=.s)
509
	$(REMOVE) $(SRC:.c=.d)
510
	$(REMOVEDIR) .dep
511

  
512

  
513

  
514
# Include the dependency files.
515
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
516

  
517

  
518
# Listing of phony targets.
519
.PHONY : all begin finish end sizebefore sizeafter gccversion \
520
build elf hex eep lss sym coff extcoff \
521
clean clean_list program debug gdb-config
522

  
branches/scout/projects/diagnostic_station/station/test_encoders.c
1
#include "test_encoders.h"
2
#include "global.h"
3
#include "comm_robot.h"
4

  
5
#include "hardware.h"
6

  
7
// ******************
8
// ** Data sending **
9
// ******************
10

  
11
static void send_encoder_data (uint8_t num, uint8_t direction, 
12
	int16_t *data_station, int16_t *data_robot, uint8_t num_measurements)
13
{
14
	if (direction!=motor_direction_off)
15
	{
16
		usb_puts ("data encoder ");
17
		usb_puti (num);
18
		usb_puts (" ");
19
		usb_puts (motor_direction_string (direction));
20
		usb_puts (" ");
21
			
22
		for (uint8_t i=0; i<num_measurements; ++i)
23
		{
24
			usb_putc (' ');
25
			usb_puti (data_station[i]);
26
			usb_putc ('/');
27
			usb_puti (data_robot[i]);
28
		}
29

  
30
		usb_puts (NL);
31
	}
32
}
33

  
34

  
35
// ************************
36
// ** Internal functions **
37
// ************************
38

  
39
static void test_encoders_direction (uint8_t direction1, uint8_t direction2, uint8_t num_measurements, uint8_t velocity, uint16_t on_delay, uint16_t off_delay)
40
{
41
	// Allocate space for the data on the stack
42
	// Seems like we've got a stack overflow...see test_motors.c
43
//	int16_t *data_station_l  =malloc (num_measurements*sizeof (uint16_t));
44
//	int16_t *data_station_r  =malloc (num_measurements*sizeof (uint16_t));
45
//	int16_t *data_robot_l    =malloc (num_measurements*sizeof (uint16_t));
46
//	int16_t *data_robot_r    =malloc (num_measurements*sizeof (uint16_t));
47
	usb_puts ("# Resetting encoders" NL);
48
	dynamos_reset ();
49
	robot_reset_encoders ();
50

  
51
	int16_t station_l=11, station_r=22, robot_l=33, robot_r=44;
52
	
53
	for (uint8_t m=0; m<num_measurements; ++m)
54
	{
55
		robot_set_motors (direction1, velocity, direction2, velocity);
56
		delay_ms (on_delay);
57
		robot_set_motors_off ();
58
		delay_ms (off_delay);
59

  
60
		// Read the station dynamos
61
		dynamos_read (&station_l, &station_r);
62
//		data_station_l[m]=station_l;
63
//		data_station_r[m]=station_r;
64
		
65
		// Read the robot encoders
66
		robot_read_encoders (&robot_l, &robot_r);
67
//		data_robot_l[m]=robot_l;
68
//		data_robot_r[m]=robot_r;
69
		
70
		//usb_puts ("# I readed teh encoders: ");
71
		//usb_puti (data_robot_l[m]);
72
		//usb_puts (" ");
73
		//usb_puti (data_robot_r[m]);
74
		//usb_puts (NL);
75

  
76
	send_encoder_data (0, direction1, &station_l, &robot_l, 1);
77
	send_encoder_data (1, direction2, &station_r, &robot_r, 1);
78
	}
79

  
80
//	send_encoder_data (0, direction1, data_station_l, data_robot_l, num_measurements);
81
//	send_encoder_data (1, direction2, data_station_r, data_robot_r, num_measurements);
82
	
83
//	free (data_robot_r);
84
//	free (data_robot_l);
85
//	free (data_station_r);
86
//	free (data_station_l);
87
}
88

  
89

  
90
// **********************
91
// ** Public functions **
92
// **********************
93

  
94
// Encoder readings seem to be unreliable with these values (on too long?)
95
//#define NUM 4
96
//#define VEL 200
97
//#define ON_DELAY 500
98
//#define OFF_DELAY 800
99

  
100
// Testing values
101
#define NUM 8
102
#define VEL 200
103
#define ON_DELAY 150
104
#define OFF_DELAY 400
105

  
106
void test_encoder_all (void)
107
{
108
	usb_puts("# Testing encoders" NL);
109

  
110
	test_encoders_direction (motor_direction_forward , motor_direction_backward, NUM, VEL, ON_DELAY, OFF_DELAY);
111
	test_encoders_direction (motor_direction_backward, motor_direction_forward , NUM, VEL, ON_DELAY, OFF_DELAY);
112

  
113
	usb_puts("# Testing encoders finished" NL);
114
}
115

  
116
void test_encoder (uint8_t num)
117
{
118
	if (num==1)
119
	{
120
		test_encoders_direction (motor_direction_forward , motor_direction_off, NUM, VEL, ON_DELAY, OFF_DELAY);
121
		test_encoders_direction (motor_direction_backward, motor_direction_off, NUM, VEL, ON_DELAY, OFF_DELAY);
122
	}
123
	else if (num==2)
124
	{
125
		test_encoders_direction (motor_direction_off, motor_direction_forward , NUM, VEL, ON_DELAY, OFF_DELAY);
126
		test_encoders_direction (motor_direction_off, motor_direction_backward, NUM, VEL, ON_DELAY, OFF_DELAY);
127
	}
128
}
branches/scout/projects/diagnostic_station/station/Makefile_brad
1
########Update This Section########
2
#
3
#
4

  
5
# Relative path to the root directory (containing lib directory)
6
ifndef COLONYROOT
7
COLONYROOT = ../../../..
8
endif
9

  
10
# Target file name (without extension).
11
TARGET = target
12
MAIN_FUNCTION = main_brad
13

  
14
# Uncomment this to use the wireless library
15
USE_WIRELESS = 1
16

  
17
# com1 = serial port. Use lpt1 to connect to parallel port.
18
AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
19
#
20
#
21
###################################
22

  
23
# Hey Emacs, this is a -*- makefile -*-
24
#----------------------------------------------------------------------------
25
# WinAVR Makefile Template written by Eric B. Weddington, J?rg Wunsch, et al.
26
#
27
# Released to the Public Domain
28
#
29
# Additional material for this makefile was written by:
30
# Peter Fleury
31
# Tim Henigan
32
# Colin O'Flynn
33
# Reiner Patommel
34
# Markus Pfaff
35
# Sander Pool
36
# Frederik Rouleau
37
#
38
#----------------------------------------------------------------------------
39
# On command line:
40
#
41
# make all = Make software.
42
#
43
# make clean = Clean out built project files.
44
#
45
# make coff = Convert ELF to AVR COFF.
46
#
47
# make extcoff = Convert ELF to AVR Extended COFF.
48
#
49
# make program = Download the hex file to the device, using avrdude.
50
#                Please customize the avrdude settings below first!
51
#
52
# make debug = Start either simulavr or avarice as specified for debugging,
53
#              with avr-gdb or avr-insight as the front end for debugging.
54
#
55
# make filename.s = Just compile filename.c into the assembler code only.
56
#
57
# make filename.i = Create a preprocessed source file for use in submitting
58
#                   bug reports to the GCC project.
59
#
60
# To rebuild project do "make clean" then "make all".
61
#----------------------------------------------------------------------------
62

  
63
#if you want your code to work on the Firefly++ and not Firefly+
64
#then add the -DFFPP line to CDEFS
65
CDEFS =
66
#-DFFPP
67

  
68
# MCU name
69
MCU = atmega128
70

  
71
# Processor frequency.
72
#     This will define a symbol, F_CPU, in all source code files equal to the
73
#     processor frequency. You can then use this symbol in your source code to
74
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
75
#     automatically to create a 32-bit value in your source code.
76
F_CPU = 8000000
77

  
78
# Output format. (can be srec, ihex, binary)
79
FORMAT = ihex
80

  
81
# List C source files here. (C dependencies are automatically generated.)
82
SRC = $(wildcard *.c)
83

  
84
# List Assembler source files here.
85
#     Make them always end in a capital .S.  Files ending in a lowercase .s
86
#     will not be considered source files but generated files (assembler
87
#     output from the compiler), and will be deleted upon "make clean"!
88
#     Even though the DOS/Win* filesystem matches both .s and .S the same,
89
#     it will preserve the spelling of the filenames, and gcc itself does
90
#     care about how the name is spelled on its command-line.
91
ASRC =
92

  
93
# Optimization level, can be [0, 1, 2, 3, s].
94
#     0 = turn off optimization. s = optimize for size.
95
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
96
OPT = s
97

  
98
# Debugging format.
99
#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
100
#     AVR Studio 4.10 requires dwarf-2.
101
#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
102
DEBUG =
103

  
104
# Compiler flag to set the C Standard level.
105
#     c89   = "ANSI" C
106
#     gnu89 = c89 plus GCC extensions
107
#     c99   = ISO C99 standard (not yet fully implemented)
108
#     gnu99 = c99 plus GCC extensions
109
CSTANDARD = -std=gnu99
110

  
111
# Place -D or -U options here
112
CDEFS += -DF_CPU=$(F_CPU)UL
113
CDEFS += -DFFP
114
# for wireless library
115
ifdef USE_WIRELESS
116
	CDEFS += -DROBOT
117
endif
118

  
119
# Place -I, -L options here
120
CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
121
CINCS += -L$(COLONYROOT)/code/lib/bin
122
ifdef USE_WIRELESS
123
	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
124
endif
125

  
126
#---------------- Compiler Options ----------------
127
#  -g*:          generate debugging information
128
#  -O*:          optimization level
129
#  -f...:        tuning, see GCC manual and avr-libc documentation
130
#  -Wall...:     warning level
131
#  -Wa,...:      tell GCC to pass this to the assembler.
132
#    -adhlns...: create assembler listing
133
CFLAGS =
134
CFLAGS += -D$(MAIN_FUNCTION)=main
135
# CFLAGS = -g$(DEBUG)
136
CFLAGS += $(CDEFS) $(CINCS)
137
CFLAGS += -O$(OPT)
138
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
139
CFLAGS += -Wall -Wstrict-prototypes
140
CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
141
CFLAGS += $(CSTANDARD)
142

  
143
#---------------- Assembler Options ----------------
144
#  -Wa,...:   tell GCC to pass this to the assembler.
145
#  -ahlms:    create listing
146
#  -gstabs:   have the assembler create line number information; note that
147
#             for use in COFF files, additional information about filenames
148
#             and function names needs to be present in the assembler source
149
#             files -- see avr-libc docs [FIXME: not yet described there]
150
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
151

  
152

  
153
#---------------- Library Options ----------------
154
# Minimalistic printf version
155
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
156

  
157
# Floating point printf version (requires MATH_LIB = -lm below)
158
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
159

  
160
# If this is left blank, then it will use the Standard printf version.
161
#PRINTF_LIB =
162
#PRINTF_LIB = $(PRINTF_LIB_MIN)
163
PRINTF_LIB = $(PRINTF_LIB_FLOAT)
164

  
165

  
166
# Minimalistic scanf version
167
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
168

  
169
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
170
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
171

  
172
# If this is left blank, then it will use the Standard scanf version.
173
SCANF_LIB =
174
#SCANF_LIB = $(SCANF_LIB_MIN)
175
#SCANF_LIB = $(SCANF_LIB_FLOAT)
176

  
177
MATH_LIB = -lm
178

  
179
#---------------- External Memory Options ----------------
180

  
181
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
182
# used for variables (.data/.bss) and heap (malloc()).
183
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
184

  
185
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
186
# only used for heap (malloc()).
187
#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
188

  
189
EXTMEMOPTS =
190

  
191
#---------------- Linker Options ----------------
192
#  -Wl,...:     tell GCC to pass this to linker.
193
#    -Map:      create map file
194
#    --cref:    add cross reference to  map file
195
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
196
LDFLAGS += $(EXTMEMOPTS)
197
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
198
ifdef USE_WIRELESS
199
	LDFLAGS += -lwireless
200
endif
201
LDFLAGS += -ldragonfly
202

  
203

  
204

  
205
#---------------- Programming Options (avrdude) ----------------
206

  
207
# Programming hardware: alf avr910 avrisp bascom bsd
208
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
209
#
210
# Type: avrdude -c ?
211
# to get a full listing.
212
#
213
AVRDUDE_PROGRAMMER = avrisp
214

  
215
# programmer connected to serial device
216

  
217
AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
218
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
219

  
220

  
221
# Uncomment the following if you want avrdude's erase cycle counter.
222
# Note that this counter needs to be initialized first using -Yn,
223
# see avrdude manual.
224
#AVRDUDE_ERASE_COUNTER = -y
225

  
226
# Uncomment the following if you do /not/ wish a verification to be
227
# performed after programming the device.
228
#AVRDUDE_NO_VERIFY = -V
229

  
230
# Increase verbosity level.  Please use this when submitting bug
231
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
232
# to submit bug reports.
233
#AVRDUDE_VERBOSE = -v -v
234

  
235
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
236
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
237
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
238
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
239

  
240
#don't check for device signature
241
AVRDUDE_FLAGS += -F
242

  
243

  
244

  
245
#---------------- Debugging Options ----------------
246

  
247
# For simulavr only - target MCU frequency.
248
DEBUG_MFREQ = $(F_CPU)
249

  
250
# Set the DEBUG_UI to either gdb or insight.
251
# DEBUG_UI = gdb
252
DEBUG_UI = insight
253

  
254
# Set the debugging back-end to either avarice, simulavr.
255
DEBUG_BACKEND = avarice
256
#DEBUG_BACKEND = simulavr
257

  
258
# GDB Init Filename.
259
GDBINIT_FILE = __avr_gdbinit
260

  
261
# When using avarice settings for the JTAG
262
JTAG_DEV = /dev/com1
263

  
264
# Debugging port used to communicate between GDB / avarice / simulavr.
265
DEBUG_PORT = 4242
266

  
267
# Debugging host used to communicate between GDB / avarice / simulavr, normally
268
#     just set to localhost unless doing some sort of crazy debugging when
269
#     avarice is running on a different computer.
270
DEBUG_HOST = localhost
271

  
272

  
273

  
274
#============================================================================
275

  
276

  
277
# Define programs and commands.
278
SHELL = sh
279
CC = avr-gcc
280
OBJCOPY = avr-objcopy
281
OBJDUMP = avr-objdump
282
SIZE = avr-size
283
NM = avr-nm
284
AVRDUDE = avrdude
285
REMOVE = rm -f
286
REMOVEDIR = rm -rf
287
COPY = cp
288
WINSHELL = cmd
289

  
290

  
291
# Define Messages
292
# English
293
MSG_ERRORS_NONE = Errors: none
294
MSG_BEGIN = -------- begin --------
295
MSG_END = --------  end  --------
296
MSG_SIZE_BEFORE = Size before:
297
MSG_SIZE_AFTER = Size after:
298
MSG_COFF = Converting to AVR COFF:
299
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
300
MSG_FLASH = Creating load file for Flash:
301
MSG_EEPROM = Creating load file for EEPROM:
302
MSG_EXTENDED_LISTING = Creating Extended Listing:
303
MSG_SYMBOL_TABLE = Creating Symbol Table:
304
MSG_LINKING = Linking:
305
MSG_COMPILING = Compiling:
306
MSG_ASSEMBLING = Assembling:
307
MSG_CLEANING = Cleaning project:
308

  
309

  
310

  
311

  
312
# Define all object files.
313
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
314

  
315
# Define all listing files.
316
LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
317

  
318

  
319
# Compiler flags to generate dependency files.
320
GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
321

  
322

  
323
# Combine all necessary flags and optional flags.
324
# Add target processor to flags.
325
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
326
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
327

  
328

  
329

  
330

  
331

  
332
# Default target.
333
all: begin gccversion sizebefore build sizeafter end
334

  
335
build: elf hex eep lss sym
336

  
337
elf: $(TARGET).elf
338
hex: $(TARGET).hex
339
eep: $(TARGET).eep
340
lss: $(TARGET).lss
341
sym: $(TARGET).sym
342

  
343

  
344

  
345
# Eye candy.
346
# AVR Studio 3.x does not check make's exit code but relies on
347
# the following magic strings to be generated by the compile job.
348
begin:
349
	@echo
350
	@echo $(MSG_BEGIN)
351

  
352
end:
353
	@echo $(MSG_END)
354
	@echo
355

  
356

  
357
# Display size of file.
358
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
359
ELFSIZE = $(SIZE) -A $(TARGET).elf
360
AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
361

  
362
sizebefore:
363
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
364
	$(AVRMEM) 2>/dev/null; echo; fi
365

  
366
sizeafter:
367
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
368
	$(AVRMEM) 2>/dev/null; echo; fi
369

  
370

  
371

  
372
# Display compiler version information.
373
gccversion :
374
	@$(CC) --version
375

  
376

  
377

  
378
# Program the device.
379
program: $(TARGET).hex $(TARGET).eep
380
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
381

  
382

  
383
# Generate avr-gdb config/init file which does the following:
384
#     define the reset signal, load the target file, connect to target, and set
385
#     a breakpoint at main().
386
gdb-config:
387
	@$(REMOVE) $(GDBINIT_FILE)
388
	@echo define reset >> $(GDBINIT_FILE)
389
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
390
	@echo end >> $(GDBINIT_FILE)
391
	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
392
	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
393
ifeq ($(DEBUG_BACKEND),simulavr)
394
	@echo load  >> $(GDBINIT_FILE)
395
endif
396
	@echo break main >> $(GDBINIT_FILE)
397

  
398
debug: gdb-config $(TARGET).elf
399
ifeq ($(DEBUG_BACKEND), avarice)
400
	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
401
	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
402
	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
403
	@$(WINSHELL) /c pause
404

  
405
else
406
	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
407
	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
408
endif
409
	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
410

  
411

  
412

  
413

  
414
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
415
COFFCONVERT=$(OBJCOPY) --debugging \
416
--change-section-address .data-0x800000 \
417
--change-section-address .bss-0x800000 \
418
--change-section-address .noinit-0x800000 \
419
--change-section-address .eeprom-0x810000
420

  
421

  
422
coff: $(TARGET).elf
423
	@echo
424
	@echo $(MSG_COFF) $(TARGET).cof
425
	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
426

  
427

  
428
extcoff: $(TARGET).elf
429
	@echo
430
	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
431
	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
432

  
433

  
434

  
435
# Create final output files (.hex, .eep) from ELF output file.
436
%.hex: %.elf
437
	@echo
438
	@echo $(MSG_FLASH) $@
439
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
440

  
441
%.eep: %.elf
442
	@echo
443
	@echo $(MSG_EEPROM) $@
444
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
445
	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
446

  
447
# Create extended listing file from ELF output file.
448
%.lss: %.elf
449
	@echo
450
	@echo $(MSG_EXTENDED_LISTING) $@
451
	$(OBJDUMP) -h -S $< > $@
452

  
453
# Create a symbol table from ELF output file.
454
%.sym: %.elf
455
	@echo
456
	@echo $(MSG_SYMBOL_TABLE) $@
457
	$(NM) -n $< > $@
458

  
459

  
460

  
461
# Link: create ELF output file from object files.
462
.SECONDARY : $(TARGET).elf
463
.PRECIOUS : $(OBJ)
464
%.elf: $(OBJ)
465
	@echo
466
	@echo $(MSG_LINKING) $@
467
	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
468

  
469

  
470
# Compile: create object files from C source files.
471
%.o : %.c
472
	@echo
473
	@echo $(MSG_COMPILING) $<
474
	$(CC) -c $(ALL_CFLAGS) $< -o $@
475

  
476

  
477
# Compile: create assembler files from C source files.
478
%.s : %.c
479
	$(CC) -S $(ALL_CFLAGS) $< -o $@
480

  
481

  
482
# Assemble: create object files from assembler source files.
483
%.o : %.S
484
	@echo
485
	@echo $(MSG_ASSEMBLING) $<
486
	$(CC) -c $(ALL_ASFLAGS) $< -o $@
487

  
488
# Create preprocessed source for use in sending a bug report.
489
%.i : %.c
490
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
491

  
492

  
493
# Target: clean project.
494
clean: begin clean_list end
495

  
496
clean_list :
497
	@echo
498
	@echo $(MSG_CLEANING)
499
	$(REMOVE) $(TARGET).hex
500
	$(REMOVE) $(TARGET).eep
501
	$(REMOVE) $(TARGET).cof
502
	$(REMOVE) $(TARGET).elf
503
	$(REMOVE) $(TARGET).map
504
	$(REMOVE) $(TARGET).sym
505
	$(REMOVE) $(TARGET).lss
506
	$(REMOVE) $(OBJ)
507
	$(REMOVE) $(LST)
508
	$(REMOVE) $(SRC:.c=.s)
509
	$(REMOVE) $(SRC:.c=.d)
510
	$(REMOVEDIR) .dep
511

  
512

  
513

  
514
# Include the dependency files.
515
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
516

  
517

  
518
# Listing of phony targets.
519
.PHONY : all begin finish end sizebefore sizeafter gccversion \
520
build elf hex eep lss sym coff extcoff \
521
clean clean_list program debug gdb-config
522

  
branches/scout/projects/diagnostic_station/station/main.c
1
#include <dragonfly_lib.h>
2
#include <wireless.h>
3
#include <xbee.h>
4

  
5
#include "../common/comm_station_robot.h"
6

  
7
#include "global.h"
8
#include "hardware.h"
9
#include "tests.h"
10
#include "self_test.h"
11
#include "comm_server.h"
12
#include "comm_robot.h"
13
#include "comm_interactive.h"
14

  
15
int main_default (void)
16
{
17
    dragonfly_init(0);
18

  
19
	// Initialize before using USB
20
	comm_server_init ();
21

  
22
	usb_puts(NL NL NL);
23
	usb_puts("# Diagnostic station version " version_string " starting" NL);
24

  
25
    orb_init_pwm ();
26
	hardware_init ();
27

  
28
	orb1_set (255, 0, 0); usb_puts("# Initializing wireless" NL);
29
	comm_robot_init ();
30
	orb2_set (255, 0, 0); usb_puts("# Done" NL);
31

  
32
	// If button 1 is pressed after initialization of the wireless (which takes about 1s), run all tests.
33
	if (button1_read ())
34
		test_all ();
35

  
36
	// If button 2 is pressed, go to interactive mode (green/green). If not, go to server mode (green/yellow).
37
	if (button2_read ())
38
		interactive_main ();
39
	else
40
		server_main ();
41

  
42
	while (1);
43
	return 0;
44
}
45

  
46
int main_martin (void)
47
{
48
	dragonfly_init (0);
49
	orb_init ();
50

  
51
	if (!button2_read ())
52
	{
53
		// Initialize before using USB
54
		// Do something else
55
	}
56
	else
57
	{
58
		delay_ms (1000);
59
		main_default ();
60
	}
61
	
62
	while (1);
63
	return 0;
64
}
65

  
66
int main_john (void)
67
{
68
    dragonfly_init(0);
69

  
70
	// Initialize before using USB
71
	comm_server_init ();
72

  
73
	usb_puts(NL NL NL);
74
	usb_puts("# Diagnostic station version " version_string " starting" NL);
75

  
76
    orb_init_pwm ();
77
	hardware_init ();
78

  
79
	orb1_set (255, 0, 0); usb_puts("# Initializing wireless" NL);
80
	comm_robot_init ();
81
	orb2_set (255, 0, 0); usb_puts("# Done" NL);
82

  
83
	while (1) {
84

  
85
			ibom_set(true);
86
			delay_ms(500);
87
			ibom_set(false);
88
			delay_ms(500);
89
	}
90
	return 0;
91
}
92

  
93

  
94
int main_evan (void)
95
{
96
    dragonfly_init(0);
97

  
98
    usb_init ();
99

  
100
	usb_puts(NL NL NL);
101
	usb_puts("# Diagnostic station version " version_string " starting" NL);
102

  
103
    orb_init_pwm ();
104
	
105
	hardware_init ();
106
	comm_server_init ();
107
	comm_robot_init ();
108

  
109
	orb1_set (255, 0, 0); usb_puts("# Initializing wireless" NL);
110
	xbee_init ();
111
	wl_init();
112
	orb2_set (255, 0, 0); usb_puts("# Done" NL);
113

  
114

  
115
	// If button 1 is pressed after initialization of the wireless (which takes about 1s), run all tests.
116
	if (button1_read ())
117
			test_all ();
118

  
119
	// If button 2 is pressed, go to interactive mode (green/green). If not, go to server mode (green/yellow).
120
	if (button2_read ())
121
		interactive_main ();
122
	else
123
	{
124
		// Set the orbs to green/yellow
125
		orbs_set (0,255,0, 255,127,0);
126

  
127
		server_main ();
128
	}
129

  
130
	while (1);
131
	return 0;
132
}
133

  
134
int main_kwoo (void)
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff