| Author |
Message
|
murphy33 Poziom 2

Joined: 09 Dec 2010 Posts: 3
|
#1
09 Dec 2010 16:17 ARM: pamięć i spi kilka pytań. |
|
|
|
Witam
Od jakiegoś czasu bawię się programowaniem ARM7 (programuje w C w WINARM) i zastanawiają mnie różne dziwne anomalie…
Moje pierwsze pytanie odnosi się do przydziału pamięci dla tablic deklarowanych jako static i normalnie – z tego co wiem static mówi nam tylko o tym czy dana tablica będzie widoczna w innych plikach – jednak nie tylko…Może przykład:
| Code: |
uint8_t tab[1000];
…
main()
{…
tab[0]=0;
tab[1]=1;
uint16_t aaa=(*((int16_t*) &tab[0]));
...
}
|
I tak gdy tab jest zadeklarowane normalnie – czasem w aaa jest jaką dziwna liczna nawet większa niż zakres uint16, gdy natomiast zadeklaruje tab jako static wszystko jest ok, czasem w innych przypadkach jest odwrotnie – usunięcie słowa static pomaga…
Dlatego moje pytanie – jak się powinno deklarować tablice wewnątrz i na zewnątrz funkcji i skąd te anomalie?
Natomiast moje drugi pytanie odnosi się do interfejsu SPI – a raczej jego podatności na zakłócenia. Mam podłączona na kablach ok. 8cm kartę SD oraz interfejs Ethernet – co się okazuje oba układy są bardzo podatne na zakłócenia – wystarczy że w pobliżu włączę zwykłą lampkę(halogen 24V) a już układ się zawiesza. Zmieniłem nawet zasilanie układu na bateryjne – dalej to samo. Stąd pytanie czy taka już specyfika SPI (i wszystko powinno być montowane na tej samej płytce bez kabli) czy jednak z moim układem jest coś nie tak?
[color=red]Proszę poprawić temat oraz dodać znaczniki code.
Robak[/code]
|
|
| Back to top |
|
 |
Google

|
#
09 Dec 2010 16:17 |
|
|
|
|
|
| Back to top |
|
 |
Freddie Chopin Poziom 25

Joined: 12 Dec 2005 Posts: 7300 Location: Zawiercie
|
#2
09 Dec 2010 16:26 Re: ARM: pamięć i spi – kilka pytań. |
|
|
|
Tablica uint8_t może nie być wyrównana (jej pierwszy adres może być równy np 1 albo 3, a ARM7 nie obsługuje niewyrównanego dostępu. Jeśli odczytasz uint16_t z niewyrównanego (niepodzielnego przez 2) adresu rezultat jest nieprzewidywalny, włącznie z zawieszeniem układu. Sam dodatkowo wprowadzasz zamieszanie, bo adres rzutujesz na wskaźnik ze znakiem, a zmienna jest bez znaku. Dopisywanie lub kasowanie "static" jedynie przypadkowo powoduje przestawienie tablicy przez zmianę sekcji w której ona się znajduje tak że adresy raz są wyrównane a raz nie. Przy innej konfiguracji zmiennych statycznych już by np nic nie dało.
4\/3!!
|
|
| Back to top |
|
 |
Google

|
#
09 Dec 2010 16:26 |
|
|
|
|
|
| Back to top |
|
 |
murphy33 Poziom 2

Joined: 09 Dec 2010 Posts: 3
|
#3
09 Dec 2010 16:42 Re: ARM: pamięć i spi – kilka pytań. |
|
|
|
Dzięki za odpowiesz Freddie, ale czy w takim razie konstrukcja typu: uint16_t aaa=(*((int16_t*) &tab[0])); jest całkiem niedozwolona w arm7?
|
|
| Back to top |
|
 |
Google

|
#
09 Dec 2010 16:42 |
|
|
|
|
|
| Back to top |
|
 |
Freddie Chopin Poziom 25

Joined: 12 Dec 2005 Posts: 7300 Location: Zawiercie
|
#4
09 Dec 2010 16:51 Re: ARM: pamięć i spi – kilka pytań. |
|
|
|
Taka konstrukcja jest niedozwolona na każdym układzie i myślę, że kompilator poinformował Cię stosownym warningiem o tym fakcie. Na 8-bitowych układach działałoby dlatego, że tak czy siak byłyby potrzebne dwa osobne dostępy. Na niektórych układach - obsługujących niewyrównany dostęp do pamięci - również zadziała. Zasadniczo jednak to co pokazałeś jest błędne z samego założenia i wynik jest nieprzewidywalny.
4\/3!!
|
|
| Back to top |
|
 |
murphy33 Poziom 2

Joined: 09 Dec 2010 Posts: 3
|
#5
09 Dec 2010 17:02 Re: ARM: pamięć i spi – kilka pytań. |
|
|
|
OK trochę mi się wyjaśniło, dzięki Freddie. Czekam jeszcze na informacje jak to jest z tym SPI
|
|
| Back to top |
|
 |
Google

|
#
09 Dec 2010 17:02 |
|
|
|
|
|
| Back to top |
|
 |
_Robak_ Poziom 22

Joined: 16 Apr 2006 Posts: 2197 Location: Bytom
|
#6
09 Dec 2010 19:10 Re: ARM: pamięć i spi – kilka pytań. |
|
|
|
SPI jest interfejsem który stosuje się w obrębie jednej płytki, bez kabli itp. Także spróbuj zmniejszyć prędkość może pomoże, mi karta SD działała na kilkunastocentymetrowych kablach ale przy dość wolnej komunikacji. Ale rozwiązanie to nie jest zgodne ze sztuką:)
|
|
| Back to top |
|
 |