https://bitbucket.org/hudson/magic-lantern
Raw File
Tip revision: 5b026d2cf6d3fdbfb7a1a883724c8f81d7cc90f0 authored by Alessandro Profiti on 16 February 2018, 14:54:48 UTC
mlv_dump.c: Fix duplicate ELNS Block processing
Tip revision: 5b026d2
util.c


#include <dryos.h>
#include <property.h>
#include <util.h>

/* helper functions for atomic in-/decrasing variables */
void util_atomic_inc(uint32_t *value)
{
    uint32_t old_int = cli();
    (*value)++;
    sei(old_int);
}

void util_atomic_dec(uint32_t *value)
{
    uint32_t old_int = cli();
    (*value)--;
    sei(old_int);
}

/* simple binary search */
/* crit returns negative if the tested value is too high, positive if too low, 0 if perfect */
int bin_search(int lo, int hi, CritFunc crit)
{
    ASSERT(crit);
    if (lo >= hi-1) return lo;
    int m = (lo+hi)/2;
    int c = crit(m);
    if (c == 0) return m;
    if (c > 0) return bin_search(m, hi, crit);
    return bin_search(lo, m, crit);
}
back to top