Mon 16 Mar 11:09:06 CET 2026
This commit is contained in:
parent
acf58a5870
commit
9baeec2334
157
src/config.h
Normal file
157
src/config.h
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
#ifndef _CONFIG_H
|
||||
#define _CONFIG_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(__TINYC__)
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
|
||||
#define DEBUG 1
|
||||
#define PROFILE 1
|
||||
|
||||
#define HAS_TYPES 1
|
||||
#define HAS_FLOAT 0
|
||||
/* Support for functions and local variables (stack) */
|
||||
#define HAS_FUNC 1
|
||||
/* Speed-up variable look-up with small hash table */
|
||||
#define HASH_VAR 1
|
||||
|
||||
/*
|
||||
A stack undeflow can only occur if compiler generates wrong code or VM is faulty.
|
||||
Or external ccalls are wrong.
|
||||
Should only be enabled for testing and debugging.
|
||||
*/
|
||||
#define STACKUNDERFLOWCHECK 0
|
||||
|
||||
/* Default length of strings (heap) */
|
||||
#define DEFSTRINGLEN 16
|
||||
/* event module: maximal number of events (table) */
|
||||
#define MAXEVENTS 16
|
||||
/* maximum length of identifiers */
|
||||
#define MAXNAMELEN 8
|
||||
/* maximum number of context tasks. At least 1, typical 2 (0: main program, foreground, 1:command line, background) */
|
||||
#define MAXTASKS 4
|
||||
/* Memory alignment of data part of variables (scalars, strings, arrays) */
|
||||
#define MEMALIGN 2
|
||||
/* Memory alignment of data part of variables (scalars, strings, arrays) */
|
||||
/* Total padding is HAS_LOCK + VARPADDING */
|
||||
#define VARPADDING 0
|
||||
/* Variable/Function locking via lock(x) and unlock(x) */
|
||||
#define HAS_LOCK 1
|
||||
|
||||
/* Default stack size */
|
||||
#define DEFSTACKSIZE 100
|
||||
|
||||
/* Defaukt number type, inherited by stacks, too */
|
||||
#define NUMBER_T int16_t
|
||||
|
||||
/* Some functions can be inlined, leave empty if these function candidates should not be converted to inline code */
|
||||
#define INLINE
|
||||
|
||||
/* SHM support for debgging and hw-signal simulation? */
|
||||
#define SHM 1
|
||||
|
||||
/* With network module supporting serial communication devices? */
|
||||
#define HAS_NET 1
|
||||
/* W/o routing a simplified network module is used providing only down- and up-direction message proapagation with 1 link per node */
|
||||
#define HAS_NET_ROUTING 0
|
||||
/* Maximal number of serial ports (1 if HAS_NET and HAS_NET_ROUTING=0) */
|
||||
#define NUMPORTS 1
|
||||
/* Port buffer PORTRXBUFFERSIZE:[rx,inp] PORTTXBUFFERSIZE:[tx], one port*/
|
||||
#define PORTRXBUFFERSIZE 1024
|
||||
/* only needed if HAS_NET_ROUTING==1 */
|
||||
#define PORTTXBUFFERSIZE 1024
|
||||
/* message log buffer (shared by all ports), number of messages, only for HAS_NET_ROUTING==1 */
|
||||
#define MSGLOGSIZE 32
|
||||
|
||||
|
||||
/** MEMORY ***/
|
||||
/* Dynamic memory allocation */
|
||||
#define MEMALLOC malloc
|
||||
#define MEMCOPY memcpy
|
||||
#define MEMSET memset
|
||||
/*
|
||||
VM access to communication channels (including stdin,stdout)
|
||||
Without or with net module (or only mini net w/o routing).
|
||||
|
||||
Entry points are the following operations that must be provided by the host application.
|
||||
*/
|
||||
/*
|
||||
IO Multiplexer API: These funcions must be provided by host applcation.
|
||||
fd >= 0: Real file or serial port IO from net module
|
||||
fd <= 0: Virtual IO by VM, must be handled separately
|
||||
*/
|
||||
extern int availbyte(int fd);
|
||||
extern char inbyte(int fd);
|
||||
extern int outbyte(int fd,char x);
|
||||
|
||||
#define AVAILBYTE(fd) availbyte(-(fd+1))
|
||||
#define INBYTE(fd) inbyte(-(fd+1))
|
||||
#define OUTBYTE(fd,x) outbyte(-(fd+1),x)
|
||||
|
||||
/*
|
||||
Wake up blocked Loop (if Loop is blocking)
|
||||
Unix: self sending of signal
|
||||
Actually not needed.
|
||||
*/
|
||||
extern void interrupt();
|
||||
#define INTERRUPT() interrupt()
|
||||
|
||||
/*
|
||||
Read/write-through versions w/o using the net module, can be used for single node systems
|
||||
#define AVAILBYTE(fd) 1
|
||||
#define INBYTE(fd) getchar()
|
||||
#define OUTBYTE(fd,x) putchar(x)
|
||||
*/
|
||||
|
||||
#ifndef MILLIS
|
||||
// millis, relative to program start
|
||||
/* return system clock in milliseconds */
|
||||
#include <sys/time.h>
|
||||
time_t __millis0;
|
||||
suseconds_t __micros0;
|
||||
#define MILLIS() ({ \
|
||||
struct timeval t ; \
|
||||
gettimeofday ( & t , NULL ) ; \
|
||||
unsigned long retval = (int)((t.tv_sec * 1000 + ( t.tv_usec + 500 ) / 1000)-__millis0); \
|
||||
retval;\
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifndef MICROS
|
||||
#define MICROS() ({ \
|
||||
struct timeval t ; \
|
||||
gettimeofday ( & t , NULL ) ; \
|
||||
unsigned long retval = t.tv_usec - __micros0; \
|
||||
retval;\
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifndef TIMEINIT
|
||||
// timeinit
|
||||
#define TIMEINIT() {\
|
||||
struct timeval t ; \
|
||||
gettimeofday ( & t , NULL ) ; \
|
||||
__millis0 = t.tv_sec * 1000 + ( t.tv_usec + 500 ) / 1000 ;\
|
||||
__micros0 = t.tv_usec;\
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int iowait();
|
||||
#define IOINIT ioinit
|
||||
#define IOAWAIT iowait
|
||||
|
||||
|
||||
// Only for debugging/monitoring (print_format can be redirected to router/serial port)
|
||||
// always redirected to stdout
|
||||
#ifdef DEBUG
|
||||
void vLog(const char* fmtStr, ...);
|
||||
#else
|
||||
#define vLog(...)
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue
Block a user