Witam. Chcê sobie zmieniaæ pamiêæ RAM komendami przez port szeregowy. Wszystko piêknie-³adnie za wyj±tkiem tego, ¿e nie wiem, pod jakim adresem w RAMie kompilator umie¶ci³ sobie moj± zmienn±. Za³ó¿my, ¿e jest to unsigned char lepper=0; // ;-) W jaki sposób na etapie kompilacji dobraæ siê do adresu leppera? Czytam, googlam, a rozwi±zania nie widzê...
Adresy zmiennych w AVR-GCC
Jun 21, 2006
28 Replies
U¿ytkownik "Patryk Sielski" snipped-for-privacy@elka-usun.pw.edu.pl> napisa³ w wiadomo¶ci news:457fe$44993e2f$57ceab2d$ snipped-for-privacy@news.chello.pl...
nie wiem czy o to Ci chodzi
& lepperAndy snipped-for-privacy@ceti.pl pisze:
Nie o to chodzi. Zadeklarowa³em sobie zmienn± lepper.
Mam funkcjê, która wysy³a na port szeregowy zawarto¶æ dowolnej komórki z pamiêci RAM. Adres podajê z urz±dzenia pod³±czonego przez port szeregowy. W jaki sposób mam siê dowiedzieæ w której komórce pamiêci jest lepper?
Użytkownik Andy napisał:
unsigned char *leper = 0x1234 //Twoj adres w ramie jaki sobie wymarzyłeś
A dostep
*leper = 0x00;itd. Adam
Użytkownik Patryk Sielski napisał:
Z raportu linkera ?
Adam
Górski Adam <gorskia@.................wp....................pl..................> pisze:
Ale ja nie chcê przyznawaæ adresów, chcê siê dowiedzieæ jaki adres kompilator przyzna³?
Patryk Sielski napisał(a):
plik .map
jesli robisz to pod unixem/linuxem to najszybciej:
grep -H lepper *.map
Patryk Sielski napisał(a):
aha - jeszcze zapomnialem dodac, ze od tak pozyskanego adresu trzeba odjac pewna stala liczbe, u mnie jest to 0x800000. Pewno bardziej doswiadczeni w C opisza to bardziej naukowymi slowami :) A i ja chetnie sie dowiem czym jest to uzasadnione. Relokowanie adresu, czy cos takiego - poprawcie mnie jesli bredze ;o)
A nie lepiej zrobic to (tak jak sugerujesz przez port szeregowy) tyle, ze komenda o ustalonym numerze? Wywolujesz przez port funkcje zmiany wartosci tej zmiennej? W przesylanym przez port rekordzie jest i komenda i nowa wartosc tej zmiennej a funkcja sama podmienia wartosc na przesylana...
Jacek M.
Jacek M. snipped-for-privacy@poczta.onet.pl> pisze:
To mi da 300 komend... ;-)
DJ snipped-for-privacy@polbox.com pisze:
[souti@souti fotocela]$ grep -H lepper *map [souti@souti fotocela]$No w³a¶nie tam tego nie ma :-(
U¿ytkownik "Patryk Sielski" snipped-for-privacy@elka-usun.pw.edu.pl> napisa³ w wiadomo¶ci news:ba645$44994ea7$57ceab2d$ snipped-for-privacy@news.chello.pl...
Moze to nie jest zmiennna globalna tylko lokalna w funkcji a taka zmienna jest zazwyczaj na stosie i nie ma stalego adresu.
To zbuduj strukturê w której bedziesz umieszcza³ adresy tych zmiennych. Sciagniesz ja jednokrotnie i juz bedziesz mia³ ich adresy. Zmian dokonasz jedna komenda. Jacek M.
Zakladam, ze autor watku mysli o zmiennych globalnych Jacekl M.
Patryk Sielski napisał(a):
OK, to zrob metoda z wysylaniem adresu, jednak tak czy inaczej powinienes zrobic ramke i CRC dodac, bo w przypadku bledow transmisji moze Ci sie wywalic caly program (kiedy zmodyfikuje jakas inna przypadkowa lokalizacje RAM.
Patryk Sielski napisał(a):
Nie wiem jak tworzysz pliki *.map, ale zakładając, że plikiem wynikowym linkera jest cośtam.elf, spróbuj:
avr-nm cośtam.elf | grep lepper
w.
Jacek M. snipped-for-privacy@poczta.onet.pl> pisze:
To prowizorka, ja szukam jakiego¶ eleganckiego rozwi±zania.
Wojtek Kaniewski snipped-for-privacy@spam.spam.spam> pisze:
Co¶ tam pokazuje, muszê tylko obczaiæ co to dok³adnie jest .data i .bss Dziêki - ju¿ jestem na tropie.
Czemu prowizorka? Przynajmniej przy ponownej kompilacji nie bedziesz mial problemow z powodu zmiany adresu tych zmiennych. Jacek M.
Zrob unie z tablica i bedziesz mogl numerami zmiennych sie poslugiwac.
J.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required