Created Tue, 14 Jun 2011 23:01:01 +0000 by pial
Tue, 14 Jun 2011 23:01:01 +0000
I am trying to run an example sketch of Philips PCF8833 graphics lcd library and getting the following error:
fatal error: avr/pgmspace.h: No such file or directory compilation terminated.
Is there anything that mpIDE has that replaces this header file?
Tue, 14 Jun 2011 23:25:55 +0000
Here's what I've done to circumvent this issue:
/* PGMSPACE */
#if defined(__PIC32MX__)
    // neither PROGMEM or PSTR are needed for PIC32, just define them as null
    #define PROGMEM
    #define PSTR(s) (s)
#else
    #include <avr/pgmspace.h>
#endif
and if you use printProgStr add this:
#if defined(__PIC32MX__)
    #define printProgStr(s)     Serial.print(s);
#else
    /* given a PROGMEM string, use Serial.print() to send it out */
    /* Some non-intuitive casting necessary:                           */
    /* printProgStr(PSTR("Func.Mode:\t0x"));                           */
    /* printProgStr((char*)pgm_read_word(&mtpopNames[(op & 0xFF)]));   */
    void printProgStr(const char* str )
    {
      if(!str) {
        return;
      }
      char c;
      while((c = pgm_read_byte(str++))) {
        Serial.print(c,BYTE);
      }
    }
#endif
I'm not sure if it works, I haven't completed the port of what I'm working on.
My two axioms of embedded development First Axiom: If the tools work, then your job is easy. Second Axiom: The tools never work.
Wed, 15 Jun 2011 05:27:08 +0000
Thanks for the reply Jacob. I tried what you suggested and seems like it's looking for the following now..
_SFR_BYTE _BV pgm_read_word
Are these also not needed to be defined?
Wed, 15 Jun 2011 05:49:34 +0000
I'm not sure what those are for. I did get my code working but it looks like your lib is using somethings mine is not. I'll dig into it a bit more tomorrow or the next day.
I only converted the parts of pgmspace.h I needed to get my lib working.
Jacob
Fri, 17 Jun 2011 00:36:48 +0000
Can you post some code that is using these calls?
I think you can probably do something like this:
#define pgm_read_byte_near(address_short) (address_short) #define pgm_read_word_near(address_short) (address_short) #define pgm_read_dword_near(address_short) (address_short)
But I couldn't say for sure if this will work without seeing the code that is calling these functions.
Jacob
Fri, 17 Jun 2011 06:06:38 +0000
These are already defined in wiring.h
#if !defined(AVR) #define PROGMEM #define pgm_read_byte_near(x) (*((char )x)) #define pgm_read_byte_far(x) (((char )x)) #define pgm_read_word_near(x) (((short )x)) #define pgm_read_workd_far(x) (((short *)x))
#define	prog_void		const void
#define	prog_char		const char
#define	prog_uchar		const unsigned char
#define	prog_int8_t		const int8_t
#define	prog_uint8_t	const uint8_t
#define	prog_int16_t	const int16_t
#define	prog_uint16_t	const uint16_t
#define	prog_int32_t	const int32_t
#define	prog_uint32_t	const uint32_t
#define	prog_int64_t	const int64_t
#define	prog_uint64_t	const uint64_t
#endif
Sun, 19 Jun 2011 23:11:10 +0000
These are already defined in wiring.h
Is wiring.h an Arduino lib, or was it made special for chipKIT?
The Arduino sketches I'm looking at seem to expect prog_read_byte(x) to come from avr/pgmspace.h. If they are looking in avr/pgmspace.h, why are these defined in wiring.h?
Jacob