#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