AVR HEX-BOT Programmierung

OP #3496321
Lesenswert?

ich hab mir ein Hex-bot gebaut. ein Roboter mit 6 Beinen und je 3 
servos.
die servos werden über ein Servo-Bord(slave) angesteuert, welches über
I2C(TWI) mit einem ATMega32(Master) verbunden ist.

die sollwinkel der servos stehen in ein array von
1
struct movement_struckt{ float pos[21];uint8_t step;};  // move.h
wobei pos die winkel aller ansteuerbaren servos enthält und sep die 
Wartezeit ist bis die servos die Position erreichen.  siehe main.c 
Anfang

die Funktion
1
int movement(const struct movement_struckt *move_x);
führt alle Bewegungen eines solchen array nacheinander aus. siehe move.c

mein Problem:  die arrays
1
const struct movement_struckt move_up[6];
2
const struct movement_struckt move_down[6];
lassen sich beide richtig ausführen, wenn ich jeweils das andere array 
auskommentiere. wenn ich jedoch beide in meinem Programm habe und sie 
hintereinander ausführen möchte, spielen alle servos verrückt und fahren 
sogar an Positionen außerhalb meiner programmierten Begrenzung

ich habe zuerst vermutet das der Speicher voll ist. habe es mir daher 
mit avr-size angeschaut:
1
...:~/projekte/hexbot$ avr-size --mcu=atmega32 -C bin/Release/hexbot.elf
2
AVR Memory Usage
3
----------------
4
Device: atmega32
5

6
Program:    7152 bytes (21.8% Full)
7
(.text + .data + .bootloader)
8

9
Data:       1450 bytes (70.8% Full)
10
(.data + .bss + .noinit)

daraus entnehme ich das noch platz ist.

Hat jemand eine Idee wo mein Fehler liegt? ich komme echt nicht weiter.
Angehängte Dateien:
Gast #3496328
Lesenswert?

joachim j. schrieb:
> daraus entnehme ich das noch platz ist.

ja, aber nur beim Start. Nach dem Prozeduren aufgerufen werden braucht 
man auch noch Platz für den Stack.

Ich würde zur Optimierung auf float verzichten, so genau kann eh kein 
Servo sein. Vermutlich reicht sogar ein Byte aus.
Gast #3496337
Lesenswert?

Nachtrag:

const struct movement_struckt move_home[2]=
const struct movement_struckt move_down[6]=
const struct movement_struckt move_up[6]=


mache die variablen mal noch static, und schau dann mal die 
Speicherausgabe an.
Gast #3496384
Lesenswert?

Die beiden Arrays sind zusammen 170 Byte groß, dazu kommen dann noch ein 
paar weitere lokale Variablen. Das kann noch passen, muß aber nicht.

Wenn die Arrays sowieso konstant sind, kannst du die auch im Flash 
unterbringen, das spart Sram.

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren