zamiana typu uint_16t na const void*

0

Hej,
zacząłem ostatnio programować w C mikrokontrolery i natknąłem na problem chyba łatwy do rozwiązania kto siedzi w C. Ja z C znam tylko podstawy i nie mogę przebrnąć prze ten kawałek kodu. Byłbym bardzo wdzięczny gdyby mi ktoś pomógł. Mój problem wygląda następująco:

Problem wygląda tak że zczytuję dane z przetwornika ADC i dane zczytywane są w momencie przerwania od timera co 5s.
Typ danych zczytywanych z ADC to w programie main zmienna globalna:

 
uint16_t ADC1Val; 

Teraz kiedy funkcja wchodzi do przerwania to chciałbym zapisać wartość tej zmiennej na kartę SD do tego służy funkcja f_write

Definicja funkcji f_write:

 
Kod:

FRESULT f_write (FIL*, const void*, WORD, WORD*);    /* Write data to a file */ 

Funkcja f_write oczekuje na wartość conts void*

np. mogę wpisać takie coś i taki kod działa, wpisuje do pliku ciąg znaków "zawartosc pliku":

fresult = f_write(&plik, "zawartość pliku", 15, &zapisanych_bajtow)

i muszę teraz zamiast "zawartość pliku" jakoś wartość ADC1Val wstawić, próbowałem dla przykładu kombinować z charem tzn zrobiłem takie coś:

char c[2]; 
c[0]='a'; 
c[1]='b'; 
c[2]='c'; 

fresult = f_write(&plik, c, 3, &zapisanych_bajtow)

ale takie coś mimo że się kompiluje to przy debugowaniu program wchodzi w nieskończoną pętlę HardFault

ktoś może wie jak rozwiązać ten problem?

w skrócie chcę zamienić typ uint16_t na typ const void*

z góry wielkie dzięki za pomoc

0
fresult = f_write(&plik, &ADC1Val, sizeof(uint16_t), &zapisanych_bajtow)
0
mychal.szczygiel napisał(a)
fresult = f_write(&plik, &ADC1Val, sizeof(uint16_t), &zapisanych_bajtow)

no niestety ten sposób nie działa tzn debuguje się ale do pliku zapisują się jakieś szlaczki co nie wygląda jak liczby z przetwornika, których spodziewana postać to liczba ok. 1700

może to mieć związek z 3 argumentem czyli ilością zapisanych bitów?
funkcja oczekuje zmiennej WORD a zmienna WORD jest zdefiniowana jako unsigned short jeżeli wpiszemy sizeof(uint16_t) to wypluje nam chyba inny typ?

dziękuje za pomoc mychal.szczygiel!

0

Co to znaczy, że zapisują się jakieś szlaczki? zapisujesz liczbę 16 bitową na kartę i chcesz tę wartość odczytać jako tekst czy jak? Jeżeli tak to musisz użyć funkcji itoa przed zapisem, lub atoi po odczycie z karty.

0
mychal.szczygiel napisał(a)

Co to znaczy, że zapisują się jakieś szlaczki? zapisujesz liczbę 16 bitową na kartę i chcesz tę wartość odczytać jako tekst czy jak? Jeżeli tak to musisz użyć funkcji itoa przed zapisem, lub atoi po odczycie z karty.

szlaczki w sensie że jak przekładam kartę SD do komputera i otwieram plik tekstowy z poziomu windowsa to nie widzę liczb tylko jakieś dziwne symbole, co do typu w jakim to bym chciał mieć to chyba najlepiej jakby to były zapisane jako typ int chodź nie wiem czy ma to jakiekolwiek znaczenie w późniejszej obróbce (bo póżniej te dane które zostaną zapisane będę wykorzystywał ale już nie z poziomu mikrokontrolera lecz z poziomu windowsa i jakiegoś programu typu exel czy matlab). Jeżeli chodzi o funkcję itoa i atoi to niestety biblioteki które posiadam nie obsługują tych funkcji, da się to jakoś zrobić poprzez funkcję sprintf?

z góry dziękuję za poświęcenie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1