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):
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