PIC18F Structure Problem (xc8)

OP Persönliche Seite #3713794
Lesenswert?

Hallo,

ich arbeite gerade an einem Projekt mit einem PIC18F26K80 (mein erster 
PIC ;-) und habe ein Problem mit einer Structure. Je nachdem wie groß 
ich diese mache (34 oder 66 Byte) läuft das Programm oder es zeigt Murks 
(bei ...SIZE 64 gehts - bei 32 nicht).

Hier der Codeausschnitt:
main.h
1
#define SERIAL_BUFFER_SIZE      32
2
...
3
/* circular buffer */
4
typedef struct serial_buffer_t {
5
    unsigned char head;
6
    unsigned char tail;
7
    unsigned char data[SERIAL_BUFFER_SIZE];
8
};
main.c
1
#include "main.h"
2
#include "usart.h"
3

4
const char * s1 = "circular buffer is working!\r\n";
5
const char * s2 = "USART is working!\r\n";
6

7
volatile unsigned char timer_ticks=0;
8
struct serial_buffer_t tx_fifo, rx_fifo;
9
...
10
void main(void) {
11
...
12
    tx_fifo.head=0;
13
    tx_fifo.tail=0;
14
    rx_fifo.head=0;
15
    rx_fifo.tail=0;

Output (Size 32 Byte Data):
1
:7A
2
:7B
3
:7C
4
:7D
5
:7E

Output (Size 64 Byte Data):
1
USART is working!
2
r:01
3
USART is working!
4
r:02
5
USART is working!
6
r:03
7
USART is working!
8
r:04

Der Compiler ist: xc8 v1.30

Später soll der Ring Buffer benutzt werden um die Kommunikation über die 
serielle Schnistelle zu entzerren, aber schon bei der Deklarierung bzw. 
Speicherbelegung stimmt etwas nicht.
Hat jemand eine Idee, was ich falsch mache ?

Vielen Dank und Grüße

Gerd
Angehängte Dateien:
OP Persönliche Seite #3714680
Lesenswert?

Vielen Dank Tom für Deine Antwort. Ich habe typedef mal rausgenommen, 
wie es auch im K&R Standardwerk beschrieben ist. Es ist kein 
Unterschied; es funktioniert immer noch nicht.

Tom W. schrieb:
> Müsste es net
>
>
1
typedef struct{
2
     unsigned char head;
3
     unsigned char tail;
4
     unsigned char data[SERIAL_BUFFER_SIZE];
5
 }serial_buffer_t;
>
> heißen? Wobei das natürlich net erklärt, warum es mit 32 klappt, mit 64
> aber net.
>
> Tom

Wie gesagt, mit 64 Byte funktioniert es , mit 32 Byte Data nicht. Ich 
habe auch mal auf xc8 v 1.32 upgedated - kein Unterschied.

Gruß

Gerd

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