FAQ | Points | Add... | Recent posts | Search | Register | Log in


[BASCOM] Zmienne w EEPROM typu Overlay


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [BASCOM] Zmienne w EEPROM typu Overlay
Author
Message
xury
Poziom 22
Poziom 22


Joined: 08 Mar 2004
Posts: 1640
Location: Radom

Post#1 Post from the author of the topic 19 Nov 2009 21:29   

[BASCOM] Zmienne w EEPROM typu Overlay


Czy można używać zmiennych typu Overlay w EEPROM ?

Chcę zrobić mniej więcej coś takiego:

Code:

$eeprom
Adres0:
Data 0
Smsc:
Data "48790998250"
$data

a potem na ten obszar nałożyć zmienną
Code:
Dim Smsc As Eram String * 11 at  $1 Overlay 


I odczytywać w programie jak zmienną zamiast używania ReadEeeprom ?
Teoretycznie powinno to działać. Po prostu nie chcę używać ReadEeprom bo mi komplikuje dalszy kod, a nie chcę też wstawiać zmiennych bezpośrednio w EEPROM , bo wtedy po każdym resecie uC będzie zapisywał tę pamięć.
Potrzebne mi to jest do tego, bo będę budował zmienną PDU z kilku innych zmiennych zapisanych w EEPROM.
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 19 Nov 2009 21:29   





Back to top
   
mirekk36
Poziom 25
Poziom 25


Joined: 17 Jun 2006
Posts: 8153
Location: Szczecin

Post#2 19 Nov 2009 22:30   

Re: [BASCOM] Zmienne w EEPROM typu Overlay


xury wrote:

.... a nie chcę też wstawiać zmiennych bezpośrednio w EEPROM , bo wtedy po każdym resecie uC będzie zapisywał tę pamięć.


uC sam nic nie będzie zapisywał w EEPROM'ie o ile sam mu tego nie nakażesz. Może coś źle zrozumiałeś czytając helpa czy jak?

Bardzo łatwo jest zdefiniować zmienne właśnie z dodatkiem "As Eram" i po zawodach.

To czy do zmiennej będzie coś zapisywane czy nie zależy tylko od ciebie.

Ja zwykle robię sobie zmienną w pamięci EEPROM i w RAM. Przy starcie procka odczytuję zmienną z EEPROM i wczytuję do RAM - później się wygodnie posługuję tylko tą zmienną w RAM. Jednak gdy zachodzi potrzeba zmiany zmiennej w RAM - to jednocześnie zmieniam ją w EEPROM - aby po ponownym restarcie zawsze była aktualna wartość, np:

Code:
Dim eeprom_zmienna As Eram Byte
Dim zmienna As Byte


Gdzieś przed pętlą główną - o ile to jest konieczne:

Code:
zmienna = eeprom_zmienna


i dalej jak pisałem wyżej działam sobie na zmiennej w RAM'ie, A gdy muszę zmienić jej wartość to przy okazji robię:

Code:
eeprom_zmienna = zmienna


Tzn tak robiłem gdy pisałem w Bascomie ;)
Back to top
   
xury
Poziom 22
Poziom 22


Joined: 08 Mar 2004
Posts: 1640
Location: Radom

Post#3 Post from the author of the topic 19 Nov 2009 23:07   

Re: [BASCOM] Zmienne w EEPROM typu Overlay


Jak zwykle można na Ciebie liczyć mirekk36
Zmienne w EEPROM są mi potrzebne z dwóch powodów: aby zaoszczędzić RAM i aby w późniejszym czasie napisać sobie program dla Windows, który dałby mi możliwość edycji samego EEPROM.
W eeprom chcę zapisać numery telefonów i fragmenty ciągu SMS w PDU. Następnie w zależności od sytuacji chcę składać z tych zmiennych jedną zmienną w RAM - czyli cały ciąg PDU do wysłania do telefonu.

Jednak jest problem:
Poniższa konstrukcja nie chce działać dla zmiennych tekstowych w EEPROM :
PDU = segment1 + segment2

