https://bitbucket.org/hudson/magic-lantern
Raw File
Tip revision: 2b4624153022cc359af56eb110de14f4ae556314 authored by g3gg0 on 23 April 2014, 20:32:11 UTC
Close branch pravdomil/readmemd-edited-online-with-bitbucket-1398284535670
Tip revision: 2b46241
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