#include <avr/io.h>
#include <stdio.h>
#include <avr/version.h>
#include "FunctionAttributes.h"
#include "BoardTypes.h"
#include <alloca.h>
Defines | |
#define | MACROS do |
#define | MACROE while (0) |
#define | JTAG_DEBUG_POINT() asm volatile ("NOP" ::) |
#define | JTAG_DEBUG_BREAK() asm volatile ("BREAK" ::) |
#define | JTAG_DEBUG_ASSERT(x) MACROS{ if (!(x)) { JTAG_DEBUG_BREAK(); } }MACROE |
#define | SERIAL_STREAM_ASSERT(x) |
Functions | |
static void | SetSystemClockPrescaler (uint8_t PrescalerMask) |
static uint8_t | BitReverse (uint8_t Byte) ATTR_WARN_UNUSED_RESULT ATTR_CONST |
static uint16_t | SwapEndian_16 (uint16_t Word) ATTR_WARN_UNUSED_RESULT ATTR_CONST |
static uint32_t | SwapEndian_32 (uint32_t DWord) ATTR_WARN_UNUSED_RESULT ATTR_CONST |
static void | SwapEndian_n (uint8_t *Data, uint8_t Bytes) |
#define JTAG_DEBUG_ASSERT | ( | x | ) | MACROS{ if (!(x)) { JTAG_DEBUG_BREAK(); } }MACROE |
Macro for testing condition "x" and breaking via JTAG_DEBUG_BREAK() if the condition is false.
#define JTAG_DEBUG_BREAK | ( | ) | asm volatile ("BREAK" ::) |
Defines an explicit JTAG break point in the resulting binary via the ASM BREAK statment. When a JTAG is used, this causes the program execution to halt when reached until manually resumed.
#define JTAG_DEBUG_POINT | ( | ) | asm volatile ("NOP" ::) |
Defines a volatile NOP statment which cannot be optimized out by the compiler, and thus can always be set as a breakpoint in the resulting code. Useful for debugging purposes, where the optimizer removes/reorders code to the point where break points cannot reliably be set.
#define MACROE while (0) |
Macro for encasing other multi-statment macros. This should be used along with a preceeding closing brace at the end of any multi-statement macro, so that the macros contents as a whole are treated as a discreete block and not as a list of seperate statements which may cause problems when used as a block (such as inline IF statments).
#define MACROS do |
Macro for encasing other multi-statment macros. This should be used along with an opening brace before the start of any multi-statement macro, so that the macros contents as a whole are treated as a discreete block and not as a list of seperate statements which may cause problems when used as a block (such as inline IF statments).
#define SERIAL_STREAM_ASSERT | ( | x | ) |
Value:
MACROS{ if (!(x)) { printf_P(PSTR("%s: Function \"%s\", Line %d: " \ "Assertion \"%s\" failed.\r\n"), \ __FILE__, __func__, __LINE__, #x); \ } }MACROE
The serial output takes the form "{FILENAME}: Function {FUNCTION NAME}, Line {LINE NUMBER}: Assertion {x} failed."
static uint8_t BitReverse | ( | uint8_t | Byte | ) | [inline, static] |
Function to reverse the individual bits in a byte - i.e. bit 7 is moved to bit 0, bit 6 to bit 1, etc.
Byte | Byte of data whose bits are to be reversed |
static void SetSystemClockPrescaler | ( | uint8_t | PrescalerMask | ) | [inline, static] |
Function for reliably setting the AVR's system clock prescaler, using inline assembly. This function is guaranteed to operate reliably regardless of optimization setting or other compile time options.
PrescalerMask | The mask of the new prescaler setting for CLKPR |
static uint16_t SwapEndian_16 | ( | uint16_t | Word | ) | [inline, static] |
Function to reverse the byte ordering of the individual bytes in a 16 bit number.
Word | Word of data whose bytes are to be swapped |
static uint32_t SwapEndian_32 | ( | uint32_t | DWord | ) | [inline, static] |
Function to reverse the byte ordering of the individual bytes in a 32 bit number.
DWord | Double word of data whose bytes are to be swapped |
static void SwapEndian_n | ( | uint8_t * | Data, | |
uint8_t | Bytes | |||
) | [inline, static] |
Function to reverse the byte ordering of the individual bytes in a n byte number.
Data | Pointer to a number containing an even number of bytes to be reversed | |
Bytes | Length of the data in bytes |