Contiki 2.6
|
Compiler and Platform specific definitions and typedefs for the GNU C ARM compiler. More...
Defines | |
#define | _HAL_USE_COMMON_PGM_ |
Use the Master Program Memory Declarations from platform-common.h. | |
#define | _HAL_USE_COMMON_MEMUTILS_ |
Use the C Standard Library Memory Utilities from platform-common.h. | |
#define | PLATCOMMONOKTOINCLUDE |
Include platform-common.h last to pick up defaults and common definitions. | |
Master Variable Types | |
These are a set of typedefs to make the size of all variable declarations explicitly known. | |
typedef unsigned char | boolean |
A typedef to make the size of the variable explicitly known. | |
typedef unsigned char | int8u |
typedef signed char | int8s |
typedef unsigned short | int16u |
typedef signed short | int16s |
typedef unsigned int | int32u |
typedef signed int | int32s |
typedef unsigned int | PointerType |
Miscellaneous Macros | |
char | __ApplicationFlashStart |
char | __ApplicationFlashEnd |
void | halInternalResetWatchDog (void) |
Macro to reset the watchdog timer. | |
#define | BIGENDIAN_CPU FALSE |
A convenient method for code to know what endiannes processor it is running on. | |
#define | NO_STRIPPING |
A friendlier name for the compiler's intrinsic for not stripping. | |
#define | __no_init |
#define | EEPROM errorerror |
A friendlier name for the compiler's intrinsic for eeprom reference. | |
#define | __SOURCEFILE__ __FILE__ |
The __SOURCEFILE__ macro is used by asserts to list the filename if it isn't otherwise defined, set it to the compiler intrinsic which specifies the whole filename and path of the sourcefile. | |
#define | assert(condition) do { if (! (condition)) {while (1); }} while(0) |
#define | __delay_cycles(x) please_use_halCommonDelayMicroseconds_instead_of_delay_cycles |
__delay_cycles() is an intrinsic IAR call; however, we have explicity disallowed it since it is too specific to the system clock. | |
#define | DEBUG_LEVEL BASIC_DEBUG |
Set debug level based on whether or DEBUG is defined. | |
#define | APPLICATION_IMAGE_START ((u32) &__ApplicationFlashStart) |
Set the application start and end address. | |
#define | APPLICATION_IMAGE_END ((u32) &__ApplicationFlashEnd) |
#define | halResetWatchdog() halInternalResetWatchDog() |
#define | UNUSED |
Define __attribute__ to nothing since it isn't handled by IAR. | |
#define | SIGNED_ENUM |
Some platforms need to cast enum values that have the high bit set. | |
#define | STACK_FILL_VALUE 0xCDCDCDCD |
Define the magic value that is interpreted by IAR C-SPY's Stack View. | |
#define | RAMFUNC __ramfunc |
Define a generic RAM function identifier to a compiler specific one. | |
#define | NO_OPERATION() __no_operation() |
Define a generic no operation identifier to a compiler specific one. | |
#define | SET_REG_FIELD(reg, field, value) |
A convenience macro that makes it easy to change the field of a register to any value. | |
#define | simulatedTimePasses() |
Stub for code not running in simulation. | |
#define | simulatedTimePassesMs(x) |
Stub for code not running in simulation. | |
#define | simulatedSerialTimePasses() |
Stub for code not running in simulation. | |
#define | _HAL_USE_COMMON_DIVMOD_ |
Use the Divide and Modulus Operations from platform-common.h. | |
#define | VAR_AT_SEGMENT(__variableDeclaration, __segmentName) __variableDeclaration __attribute__ ((section (__segmentName))) |
Provide a portable way to specify the segment where a variable lives. | |
#define | ALIGN_VAR(__variableDeclaration, alignment) __variableDeclaration __attribute__ ((aligned(alignment))) |
Portable segment names | |
#define | __NO_INIT__ ".noinit" |
Portable segment names. | |
#define | __INTVEC__ ".intvec" |
#define | __CSTACK__ "CSTACK" |
#define | __DATA_INIT__ ".data_init" |
#define | __DATA__ ".data" |
#define | __BSS__ ".bss" |
#define | __CONST__ ".rodata" |
#define | __TEXT__ ".text" |
#define | __TEXTRW_INIT__ ".textrw_init" |
#define | __TEXTRW__ ".textrw" |
#define | __FAT__ "FAT" |
#define | __NVM__ "NVM" |
Global Interrupt Manipulation Macros | |
Note: The special purpose BASEPRI register is used to enable and disable interrupts while permitting faults.When BASEPRI is set to 1 no interrupts can trigger. The configurable faults (usage, memory management, and bus faults) can trigger if enabled as well as the always-enabled exceptions (reset, NMI and hard fault). When BASEPRI is set to 0, it is disabled, so any interrupt can triggger if its priority is higher than the current priority. | |
int8u | _readBasePri (void) |
void | _writeBasePri (int8u priority) |
void | _enableBasePri (void) |
int8u | _disableBasePri (void) |
boolean | _basePriIsDisabled (void) |
void | _setPriMask (void) |
void | _clearPriMask (void) |
#define | ATOMIC_LITE(blah) ATOMIC(blah) |
#define | DECLARE_INTERRUPT_STATE_LITE DECLARE_INTERRUPT_STATE |
#define | DISABLE_INTERRUPTS_LITE() DISABLE_INTERRUPTS() |
#define | RESTORE_INTERRUPTS_LITE() RESTORE_INTERRUPTS() |
#define | DECLARE_INTERRUPT_STATE int8u _emIsrState |
This macro should be called in the local variable declarations section of any function which calls DISABLE_INTERRUPTS() or RESTORE_INTERRUPTS(). | |
#define | DISABLE_INTERRUPTS() |
Disable interrupts, saving the previous state so it can be later restored with RESTORE_INTERRUPTS(). | |
#define | RESTORE_INTERRUPTS() |
Restore the global interrupt state previously saved by DISABLE_INTERRUPTS() | |
#define | INTERRUPTS_ON() |
Enable global interrupts without regard to the current or previous state. | |
#define | INTERRUPTS_OFF() |
Disable global interrupts without regard to the current or previous state. | |
#define | INTERRUPTS_ARE_OFF() ( _basePriIsDisabled() ) |
#define | INTERRUPTS_WERE_ON() (_emIsrState == 0) |
#define | ATOMIC(blah) |
A block of code may be made atomic by wrapping it with this macro. | |
#define | HANDLE_PENDING_INTERRUPTS() |
Allows any pending interrupts to be executed. | |
#define | SET_BASE_PRIORITY_LEVEL(basepri) |
Sets the base priority mask (BASEPRI) to the value passed, bit shifted up by PRIGROUP_POSITION+1. | |
External Declarations | |
These are routines that are defined in certain header files that we don't want to include, e.g.stdlib.h | |
int | abs (int I) |
Returns the absolute value of I (also called the magnitude of I). |
Compiler and Platform specific definitions and typedefs for the GNU C ARM compiler.
See gnu.h and platform-common.h for source code.
#define __delay_cycles | ( | x | ) | please_use_halCommonDelayMicroseconds_instead_of_delay_cycles |
__delay_cycles() is an intrinsic IAR call; however, we have explicity disallowed it since it is too specific to the system clock.
#define APPLICATION_IMAGE_START ((u32) &__ApplicationFlashStart) |
#define ATOMIC | ( | blah | ) |
{ \ DECLARE_INTERRUPT_STATE; \ DISABLE_INTERRUPTS(); \ { blah } \ RESTORE_INTERRUPTS(); \ }
A block of code may be made atomic by wrapping it with this macro.
Something which is atomic cannot be interrupted by interrupts.
Definition at line 452 of file gnu.h.
Referenced by clock_init(), halInternalFlashErase(), halInternalFlashWrite(), and halToggleLed().
#define BIGENDIAN_CPU FALSE |
#define DEBUG_LEVEL BASIC_DEBUG |
#define DISABLE_INTERRUPTS | ( | ) |
do { \ _emIsrState = _disableBasePri(); \ } while(0)
Disable interrupts, saving the previous state so it can be later restored with RESTORE_INTERRUPTS().
Definition at line 398 of file gnu.h.
Referenced by __at(), and clock_delay_usec().
#define HANDLE_PENDING_INTERRUPTS | ( | ) |
do { \ if (INTERRUPTS_ARE_OFF()) { \ INTERRUPTS_ON(); \ INTERRUPTS_OFF(); \ } \ } while (0)
Allows any pending interrupts to be executed.
Usually this would be called at a safe point while interrupts are disabled (such as within an ISR).
Takes no action if interrupts are already enabled.
#define INTERRUPTS_ARE_OFF | ( | ) | ( _basePriIsDisabled() ) |
#define INTERRUPTS_WERE_ON | ( | ) | (_emIsrState == 0) |
#define RESTORE_INTERRUPTS | ( | ) |
do { \ _writeBasePri(_emIsrState); \ } while(0)
Restore the global interrupt state previously saved by DISABLE_INTERRUPTS()
#define SET_BASE_PRIORITY_LEVEL | ( | basepri | ) |
do { \ _writeBasePri(basepri); \ } while(0)
Sets the base priority mask (BASEPRI) to the value passed, bit shifted up by PRIGROUP_POSITION+1.
This will inhibit the core from taking all interrupts with a preemptive priority equal to or less than the BASEPRI mask. This macro is dependent on the value of PRIGROUP_POSITION in nvic-config.h. Note that the value 0 disables the the base priority mask.
Refer to the "PRIGROUP" table in nvic-config.h to know the valid values for this macro depending on the value of PRIGROUP_POSITION. With respect to the table, this macro can only take the preemptive priority group numbers denoted by the parenthesis.
#define UNUSED |
int abs | ( | int | I | ) |
Returns the absolute value of I (also called the magnitude of I).
That is, if I is negative, the result is the opposite of I, but if I is nonnegative the result is I.
I | An integer. |
Referenced by lcd_num_putdec().
void halInternalResetWatchDog | ( | void | ) |
Macro to reset the watchdog timer.
Note: be very very careful when using this as you can easily get into an infinite loop if you are not careful.
Macro to reset the watchdog timer.
This function is pointed to by the macro halResetWatchdog().
Definition at line 25 of file micro-common.c.