Skip to content

Commit 27bb8b5

Browse files
committed
Merge branch 'master' into develop
2 parents 5d75db6 + 35de59b commit 27bb8b5

File tree

2 files changed

+45
-9
lines changed

2 files changed

+45
-9
lines changed

Arduino/MPU9150/MPU9150.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2984,6 +2984,7 @@ bool MPU9150::writeMemoryBlock(const uint8_t *data, uint16_t dataSize, uint8_t b
29842984
uint8_t j;
29852985
if (verify) verifyBuffer = (uint8_t *)malloc(MPU9150_DMP_MEMORY_CHUNK_SIZE);
29862986
if (useProgMem) progBuffer = (uint8_t *)malloc(MPU9150_DMP_MEMORY_CHUNK_SIZE);
2987+
else progBuffer = NULL;
29872988
for (i = 0; i < dataSize;) {
29882989
// determine correct chunk size according to bank position and data size
29892990
chunkSize = MPU9150_DMP_MEMORY_CHUNK_SIZE;
@@ -3058,6 +3059,8 @@ bool MPU9150::writeDMPConfigurationSet(const uint8_t *data, uint16_t dataSize, b
30583059
uint16_t i, j;
30593060
if (useProgMem) {
30603061
progBuffer = (uint8_t *)malloc(8); // assume 8-byte blocks, realloc later if necessary
3062+
} else {
3063+
progBuffer = NULL;
30613064
}
30623065

30633066
// config set data is a long string of blocks with the following structure:
@@ -3150,4 +3153,4 @@ uint8_t MPU9150::getDMPConfig2() {
31503153
}
31513154
void MPU9150::setDMPConfig2(uint8_t config) {
31523155
I2Cdev::writeByte(devAddr, MPU9150_RA_DMP_CFG_2, config);
3153-
}
3156+
}

Arduino/MPU9150/MPU9150.h

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,49 @@ THE SOFTWARE.
3939

4040
#include "I2Cdev.h"
4141

42-
// supporting link: http://forum.arduino.cc/index.php?&topic=143444.msg1079517#msg1079517
43-
// also: http://forum.arduino.cc/index.php?&topic=141571.msg1062899#msg1062899s
42+
// Tom Carpenter's conditional PROGMEM code
43+
// http://forum.arduino.cc/index.php?topic=129407.0
4444
#ifdef __AVR__
45-
#include <avr/pgmspace.h>
45+
#include <avr/pgmspace.h>
4646
#else
47-
#define PROGMEM /* empty */
48-
#define pgm_read_byte(x) (*(x))
49-
#define pgm_read_word(x) (*(x))
50-
#define pgm_read_float(x) (*(x))
51-
#define PSTR(STR) STR
47+
// Teensy 3.0 library conditional PROGMEM code from Paul Stoffregen
48+
#ifndef __PGMSPACE_H_
49+
#define __PGMSPACE_H_ 1
50+
#include <inttypes.h>
51+
52+
#define PROGMEM
53+
#define PGM_P const char *
54+
#define PSTR(str) (str)
55+
#define F(x) x
56+
57+
typedef void prog_void;
58+
typedef char prog_char;
59+
typedef unsigned char prog_uchar;
60+
typedef int8_t prog_int8_t;
61+
typedef uint8_t prog_uint8_t;
62+
typedef int16_t prog_int16_t;
63+
typedef uint16_t prog_uint16_t;
64+
typedef int32_t prog_int32_t;
65+
typedef uint32_t prog_uint32_t;
66+
67+
#define strcpy_P(dest, src) strcpy((dest), (src))
68+
#define strcat_P(dest, src) strcat((dest), (src))
69+
#define strcmp_P(a, b) strcmp((a), (b))
70+
71+
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
72+
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
73+
#define pgm_read_dword(addr) (*(const unsigned long *)(addr))
74+
#define pgm_read_float(addr) (*(const float *)(addr))
75+
76+
#define pgm_read_byte_near(addr) pgm_read_byte(addr)
77+
#define pgm_read_word_near(addr) pgm_read_word(addr)
78+
#define pgm_read_dword_near(addr) pgm_read_dword(addr)
79+
#define pgm_read_float_near(addr) pgm_read_float(addr)
80+
#define pgm_read_byte_far(addr) pgm_read_byte(addr)
81+
#define pgm_read_word_far(addr) pgm_read_word(addr)
82+
#define pgm_read_dword_far(addr) pgm_read_dword(addr)
83+
#define pgm_read_float_far(addr) pgm_read_float(addr)
84+
#endif
5285
#endif
5386

5487
//Magnetometer Registers

0 commit comments

Comments
 (0)