PDU to zmienna tekstowa w RAM.
Dla zwykłych zmiennych w ram działa wyśmienicie, ale nie mam już wolnej pamięci by trzymać te wszystkie zmienne w RAMie. (Atmega8)

Nie wiem czy to ograniczenia BASCOM czy specyfiki odczytu z EEPROM.
Chyba czas na przejście na C.
dodane
mirekk36 wrote:
xury wrote:

.... a nie chcę też wstawiać zmiennych bezpośrednio w EEPROM , bo wtedy po każdym resecie uC będzie zapisywał tę pamięć.


uC sam nic nie będzie zapisywał w EEPROM'ie o ile sam mu tego nie nakażesz. Może coś źle zrozumiałeś czytając helpa czy jak?

Bardzo łatwo jest zdefiniować zmienne właśnie z dodatkiem "As Eram" i po zawodach.

To czy do zmiennej będzie coś zapisywane czy nie zależy tylko od ciebie.


No właśnie jeśli w programie przed pętlą główną nadam wartości zmiennym w eeprom
np.
zm_eeprom = "jakis tekst"
to po resecie program wystartuje od nowa i zapisze z powrotem wartości początkowe w programie do eeprom ?
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 19 Nov 2009 23:07   





Back to top
   
arnoldziq
Poziom 22
Poziom 22


Joined: 14 Apr 2006
Posts: 2433
Location: High Wycombe

Post#4 20 Nov 2009 10:58helpful post - solution   

Re: [BASCOM] Zmienne w EEPROM typu Overlay


xury wrote:
No właśnie jeśli w programie przed pętlą główną nadam wartości zmiennym w eeprom
np.
zm_eeprom = "jakis tekst"
to po resecie program wystartuje od nowa i zapisze z powrotem wartości początkowe w programie do eeprom ?


W takim przypadku, po każdym resecie zmienna będzie nadpisywać nową ( taką samą ) zawartością.
Jeżeli przewidujesz 1 reset co kilka dni, to nie problem, ale częstsze resety mogą spowodować wyczerpanie cyklów zapisu EEPROM.

Można łatwo to obejść : przed każdym zapisem zm_eeprom, sprawdź, czy zawartość już się tam nie znajduje i czy nie jest to ta sama, oczekiwana zawartość.
Back to top
   
mirekk36
Poziom 25
Poziom 25


Joined: 17 Jun 2006
Posts: 8153
Location: Szczecin

Post#5 21 Nov 2009 00:16helpful post - solution   

Re: [BASCOM] Zmienne w EEPROM typu Overlay


xury wrote:

No właśnie jeśli w programie przed pętlą główną nadam wartości zmiennym w eeprom
np.
zm_eeprom = "jakis tekst"
to po resecie program wystartuje od nowa i zapisze z powrotem wartości początkowe w programie do eeprom ?


posłuchaj - jeśli potrzebujesz zapisać domyślnie

zm_eeprom = "jakis tekst"

to robisz to tylko wtedy jeśli wszystkie komórki tej zmiennej mają wartość 0xFF przy starcie - co oznacza, że procek był pierwszy raz zaprogramowany i EEPROM jest czysty albo gdy EEPROM został skasowany w całości.

Dzięki temu ta twoja opercja powyżej dokona się tylko raz! i po zawodach

chyba to proste łatwe i szybkie rozwiązanie ;) ?

Jeśli chodzi o twoje powyższe problemy z brakiem ilości pamięci RAM na zmienne tekstowe - no to już tu ci nie pomogę ;) bo, albo:

1. coś za dużo tych zmiennych tworzysz i to normalne że w tak małym procku szybko kończy się RAM - więc trzeba by było dać większy procek z dużo większą ilością RAM jak dla ciebie

2. albo coś bardzo źle przemyślałeś działanie całości , że aż tyle zmiennych tekstowych tworzysz. O ile jeszcze zrozumiałbym potrzebę jakiegoś większego bufora na nadchodzący SMS - to po jakiego grzybka ty chcesz to zapisywać w pamięci EEPROM - toż to czysta strata zasobów i cieżko mi wymyśleć na jaką okazję zapisywać w EEPROMie nadlatujące fragmenty SMSów - może musisz od nowa przemyśleć działanie całego programu i wtedy okaże się, że spokojnie wystarczy ci ATmega8

