EE445M RTOS
Taken at the University of Texas Spring 2015
nexus.h
Go to the documentation of this file.
1 /* -*- mode: c; c-basic-offset: 4; -*- */
2 #ifndef __NEXUS__
3 #define __NEXUS__
4 
5 #include "defines.h"
6 #include <stdint.h>
7 
9 #define immutable
10 
11 /* TODO: doxygenize */
12 #define public
13 #define private
14 
17 #define always __attribute__((always_inline))
18 
20 #define atomic_start() \
21  int32_t atom; \
22  atom = StartCritical()
23 
25 #define atomic_end() \
26  EndCritical(atom)
27 
32 #define atomic(x) { \
33  int32_t atom; \
34  atom = StartCritical(); \
35  x \
36  EndCritical(atom); \
37 }
38 
40 #define postpone_death() \
41  while(1)
42 
45 #define Hz
46 
48 typedef int32_t memory_address_t;
49 
51 typedef int32_t frequency_t;
52 
57 always static inline
58 int32_t StartCritical() {
59  asm("MRS R0, PRIMASK ;// save old status\n");
60  asm("CPSID I ;// mask all (except faults)\n");
61 }
62 
66 always static inline
67 void EndCritical(int32_t primask) {
68  /* asm("MSR PRIMASK, R0\n"); */
69 
74  asm("CPSIE I");
75 }
76 
78 void* memset(void*, int, int);
79 
81 void* memcpy(void*, const void*, long);
82 
84 int strcmp(const char*, const char*);
85 
87 int ustrncmp(const char*, const char*, uint32_t);
88 
90 void ustrcpy(char*, const char*);
91 
93 uint32_t ustrlen(const char *s);
94 
95 #endif
void ustrcpy(char *, const char *)
Definition: nexus.c:69
#define always
Definition: nexus.h:17
uint32_t ustrlen(const char *s)
Definition: nexus.c:17
int ustrncmp(const char *, const char *, uint32_t)
Definition: nexus.c:40
void * memcpy(void *, const void *, long)
Definition: nexus.c:25
int strcmp(const char *, const char *)
Definition: nexus.c:35
void * memset(void *, int, int)
Definition: nexus.c:4
int32_t frequency_t
Definition: nexus.h:51
int32_t memory_address_t
Definition: nexus.h:48