Project

General

Profile

Statistics
| Branch: | Revision:

root / arduino-1.0 / libraries / SD / utility / SdFatUtil.h @ 58d82c77

History | View | Annotate | Download (2.57 KB)

1 58d82c77 Tom Mullins
/* Arduino SdFat Library
2
 * Copyright (C) 2008 by William Greiman
3
 *
4
 * This file is part of the Arduino SdFat Library
5
 *
6
 * This Library is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 *
11
 * This Library is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15

16
 * You should have received a copy of the GNU General Public License
17
 * along with the Arduino SdFat Library.  If not, see
18
 * <http://www.gnu.org/licenses/>.
19
 */
20
#ifndef SdFatUtil_h
21
#define SdFatUtil_h
22
/**
23
 * \file
24
 * Useful utility functions.
25
 */
26
#include <Arduino.h>
27
#include <avr/pgmspace.h>
28
/** Store and print a string in flash memory.*/
29
#define PgmPrint(x) SerialPrint_P(PSTR(x))
30
/** Store and print a string in flash memory followed by a CR/LF.*/
31
#define PgmPrintln(x) SerialPrintln_P(PSTR(x))
32
/** Defined so doxygen works for function definitions. */
33
#define NOINLINE __attribute__((noinline,unused))
34
#define UNUSEDOK __attribute__((unused))
35
//------------------------------------------------------------------------------
36
/** Return the number of bytes currently free in RAM. */
37
static UNUSEDOK int FreeRam(void) {
38
  extern int  __bss_end;
39
  extern int* __brkval;
40
  int free_memory;
41
  if (reinterpret_cast<int>(__brkval) == 0) {
42
    // if no heap use from end of bss section
43
    free_memory = reinterpret_cast<int>(&free_memory)
44
                  - reinterpret_cast<int>(&__bss_end);
45
  } else {
46
    // use from top of stack to heap
47
    free_memory = reinterpret_cast<int>(&free_memory)
48
                  - reinterpret_cast<int>(__brkval);
49
  }
50
  return free_memory;
51
}
52
//------------------------------------------------------------------------------
53
/**
54
 * %Print a string in flash memory to the serial port.
55
 *
56
 * \param[in] str Pointer to string stored in flash memory.
57
 */
58
static NOINLINE void SerialPrint_P(PGM_P str) {
59
  for (uint8_t c; (c = pgm_read_byte(str)); str++) Serial.print(c);
60
}
61
//------------------------------------------------------------------------------
62
/**
63
 * %Print a string in flash memory followed by a CR/LF.
64
 *
65
 * \param[in] str Pointer to string stored in flash memory.
66
 */
67
static NOINLINE void SerialPrintln_P(PGM_P str) {
68
  SerialPrint_P(str);
69
  Serial.println();
70
}
71
#endif  // #define SdFatUtil_h