pozdr
Back to top
   
Google

Google Adsense


Post# 21 Nov 2009 00:16helpful post - solution   





Back to top
   
xury
Poziom 22
Poziom 22


Joined: 08 Mar 2004
Posts: 1640
Location: Radom

Post#6 Post from the author of the topic 21 Nov 2009 18:09   

Re: [BASCOM] Zmienne w EEPROM typu Overlay


Ja nie chcę zapisywać w eeprom nadlatujących SMSów tylko fragmenty ramki PDU. które będę wysyłał. A chcę je tam zapisać by mieć możliwość szybkiej zmiany, kiedy sobie napiszę program do zmiany zawartości eeprom. Staram się napisać program tak elastycznie, by zmiana danych w eeprom, była przez program w uC "do przełknięcia, Czyli jeśli nawet zmienię długość danej w eeprom program odczyta tą daną poprawnie.
W czasie normalnego działania programu nic nie będzie zapisywane do eeprom, tylko odczyt. Czyli te dane w eeprom pracują głownie jako stałe.
Po cżęści (na razie tylko w moim umyśle) rozwiązałem ten problem.
Nie zastosuję zmiennych tylko linie data w eeprom, a program podczas inicjalizacji sprawdzi długośc ciągów w eeprom i zapisze je do zmiennych w RAM. Następnie kiedy zajdzie potrzeba odczytu zawartości i wysłania całej ramki PDU to będę próbował wysłać je przez UART bajt po bajcie.
Program będzie odczytywał, fragmenty PDU i składał wszystko w zmiennej w RAM. Zastosuję funkcję z przekazywaniem parametrów do niej.
Po krótce opiszę jak to będzie działać:
Po wywołaniu alarmu z centrali alarmowej, ATmega8 (oczywiście przez podłączony telefon)będzie dzwonić na numer zapisany w eeprom, a następnie wysyłać SMS na ten numer. Opcjonalnie też wyśle SMS na inny numer.
Ponadto będzie odbierać SMSy i na podstawie ich treści sterować centralą alarmową i opcjonalnie innymi urządzeniami. Po odebraniu rozkazu SMS będzie wysyłać SMS zwrotny z potwierdzeniem wykonania.
Numery telefonów i rozkazy będą mogły być zmieniane, bez konieczności zmiany w kodzie uC. Dlatego będą umieszczone w eeprom, gdzie zewnętrzny program będzie miał możliwość ich zmiany bez ingerowania w kod uC. Kod uC ma się dostosować do zmiany długości SMS i zmiany numerów telefonów, a nie odwrotnie. Odbiór i wysyłanie tylko w formacie PDU, ale już napisałem (raczej pożyczyłem kod do konwersji PDU >TXT i TXT>PDU) sobie parsowanie danych przychodzących i wychodzących.

Twoje rady jak zwykle skłaniają do myślenia kolego mirekk36.
Zostałem jednak przy Readeeprom, ale podpowiedzi się przydały i tak. Ja jak zwykle łapię po paru dniach :)
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [BASCOM] Zmienne w EEPROM typu Overlay
Page 1 of 1
Similar topics
BASCOM AVR DEMO i zmienne typu DOUBLE (7)
[bascom] Problem z opcją OVERLAY i LCD (3)
Zmienne typu STATIC (1)
atmega+eeprom+bascom+zapis do eeprom z pliku txt (4)
[AVR][C] Zmienne w eeprom - odczytywać non stop? (6)
Bascom i zmienne Eram: error 42 (2)
Bascom, ATtiny12, Iram i zmienne Word (2)
Bascom jak połączyć 2 zmienne w 1 z przecinkiem ? (5)
Bascom, PCF8583 i godzina jako 4 zmienne (4)
Bascom i zmienne string. Edytowanie określonych znaków. (1)

Page generation time: 0.092 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed