X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcfg%2Fmacros.h;h=3ec6b277e51f320f87937098c1a88094ce965a1d;hb=bfe473a7e8951b16edbd6559b828a37e6ce378aa;hp=0dad9d393effcb3f44abfa7aa85264c342a27206;hpb=3869cb55efcc879e7df05b785ce9759cb59b5836;p=bertos.git diff --git a/bertos/cfg/macros.h b/bertos/cfg/macros.h index 0dad9d39..3ec6b277 100644 --- a/bertos/cfg/macros.h +++ b/bertos/cfg/macros.h @@ -32,7 +32,6 @@ * * \brief Common and handy function macros * - * \version $Id$ * \author Bernie Innocenti * \author Giovanni Bajo */ @@ -95,6 +94,11 @@ #define MAX(a,b) (((a) > (b)) ? (a) : (b)) #endif /* !(COMPILER_STATEMENT_EXPRESSIONS && COMPILER_TYPEOF) */ +/** Align \p value to the next \p align boundary */ +#define ALIGN_UP(value, align) (((value) & ((align) - 1)) ? \ + (((value) + ((align) - 1)) & ~((align) - 1)) : \ + (value)) + /** Bound \a x between \a min and \a max. */ #define MINMAX(min,x,max) (MIN(MAX(min, x), max)) @@ -158,7 +162,7 @@ * Reverse the bits contained in b (LSB becomes the MSB and so on). * \note \a b is evaluated twice */ -#define REVERSE(b) \ +#define REVERSE_UINT8(b) \ ((uint8_t)((((b) * 0x0802UL & 0x22110UL) | ((b) * 0x8020UL & 0x88440UL)) * 0x10101UL >> 16)) #ifndef BV @@ -182,6 +186,13 @@ */ #define DIV_ROUND(dividend, divisor) (((dividend) + (divisor) / 2) / (divisor)) +/** + * Perform an integer division rounding the result to the upper int value. + * \note \a divisor should preferibly be a costant, otherwise this macro generates + * 2 division. Also divisor is evaluated twice. + */ +#define DIV_ROUNDUP(dividend, divisor) (((dividend) + (divisor) - 1) / (divisor)) + /** Round up \a x to an even multiple of the 2's power \a pad. */ #define ROUND_UP2(x, pad) (((x) + ((pad) - 1)) & ~((pad) - 1))