ATNEL tech-forum
https://forum.atnel.pl/

MK_ATCAN_LIB pytanie
https://forum.atnel.pl/topic22786.html
Strona 1 z 1

Autor:  Jarecki [ 13 sty 2020, o 14:19 ]
Tytuł:  MK_ATCAN_LIB pytanie

Witam,

patrzę sobie w kod biblioteki jak w temacie i zastanawia się nad jedną rzeczą. W pliku źródłowym mk_atcan.c w linii 214 następuje przypisanie zmiennej:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zmienna status jest elementem jedno-bajtowej unii, czy w związku z tym, potrzeba jeszcze kasować zmienne w liniach 215 i 216?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Moim zdaniem linia 214 załatwia sprawę, jeżeli się mylę to proszę o naprowadzenie w czym rzecz, będę wdzięczny, pozdrawiam :)

Autor:  mirekk36 [ 13 sty 2020, o 14:29 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

Jarecki napisał(a):
Zmienna status jest elementem jedno-bajtowej unii,

czyli odpowiada TYLKO za pierwszych 8 bitów, a później masz jeszcze kolejne całe bajty rx_count i tx_count, no i to one są kasowane oddzielnie. Nie zawsze bowiem musi być potrzeba kasowania liczników CANTEC i CANREC

Autor:  Jarecki [ 13 sty 2020, o 14:41 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

mirekk36 napisał(a):
Jarecki napisał(a):
Zmienna status jest elementem jedno-bajtowej unii,

czyli odpowiada TYLKO za pierwszych 8 bitów, a później masz jeszcze kolejne całe bajty rx_count i tx_count, no i to one są kasowane oddzielnie. Nie zawsze bowiem musi być potrzeba kasowania liczników CANTEC i CANREC


Dzięki za wyjaśnienie :) pierwszy raz widzę taki zapis, zupełna nowość ale szczerze mówiąc nie bardzo to czuję

Autor:  mirekk36 [ 13 sty 2020, o 14:46 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

Jarecki napisał(a):
ale szczerze mówiąc nie bardzo to czuję

No spójrz - masz w unii:

1. strukturę, która ile bajtów zajmuje ? chyba widzisz, że równo 3 bajty.
a. osiem bitów na pola bitowe (jeden bajt)
b. jeden bajt na rx_count
c. jeden bajt na tx_count

tak czy nie ? ;) łącznie TRZY bajty

ale w tej samej unii masz zmienną status - zmienna 8-bitowa.

Czyli ta zmienna status zgodnie z zasadą działania UNII pokrywa tylko pierwsze 8 pól bitowych - dzięki czemu jednym ruchem można szybko wyzerować wszystkie pola bitowe

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zamiast pisać osiem oddzielnych linijek do kasowania każdego pola bitowego oddzielnie.

Teraz jaśniej ?

Autor:  Jarecki [ 13 sty 2020, o 14:51 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

Teraz jaśniej :)

Tego mi brakowało:

mirekk36 napisał(a):
Czyli ta zmienna status zgodnie z zasadą działania UNII pokrywa tylko pierwsze 8 pól bitowych


:)

Czyli, żeby jednym ruchem skasować wszystkie pola bitowe i tx_count trzeba by użyć zmiennej status uint16_t zamiast uint8_t :)

Dzięki za wyjaśnienie :)

Autor:  mirekk36 [ 13 sty 2020, o 14:54 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

Jarecki napisał(a):
uint16_t zamiast uint8_t

to by ci starczyło tylko na skasowanie DWÓCH bajtów panie kochany ... no jak inaczej ? A przecież widzisz i pisałem że mamy TRZY bajty w strukturze

to musiałbyś zrobić zmienną status typu uint32_t ;) czterobajtową - wtedy by skasowała wszystkie trzy bajty z tej unii a jeden bajt leżałby odłogiem (ten najstarszy zmiennej status) ;) Tyle że w wypadku tej biblioteki - jak wspominałem nie jest dobrym pomysłem kasowanie tych dwóch pozostałych bajtów, dlatego to zostało tak zorganizowane jak jest. No ale mam nadzieję, że dzięki temu już wiesz w czym rzecz i przyda ci się to później w pisaniu swoich kodów ;)

Autor:  Jarecki [ 14 sty 2020, o 07:28 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

mirekk36 napisał(a):
to by ci starczyło tylko na skasowanie DWÓCH bajtów panie kochany ... no jak inaczej ? A przecież widzisz i pisałem że mamy TRZY bajty w strukturze


dlatego napisałem

Jarecki napisał(a):
Czyli, żeby jednym ruchem skasować wszystkie pola bitowe i tx_count trzeba by użyć zmiennej status uint16_t zamiast uint8_t :)


czyli dwa bajty a chcąc skasować jeszcze rx_count wtedy trzeba by użyć trzech bajtów :)

------------------------ [ Dodano po: kilkunastu sekundach ]

mirekk36 napisał(a):
No ale mam nadzieję, że dzięki temu już wiesz w czym rzecz i przyda ci się to później w pisaniu swoich kodów ;)


Na pewno się przyda, dzięki Mirku :)

Autor:  tonygryps [ 14 sty 2020, o 12:16 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

A czy już zaczęły się wysyłki bibliotek z can?

Autor:  mirekk36 [ 14 sty 2020, o 12:45 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

już wyszły do wszystkich z PP teoretycznie. Jeszcze nie wyszły do ludzi którzy zakupili to w sklepie ale na dniach też wyjdą

Autor:  tonygryps [ 14 sty 2020, o 12:58 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

no to muszę się odezwać do Pani Anety w tej sprawie.
już nie aktualne, przejrzałem skrzynkę pocztową i była w spamie .przepraszam za kłopot.

Autor:  mirekk36 [ 14 sty 2020, o 12:59 ]
Tytuł:  Re: MK_ATCAN_LIB pytanie

tonygryps napisał(a):
no to muszę się odezwać do Pani Anety w tej sprawie.

Napisz do mnie na biuro@atnel.pl i podaj maila z jakiego logowałeś się na PP

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/