Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Jak zaprogramować uC ?

Guru
-
-
Posty:250
Rejestracja:30 cze 2003, o 13:26
Lokalizacja:Kraków
Jak zaprogramować uC ?

Postautor: Guru » 6 mar 2006, o 07:12

Więc jest taki problem:
Mam dwie pamięci programu nazwijmy ją dla rozróżnienia pamięć górna i pamięć dolna.
W pamięci górnej będą gotowe procedury taki sobie biosik natomiast dolna będzie ładowana przez RS'a.
I teraz pytanie:
Jak zrobić to w C aby nie trzeba było za każdym razem kompilować całego programu dla górnej i dolnej pamięci, a tylko sobie wywołwać z poziomu pamięci dolnej procedurki które zawarte są w górnej pamięci.
Dodam że kompiluję w SDCC i coś mi się nie udaje zrobić tablicy wskaźników do funkcji z parametrami. Może ktoś ma jakiś pomysł?

A dziękuję już sobie poradziłem kwestia semantyki :)

Piotr
Moderator
Moderator
Posty:468
Rejestracja:14 lut 2003, o 13:53
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: Piotr » 6 mar 2006, o 11:36

Zakladam, ze korzystasz z pamieci Flash. One "z definicji" sa podzielone na sektory, ktore sa programowane niezaleznie. Czyli musisz zrobic tak, ze w jednym z sektorow lokujesz BIOS, w pozostalych wymienany program. Nie wymaga to zadnych sztuczek, poza umiejscowieniem programou wymiennanego pod adresem z odpowiednim offsetem.
Jezeli zalezy Ci na bezpieczenstwie BIOSu, to skorzystaj z pamieci Flash z CFI (opis w EP1/2006), w ktorych przewidziane specjalne sektory "boot" z osobnymi zabezpieczeniami przed modyfikacja.
Pzdr
PZb

Guru
-
-
Posty:250
Rejestracja:30 cze 2003, o 13:26
Lokalizacja:Kraków

Postautor: Guru » 6 mar 2006, o 12:41

Tak, tak jedna z tych pamięci (dolna) to Flash a druga to zwykły EPROM. Obie są dostępne w jednej przestrzeni adresowej. A jako że 8051 nie ma przerwania programowego pod którym można by umieścić procedury umieszczone w Biosie tak więc będę zmuszony stworzyć tablicę funkcji dostępnych w biosie systemu (pamięć górna) i umożliwić korzystanie z niej dla programisty z poziomu pamięci dolnej bez zagłebiania go w szczegóły implementacji poszczególnych funkcji w biosie. Tak więc programista piszący program będzie mógł korzystać z funkcji dostępnych w biosie i jego program będzie ładowany poprzez RS do flash'a.
I właśnie tutaj jest a raczej był pewien problem ponieważ aby "dolny" program miał dostęp do funkcji z górnej pamięci musi wiedzić gdzie taka procedurka siedzi w tejże pamięci. Problem ten został rozwiązany przez stworzenie w pamięci bios pod znanym adresem tablicy wskaźników do funkcji znajdujących się w biosie. Tablica ta jest uaktualniana podczas pisania biosu a właściwie jego kompilacji. Następnie do programu ładowanego do dolnej pamięci dołączam plik nagłówkowy zawierający adres tej tablicy oraz rzutuję na odpowiednie definicje funkcji adresy z tejże tablicy i już mogę się posługiwać odwołaniami do funkcji z biosu.
Mam nadzieję że jasno to wyraziłem :) :D :)

Piotr
Moderator
Moderator
Posty:468
Rejestracja:14 lut 2003, o 13:53
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: Piotr » 6 mar 2006, o 13:27

Rozumiem co robisz i - mam nadzieje - takze w jaki sposob ;-). Polecam Ci sprobowanie zastapienia kmbinowanej pamieci Flash/EEPROM jednym ukladem, stworzonym specjalnie do takich aplikacji, np. ST29MW320DB/DT (z bootloaderem u dolu/u gory). Sa dostepne takze mniejsze i wieksze takie pamieci, dostepne sa takze warianty o roznym podziale na sektory. Takie pamieci sa bardzo wygodne w stosowaniu, a dzieki CFI latwo zapewnic sobie (auto)wymiennosc ich typow.
Jedna sztuke na probe moge Ci sprezentowac (adres poprosze na priva).
Pzdr
PZb

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 86 gości