Język C - Umieszczanie tablic pod wyznaczonym adresem

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Język C - Umieszczanie tablic pod wyznaczonym adresem

Post autor: Aro » 29 wrz 2007, 15:13

Witam, Nigdzie nie mogę znaleźc info czy jest taka możliwośc i jak to zrobic. Muszę jakoś umieścic tablicę zaczynającą się pod adresem 0x100, ewentualnie 0x200 lub 0x300. Generalnie chodzi o to, żeby potem jak najszybciej ją odczytac. Ma ona 256bajtów więc takie rozmieszczenie pozwoli operowac tylko na jednym rejsetrze Z (R30). Mowa o mikrokontrolerze Atmega8. Czy da się ustawiac z poziomu języka C adresy zmienneych i tablic w pamięci SRAM?

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 30 wrz 2007, 12:49

W języku C nie ma bezpośrednio takiej możliwości aby umieścić tablicę pod podanym adresem. Sam C abstrahuje od warstwy sprzętowej. Każdy kompilator taką możliwość realizuje w inny sposób. Jaki to kompilator?

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 30 wrz 2007, 17:04

WinAVR. Na innym forum dostałem odpowiedzi, że pamięc trzeba na sekcje podzielic i tą tablicę tam umiescic, a stos przesunąc. Nie wiem czy to możliwe w AVRach, ale zawsze mozna by podzielic SRAM na 3 sekcje. Niestety jak to się robi, nie mam pojęcia.

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 30 wrz 2007, 17:56

W części 16 kursu zawarłem dokładne informacje na ten temat. W tym przypadku chodziło o umieszczenie zmiennej w pamięci zewnętrznej, jednak odbywa się to właśnie przez stworzenie sekcji zaczynającej się do wybranego adresu. Omawiam tam także przesuwanie stosu. O samych sekcjach można znaleźć też informacje w części 12 - jednak można i bez tego zrozumieć materiał części 16.

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 01 paź 2007, 16:49

Wielkie dzięki!
Zdobyłem ten numer, i tak przypadkiem zobaczyłem, że pamięc atmegi162 zaczyna sie od 0x100H, myślę że kompilator umieści taką tablice pod 0x400H. To rozwiązało by cały problem. W atmedze8 umieszczał pod 0x360H i zamiast robic dodatkowe sekcję postanowiłem trochę nieelegancko dołożyc jeszcze jendą tablicę, tak że adres właściwej znalazł się tam gdzie trzeba. Wszystko działa jak trzeba (przynajmniej narazie:).

ODPOWIEDZ