All streams
Search
Write a publication
Pull to refresh
178
99.9

Embedded SW/Firmware Engineer

Send message

У меня тоже есть тексты про UWB

Принцип Определения Дальности Между UWB Трансиверами (Конечный Автомат Для DS-TWR)
https://habr.com/ru/articles/723822/

Зачем Программисту Микроконтроллеров Математическая Статистика?https://habr.com/ru/articles/712616/

Принцип определения дальности между радио трансиверами
https://habr.com/ru/articles/719542/

Вывод формулы для двустороннего определения дальности между UWB трансиверами
https://habr.com/ru/articles/723594/

Обзор технологии Ultra-Wideband на основе трансивера DW1000 (переходник с SPI на UWB)
https://habr.com/ru/articles/715936/

static bool min_heap_make_down(BinHeapHandle_t* Node, int32_t index) {
    bool res = true;
    while(index < Node->size) {
        int32_t left_child, right_child, smallest;
        left_child = 2 * index + 1;
        right_child = 2 * index + 2;
        smallest = index;

        if(left_child < Node->size && Node->array[left_child] < Node->array[smallest]) {
            smallest = left_child;
        }
        if(right_child < Node->size && Node->array[right_child] < Node->array[smallest]) {
            smallest = right_child;
        }
        if(smallest == index) {
            break;
        }
        swap_i32(&Node->array[index], &Node->array[smallest]);
        index = smallest;
    }
    return res;
}

static int32_t min_heap_check_node(BinHeapHandle_t* const Node,
                                   const int32_t value,
                                   uint32_t my_index) {
    int32_t index = -1;
    if (my_index < Node->size) {
        if (value == Node->array[my_index]) {
            index = my_index;
        } else {
            if (Node->array[my_index] < value) {
                uint32_t left = 2 * my_index + 1;
                index = min_heap_check_node(Node, value, left);
                if (-1 == index) {
                    uint32_t right = 2 * my_index + 2;
                    index = min_heap_check_node(Node, value, right);
                }
            } else {
                index = -1;
            }
        }
    }
    return index;
}


bool min_heap_delete(BinHeapHandle_t* const Node, const int32_t value){
    bool res = false;
    int32_t del_index = min_heap_check_node(Node, value, 0);
    if(0 <= del_index) {
        swap_i32(&Node->array[del_index], &Node->array[Node->size-1]);
        Node->size--;
        res = min_heap_make_down(Node, del_index);
    }
    return res;
}

Сделал функцию удаления из куч. Стало работать быстрее в два раза.

Хорошо. А как реализация этого на си выглядит?

Где ещё остались опечатки?

Нужно поставить решающий эксперимент.

У меня так хеш-таблица работает.

Но как из хэш-таблицы посчитать медиану?

При работе с бинарной кучей удалять можно только то, что лежит в корне кучи.

Если число закопано, то ничего быстро не сделаешь.

Да, сложно.

Сбалансированные деревья скорее всего дадут не точную медиану, а значение медианы с погрешностью.

Если просить не точно медиану, а ее приблизительное значение, то можно всё сделать на одном AVL дереве.

Обратите внимание ещё на этот аудиокодек

Обзор AудиоКодека NAU8814YG

https://habr.com/ru/articles/808499/

Может он пригодится в мече.

 а также аудиомикросхема C42L52 с интерфейсом I²S и встроенным усилителем класса D.

Почему вы выбрали именно аудиокодек CS42L52 ?

Где можно скачать *.pdf файл с полной схемотехникой CAN-трансивера USB2CANFD V1?

Вариация USB2CANFDV1 от WeAct studio (STM32G01, 0x0483:0x5740) - зашифрованная прошивка без исходников.

На какой битовой скорости последовательного порта работает этот USB2CANFDV1 ?

На какой битовой скорости последовательного порта работает этот USB2CANFDV1 ?

Information

Rating
71-st
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Embedded Software Engineer, DevOps
Senior
Git
Bash
CI/CD
C
Embedded system
Programming microcontrollers
Software development
Algorithms and data structures
System Programming
Development of drivers