]> cloudbase.mooo.com Git - z180-stamp.git/blame - include/common.h
commandtable, flags: int --> uint8_t/uint_fast8_t. Macro UNUSED for Parameters/Variables
[z180-stamp.git] / include / common.h
CommitLineData
35edb766
L
1/*
2 * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
3 *
a1595a8e 4 * SPDX-License-Identifier: GPL-2.0
35edb766
L
5 */
6
d684c216
L
7#ifndef COMMON_H
8#define COMMON_H
9
a1595a8e
L
10#include <stdio.h>
11#include <stdint.h>
12
587f9485
L
13#define GCC_VERSION (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__)
14
93ea25f2
L
15#define USED __attribute__((used))
16#define UNUSED __attribute__((unused))
17
d684c216
L
18#ifdef __AVR__
19#include <avr/io.h>
889202c4 20#include <avr/pgmspace.h>
8a7decea
L
21#include <util/delay.h>
22
23#define udelay(n) _delay_us(n)
d684c216 24
26331e24
L
25struct bits {
26 uint8_t b0:1;
27 uint8_t b1:1;
28 uint8_t b2:1;
29 uint8_t b3:1;
30 uint8_t b4:1;
31 uint8_t b5:1;
32 uint8_t b6:1;
33 uint8_t b7:1;
34} __attribute__((__packed__));
35
36#define SBIT(port,pin) ((*(volatile struct bits*)&port).b##pin)
37
587f9485 38//GCC bug PR61443
d684c216
L
39// Known to work: 4.8.4, 4.9.1
40// Known to fail: 4.8.3, 4.9.0
587f9485
L
41
42#if (GCC_VERSION < 40804) || (GCC_VERSION == 40900)
d684c216 43#define GCC_BUG_61443 1
587f9485 44#endif /* PR61443 */
d684c216
L
45
46#else
47// TODO: stm32
72f58822 48#endif /* __AVR__ */
d684c216 49
d684c216
L
50#ifdef __FLASH
51#define FLASH __flash
fc30b18e 52#define MEMX __memx
d684c216
L
53#else
54#define FLASH
fc30b18e 55#define MEMX
26331e24 56#endif
d684c216
L
57
58#define stringify(s) tostring(s)
59#define tostring(s) #s
60
61#define FSTR(X) ((const FLASH char[]) { X } )
62#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
63
d264541a
L
64#define MIN(a,b) ({ typeof (a) _a = (a); \
65 typeof (b) _b = (b); \
66 _a < _b ? _a : _b; })
67#define MAX(a,b) ({ typeof (a) _a = (a); \
68 typeof (b) _b = (b); \
69 _a > _b ? _a : _b; })
d684c216
L
70
71#ifdef __AVR__
72#define Stat GPIOR0
73#else
74extern volatile uint_least8_t Stat;
72f58822 75#endif /* __AVR__ */
d684c216 76
35edb766 77#define S_10MS_TO (1<<0)
8a7decea
L
78#define S_MSG_PENDING (1<<1)
79#define S_CON_PENDING (1<<2)
d684c216 80
26331e24 81static inline
d684c216
L
82void my_puts(const char *s)
83{
84 fputs(s, stdout);
d684c216
L
85}
86
26331e24 87static inline
d684c216
L
88void my_puts_P(const char *s)
89{
61b0cfe9 90#ifdef __AVR__
d684c216 91 fputs_P(s, stdout);
72f58822 92#else
72f58822 93 fputs(s, stdout);
72f58822 94#endif /* __AVR__ */
61b0cfe9
L
95}
96
d684c216 97#endif /* COMMON_H */