From c1794a2f1c02d8775926af279e4288feb2392570 Mon Sep 17 00:00:00 2001 From: Mirek Date: Thu, 19 Feb 2026 15:22:15 +0100 Subject: [PATCH] new file: dist_tester_doc.md --- dist_tester_doc.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 dist_tester_doc.md diff --git a/dist_tester_doc.md b/dist_tester_doc.md new file mode 100644 index 0000000..bb63c90 --- /dev/null +++ b/dist_tester_doc.md @@ -0,0 +1,50 @@ +● Widzę że log_manager jest używany, sprawdzę w misc.h: + +● Searched for 5 patterns (ctrl+o to expand) + +● Teraz mam pełny obraz. Oto analiza funkcji set_pointer_in_ptr: + + Analiza funkcji set_pointer_in_ptr + + Lokalizacja: helper_impl.c:58-75 + + Sygnatura + + int set_pointer_in_ptr(u32 io, u32 *pointer_ptr) + + Parametry + + - io - adres w pamięci nets_data (przesunięcie w bitach) + - pointer_ptr - wskaźnik do zmiennej, która otrzyma wartość wskaźnika + + Działanie + + 1. Obliczenie adresu: + f_ptr = (u32 *)(log_manager.nets_data + (io >> 3)); + - io >> 3 konwertuje adres z bitów na bajty + - f_ptr wskazuje na miejsce w tablicy nets_data (u8 nets_data[LOGMAN_NETSDATA_SIZE]) + 2. Walidacja zakresu: + if((u8 *)f_ptr > (log_manager.nets_data + sizeof(log_manager.nets_data) - sizeof(void *))) + return -1; + - Sprawdza czy nie wychodzi poza granicę tablicy + 3. Ustawienie wskaźnika - przypadek specjalny dla "net 0": + if((u32)f_ptr == (u32)&log_manager.nets_data[0]) + *(u32 *)pointer_ptr = (u32)f_ptr; // bezpośredni adres + else + *(u32 *)pointer_ptr = (u32)*f_ptr; // wartość spod adresu + - Jeśli adres to początek tablicy (nets_data[0]) → używa bezpośredniego adresu + - W przeciwnym razie odczytuje wartość 32-bitową spod tego adresu i traktuje ją jako wskaźnik + 4. Walidacja czy wskaźnik nie jest zerowy: + if(!*f_ptr) + return -1; + + Cel funkcji + + Funkcja służy do rozwiązywania pośrednich wskaźników w systemie dystrybucji sygnałów. System używa tablicy nets_data do przechowywania: + - Bezpośrednich danych (dla "net 0") + - Pośrednich referencji do innych lokacji w pamięci (wskaźników) + + Gdy element logiki wymaga dostępu do sygnału z innego elementu, ta funkcja pobiera rzeczywisty adres danych poprzez jedną warstwę pośrednictwa ("pointer + indirection"). + +✻ Sautéed for 2m 43s