T6963 Library funktioniert nicht mit IDE 1.6.4

Ich habe Probleme mit der T6963 Library in Verbnindung mit der IDE 1.6.4
Der Compiler zeigt folgende Fehlermeldung:

In file included from MS_HomeControl_V43.ino:92:0:
C:\Program Files (x86)\Arduino\libraries\T6963_Lib/T6963.h:109:23: error: 'prog_char' has not been declared
  void WriteStringPgm(prog_char * str);
                      ^
C:\Program Files (x86)\Arduino\libraries\T6963_Lib/T6963.h:131:44: error: 'prog_uchar' has not been declared
  void drawPic(unsigned int, unsigned int, prog_uchar *, unsigned int, unsigned int);
                                           ^
C:\Program Files (x86)\Arduino\libraries\T6963_Lib/T6963.h:132:45: error: 'prog_uchar' has not been declared
  void drawAnim(unsigned int, unsigned int, prog_uchar**, int, unsigned int, unsigned int);
                                            ^
In file included from MS_HomeControl_V43.ino:93:0:
C:\Program Files (x86)\Arduino\libraries\T6963_Lib/page1.h:23:8: error: 'prog_uchar' does not name a type
extern prog_uchar page1bmp[]; //AVR-GCC, WinAVR
       ^
In file included from MS_HomeControl_V43.ino:94:0:
C:\Program Files (x86)\Arduino\libraries\T6963_Lib/page2.h:23:8: error: 'prog_uchar' does not name a type
extern prog_uchar page2bmp[]; //AVR-GCC, WinAVR
       ^
In file included from MS_HomeControl_V43.ino:95:0:
C:\Program Files (x86)\Arduino\libraries\T6963_Lib/page3.h:23:8: error: 'prog_uchar' does not name a type
extern prog_uchar page3bmp[]; //AVR-GCC, WinAVR
       ^
In file included from MS_HomeControl_V43.ino:96:0:
C:\Program Files (x86)\Arduino\libraries\T6963_Lib/page4.h:23:8: error: 'prog_uchar' does not name a type
extern prog_uchar page4bmp[]; //AVR-GCC, WinAVR

Vielleicht ist es möglich durch eine Änderung im T6963.h File den Fehler zu beheben.

Verwende const + normaler Datentyp für PROGMEM Konstanten. Also z.B. "extern const unsigned char page1bmp[]" oder "const unsigned char*" oder "const char*" (für C Strings)

Diese typedefs sind deprecated und man hat endlich mal die AVR toolchain upgedated. Deshalb passt das jetzt nicht mehr

Vielen Dank für die schnelle Antwort. Ich habe versucht die Vorschläge umzusetzen. Leider mit mäßigem Erfolg.

habe die Files folgendermassen geändert

gfxdata.c

//#######################################################################
//File generated by BMP2C V1.18 17.01.2008
//hk@holger-klabunde.de
//http://www.holger-klabunde.de
//6 pixel per byte for T6963 and 6x8 font
//Horizontal pixel orientation for T6963
//Pixel orientation per Byte: D7..D0 
//#######################################################################

#include <avr/pgmspace.h> //WinAVR
//#include <progmem.h> //AVR-GCC

//const unsigned char code IMG01bmp[]= { //Keil
//const rom unsigned char IMG01bmp[]= { //Microchip C18
//const unsigned char IMG01bmp[]= { //SDCC

const prog_uchar IMG01bmp[]= { //AVR-GCC, WinAVR
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x30,0x00,0x00,0x00,0x00,0x00, ......

File gfxdat.h

//#######################################################################
//File generated by BMP2C V1.18 17.01.2008
//hk@holger-klabunde.de
//http://www.holger-klabunde.de
//6 pixel per byte for T6963 and 6x8 font
//Horizontal pixel orientation for T6963
//Pixel orientation per Byte: D7..D0 
//#######################################################################
#ifndef picture_h //don't do multiple includes of this file
#define picture_h

#include <avr/pgmspace.h> //Win-AVR
//#include <progmem.h> //AVR-GCC

#define pictureWIDTH 120 //Width in pixels
#define pictureHEIGHT 31 //Height in pixels
#define pictureBYTEWIDTH 20 //Width in bytes

//Arduino Image1
#define ArduinoHEIGHT 64 //Height in pixels
#define ArduinoBYTEWIDTH 16 //Width in bytes

//Arduino Image2
#define Arduino1HEIGHT 64 //Height in pixels
#define Arduino1BYTEWIDTH 17 //Width in bytes


//extern const rom unsigned char picturebmp[]; //Microchip C18
//extern const unsigned char code picturebmp[]; //Keil
//extern const unsigned char picturebmp[]; //SDCC

extern const unsigned char IMG01bmp[]; //AVR-GCC, WinAVR
extern const unsigned char IMG02bmp[]; //AVR-GCC, WinAVR
extern const unsigned char IMG03bmp[]; //AVR-GCC, WinAVR
extern const unsigned char IMG04bmp[]; //AVR-GCC, WinAVR

was ich im File t6963.h ändern muss ist mir nicht klar.

Nach mehreren Anläufen hat es nun funktioniert. Allerdings reicht jetzt der Programmspeicher nicht mehr aus. Wie kann ich nun Teile des Programms oder Library's ins Flash verlagern?

Hier die Compiler Fehlermeldung:

Der Sketch verwendet 44.404 Bytes (34%) des Programmspeicherplatzes. Das Maximum sind 126.976 Bytes. 
Globale Variablen verwenden 21.790 Bytes (265%) des dynamischen Speichers, -13.598 Bytes für lokale Variablen verbleiben. Das Maximum sind 8.192 Bytes. 
processing.app.debug.RunnerException: Nicht genug Speicher; unter http://www.arduino.cc/en/Guide/Troubleshooting#size finden sich Hinweise, um die Größe zu verringern. 
at processing.app.debug.Compiler.size(Compiler.java:338) 
at processing.app.debug.Compiler.build(Compiler.java:117) 
at processing.app.Sketch.build(Sketch.java:1162) 
at processing.app.Sketch.build(Sketch.java:1137) 
at processing.app.Editor$BuildHandler.run(Editor.java:2032) 
at java.lang.Thread.run(Thread.java:745) 
Nicht genug Speicher; unter http://www.arduino.cc/en/Guide/Troubleshooting#size finden sich Hinweise, um die Größe zu verringern.

Dann passt noch was nicht. Der Sinn davon ist ja eigentlich dass es nicht im RAM landet.

Was mich wundert, ist dass das die "PROGMEM" Bezeichnung fehlt:

Das könnte der Fehler sein.

Normal wird das so deklariert:

const dataType variableName[] PROGMEM = {data0, data1, data3...};

Dann muss diese Library auch die entsprechenden Makros verwenden um Daten aus dem Flash auszulesen. Durch die Harvard-Architektur des Prozessors und den fehlenden Compiler Support dafür ist das alles ein Krampf über einige Umwege.

vielen Dank das war die Lösung.

Ich habe die vier Bilder mit PROGMEM in den Flashspeicher verschoben und siehe da...

statt 275% nur noch 15% des dynamischen Speichers verwendet.

Der Sketch verwendet 44.404 Bytes (34%) des Programmspeicherplatzes. Das Maximum sind 126.976 Bytes.
Globale Variablen verwenden 1.310 Bytes (15%) des dynamischen Speichers, 6.882 Bytes für lokale Variablen verbleiben. Das Maximum sind 8.192 Bytes.

Läuft das auch? Das es kompiliert ist gut, aber wenn das Programm dann versucht die Daten aus dem RAM auszulesen und sie stehen im Flash hast du ein größeres Problem.