Kilku moich luźnych uwag do prezentowanych fragmentów kodu, i od razu zaznaczam, że nie będą one miały nic wspólnego z tym dlaczego akurat koledze nie działa coś tam ... chociaż ? .... dotyczyć będą dobrego stylu programowania w C na procki i zawsze takie uwagi piszę, gdy ktoś pierwszy raz swój kod wstawia na forum ...
Cytuj:
SPCR=(0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
SPSR=(0<<SPI2X);
zapisy oznaczone na czerwono kompletnie nie mają sensu a jeśli ktoś twierdzi, że są tylko tak dla porządku, to jest wręcz odwrotnie, wprowadzają TOTALNE zamieszanie i tragicznie trudno analizować kod. Na dodatek NAJCZĘŚCIEJ wpływają też na to że sami strzelamy później totalne babole i dłużej szukamy błędu bo dopiero na końcu gdzieś zauważymy, że nie zmieniliśmy durnego zera na jedynkę albo odwrotnie ... tak się nie robi (ale zakładam oczywiście, że kolega wie, że taki zapis (0<<x) bitowo nic nie robi tzn przede wszystkim NIE ZERUJE bitu - podpowiadam gdyby kolega nie wiedział)
Spikee napisał(a):
unsigned char SPI_MasterReceive(void)
gdy korzystamy z AVR GCC a kolega korzysta tu z AVR GCC to stosujemy typy przewidziane dla tej odmiany języka ... czyli jeśli chodzi o liczby to najmniejszy typ to uint8_t a nie żadne tam "unsigned char". Po pierwsze domyślnie kompilator jest ustawiony, że kompiluje char jako unsigned char, po drugie typ char rezerujemy sobie do miejsc gdzie korzystamy ze znaków alfanumerycznych. W ogóle stosowanie unsigned char - zamiast samego char nawet w przypadku gdy będziemy korzystali ze zmiennych a szczególnie funkcji wbudowanych w avr gcc przyniesie później tylko zdziwienie i kłopoty - dlaczego ? ano właśnie dla tego o czym mówiłem wcześniej - bo będą warningi o niezgodności typów ponieważ avr gcc w wielu takich sytuacjach będzie się spodziewał uint8_t albo przynajmniej char - a nie żadnego unsigned char który wywoła warning. Podsumowując - widać w tym miejscu wciąż duże przyzwyczajenie kolegi do C/C++ na PC.
to samo się tyczy
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
nie żadne unsigned int tylko : ....
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
czyli
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
No a tutaj:
Spikee napisał(a):
unsigned char SPI_Read_VDM(unsigned int Address, unsigned char BSB)
to unsigned char to już w ogóle gryzie po oczach, że aż łzy lecą jak przy krojeniu cebuli

Nie piszę tego broń Boże żeby się wyśmiewać czy dogryzać tylko żeby podpowiedzieć z uśmiechem o standardzie avr gcc i specyfice pisania kodu na procki i wcale nie tylko 8-bitowe
proszę spojrzeć jak to może przyjemnie wyglądać:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Dobra tyle tytułem wstępu - na temat szczegółów wizneta się nie wypowiem bo nigdy nie miałem do czynienia z tym modułem - ale tak na zasadzie domyślania się to ... hmmm co to za transmisja SPI jakaś jednokierunkowa? w tych funkcjach
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
toż transmisja SPI jest DWUKIERUNKOWA czyli gdy nadajemy to jednocześnie ODBIERAMY - oczywiście zależy to też od specyfiki układu docelowego ale może właśnie tutaj jeśli już chodzi o sprawy merytorycznych błędów kolega robi babole ? (ale jak mówię tylko domyślam się jeśli chodzi o pogaduszki akurat z wiznetem) Tak więc te funkcje może są babolem - powinna być jedna która ma i rezultat i argument

np
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.