Loading...
Searching...
No Matches
bitfield.h File Reference

Bitfield operations on bitfields of arbitrary length. More...

Detailed Description

Bitfield operations on bitfields of arbitrary length.

Note
Code taken mostly from Stackoverflow, User Christoph
Author
Oliver Hahm olive.nosp@m.r.ha.nosp@m.hm@in.nosp@m.ria..nosp@m.fr

Definition in file bitfield.h.

#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include <string.h>
#include "irq.h"
+ Include dependency graph for bitfield.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define BITFIELD(NAME, SIZE)
 Declare a bitfield of a given size.
 

Functions

static void bf_set (uint8_t field[], size_t idx)
 Set the bit to 1.
 
static void bf_set_atomic (uint8_t field[], size_t idx)
 Atomically set the bit to 1.
 
static void bf_unset (uint8_t field[], size_t idx)
 Clear the bit.
 
static void bf_unset_atomic (uint8_t field[], size_t idx)
 Atomically clear the bit.
 
static void bf_toggle (uint8_t field[], size_t idx)
 Toggle the bit.
 
static void bf_toggle_atomic (uint8_t field[], size_t idx)
 Atomically toggle the bit.
 
static bool bf_isset (const uint8_t field[], size_t idx)
 Check if the bet is set.
 
static void bf_or (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len)
 Perform a bitwise OR operation on two bitfields out = a | b
 
static void bf_or_atomic (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len)
 Atomically perform a bitwise OR operation on two bitfields out = a | b
 
static void bf_and (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len)
 Perform a bitwise AND operation on two bitfields out = a & b
 
static void bf_and_atomic (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len)
 Atomically perform a bitwise AND operation on two bitfields out = a & b
 
static void bf_xor (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len)
 Perform a bitwise XOR operation on two bitfields out = a ^ b
 
static void bf_xor_atomic (uint8_t out[], const uint8_t a[], const uint8_t b[], size_t len)
 Atomically perform a bitwise XOR operation on two bitfields out = a ^ b
 
static void bf_inv (uint8_t out[], const uint8_t a[], size_t len)
 Perform a bitwise NOT operation on a bitfield out = ~a
 
static void bf_inv_atomic (uint8_t out[], const uint8_t a[], size_t len)
 Atomically perform a bitwise NOT operation on a bitfield out = ~a
 
int bf_get_unset (uint8_t field[], size_t len)
 Atomically get the number of an unset bit and set it.
 
int bf_find_first_set (const uint8_t field[], size_t size)
 Get the index of the first set bit in the field.
 
int bf_find_first_unset (const uint8_t field[], size_t size)
 Get the index of the zero bit in the field.
 
void bf_set_all (uint8_t field[], size_t size)
 Set all bits in the bitfield to 1.
 
static void bf_set_all_atomic (uint8_t field[], size_t size)
 Atomically set all bits in the bitfield to 1.
 
void bf_clear_all (uint8_t field[], size_t size)
 Clear all bits in the bitfield to 0.
 
static void bf_clear_all_atomic (uint8_t field[], size_t size)
 Atomically clear all bits in the bitfield to 0.
 
unsigned bf_popcnt (const uint8_t field[], size_t size)
 Count set bits in the bitfield.