#ifndef BITBUFFER_H
#define BITBUFFER_H
   // Размер байта = 8 бит

   // преобразует номер бита в цепочке байтов в смещение байта от начала буфера
   #define BIT2BYTE_OFFSET(n)   ((n)/8)
   #define BITinBYTE_MASK(n)    (1ul<<((n)%8))

   // опеределяет минимальный размер в байтах достаточный для хранения n бит
   #define BITBUFFER_SIZE(n)    ((n)/8 + 1)

   // установка, сброс, проверка битов в потоке байтов
   #define BITBUFFER_CHECK(bytesStream,n)    (((bytesStream)[ BIT2BYTE_OFFSET(n) ]) &  BITinBYTE_MASK(n))
   #define BITBUFFER_SET(  bytesStream,n)     ((bytesStream)[ BIT2BYTE_OFFSET(n) ]) |= BITinBYTE_MASK(n)
   #define BITBUFFER_CLEAR(bytesStream,n)     ((bytesStream)[ BIT2BYTE_OFFSET(n) ]) &= (~BITinBYTE_MASK(n))

      // поиск номера начального сектора по адресу
   #define __FLASH_ADDRESS2SECTOR_BEGIN(addr,sectSize)     ((addr)/(sectSize))
   #define __FLASH_ADDRESS2SECTOR_END(addr,sectSize)       (((addr)/(sectSize)) + ((((addr)%(sectSize))>0)?1:0))
#endif