Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
FF bascom zagwozdka...
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #1
FF bascom zagwozdka...
W pamięci eeprom mam zmienną typu string 15 znaków. Zanim zapiszę tam jakąkolwiek zmienną zawartość tych szesnastu bajtów to same FF.
chciałbym zrobić prostego "ifa"przy inicjalizacji procesora by sprawdzić czy jest tam już coś zapisane czy wartość jest pusta. Jednakże FF nie występuje w tej tablicy ASCII.

Wiem wiem lamerskie pytanie, ale mam dzisiaj zaćmienie umysłu.

...przede wszystkim nie zakłócać...
01-04-2012 22:34
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6FRE Offline
Leszek
****

Liczba postów: 725
Dołączył: 20-09-2009
Post: #2
RE: FF bascom zagwozdka...
Są tablice gdzie taki kod występuje ;-), na przykład tutaj
Nie musisz znać odpowiednika kodu FF w konkretnej tablicy aby sprawdzić czy komórka pamięci jest pusta. Po prostu odczytaj zawartość właściwej komórki pamięci i porównaj ją z wartością hexadecymalną FF lub dziesiętną 255.
Jak widać w powyższym linku, do wartości ascii FF można przypisać dowolny symbol, tu akurat jest to to litera "ÿ" w tablicy kodów ISO-8859-1. Kod ascii FF zatem istnieje i zapewne ma wiele przypisań w różnych kodach pochodnych. Dla przykładu w ISO-8859-2 kodowi FF odpowiada znak "˙"
L.J.
02-04-2012 14:16
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #3
RE: FF bascom zagwozdka...
W bascomie jeśli definiuje zmienna to chyba nie mogę określić który konkretnie obszar pamięci zajmuje wieć odpytywanie konkretnej komórki może być kłopotliwe. Mogę sie mylić nie zgłębiałem tematu.
Cytat:Dla przykładu w ISO-8859-2 kodowi FF odpowiada znak "˙"
To chyba dobry trop Wink

Dziękuję Leszku.

...przede wszystkim nie zakłócać...
02-04-2012 16:37
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ6OXK Offline
Paweł
****

Liczba postów: 317
Dołączył: 23-06-2010
Post: #4
RE: FF bascom zagwozdka...
Możesz Rysiu określi położenie zmiennej w pamięci.

Oczywiście trzeba być ostrożnym, i sprawdzić (bo nie wiem) czy kompilator mimo to nie przypisze sobie inne zmiennej w ten adres..

--= SWL SP6-01-396 =--
02-04-2012 18:44
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6FRE Offline
Leszek
****

Liczba postów: 725
Dołączył: 20-09-2009
Post: #5
RE: FF bascom zagwozdka...
O ile dobrze Cię rozumiem chodzi Ci o pamięć eram czyli pamięć nieulotną gdzie można przechowywać dane od włączenia do włączenia zasilania.
Obsługa zmiennych w takiej pamięci z punktu widzenia bascom-a polega na:
1. Deklaracji zmiennej jako eram np: Dim Xe as ERAM Byte
2. Odczycie zmiennej z pamięci ERAM np. X=Xe
3. Zapisie zmiennej do pamięci ERAM np. Xe=X
Na zmiennej typy eram można wykonywać obliczenia choć zwykle zaleca się stosować procedurę przeniesienia wartości zmiennej eram na zwykłą zmienną. Oczywiście zmienna X musi być zadeklarowana w programie jako zwykła zmienna typu Byte (w tym przykładzie np poleceniem dim X as Byte) i można na niej dokonywać "zwykłych" manipulacji np. porównać z wartością heksadecymalną FF lub dziesiętną 255.
Ponieważ ilość zapisów do takiej pamięci wynosi ok. 10^5 razy to nie należy używać pamięci ERAM (zmiennych w tej pamięci) w pętli etc.
Jeśli mówię rzeczy oczywiste to proszę o korektę lub dokładniejsze wyjaśnienie o jaki rodzaj pamięci chodzi? :-(
L.J.
(Ten post był ostatnio modyfikowany: 02-04-2012 21:44 przez SP6FRE.)
02-04-2012 21:43
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #6
RE: FF bascom zagwozdka...
Tak dokładnie o taka zmienną chodzi Leszku. Podczas uruchamiania procesora muszę sprawdzić czy jest to pierwsze uruchomienie czy któreś kolejne i mam już tam zapisane dane.
Oczywiście można stosować jakieś zabiegi w postaci zmiennej pomocniczej, ale to raczej mało eleganckie. Poza tym na zmienne pomocnicze binarne i tak muszę zarezerwować cały jeden bajt w pamięci. No i dopisać jakiś kawałek kodu do obsługi takich przełączników.
Ok w zasadzie nie chodziło mi o podanie rozwiązania na tacy a tylko o rozmowę gdzie klarują się pomysły. Pobawię się dzisiaj i zobaczymy co z tego wyjdzie.
Paweł jeśli się nie mylę to bascom jest dość niefrasobliwy w pisaniu po pamięci.

...przede wszystkim nie zakłócać...
03-04-2012 10:49
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ6ADE Offline
Radjoamator.
****

Liczba postów: 539
Dołączył: 05-04-2010
Post: #7
RE: FF bascom zagwozdka...
W dobrze skonstruowanych systemach - to co w pamięci nieulotnej - jest dodatkowo zabezpieczone sumą kontrolną umieszczoną w tejże pamięci np gdzieś pod jej koniec. Bardzo łatwo wtedy wychwycić fakt 1 włączenia i kontrolować później poprawność zapisanych danych.
A dane w eeprom lubią się "pozajączkować" Smile

tylko na FM UKF -> Just True Sound Hi-Fi Smile
03-04-2012 11:47
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6FRE Offline
Leszek
****

Liczba postów: 725
Dołączył: 20-09-2009
Post: #8
RE: FF bascom zagwozdka...
O ile znam bascom, to zmienne eram są jedynym rozwiązaniem Twoich potrzeb.
Kwestią elegancji jest oczywiście czy użyjesz wprost zmiennej eram do odczytu np.:
if Xe=255 then .....,
co wydaje się oczywiste, czy też będziesz używał również bezpośrednio zmiennej eram do zapisu np.:
if .... then Xe=255
nad czym bym się jednak zastanowił. Ja w tym celu używam zawsze "normalnych" zmiennych, którymi później manipuluję w programie a odczyt i zapis do eram wykonuję jako wyraźnie oddzielne polecenia i to z reguły na początku programu w celu wczytania zapamiętanych danych i na wyraźne polecenie np. w trakcie zapamiętywania ostatnio ustalonej wartości jakiegoś parametru dla zapisu do eram.
L.J.
03-04-2012 14:08
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ6OXK Offline
Paweł
****

Liczba postów: 317
Dołączył: 23-06-2010
Post: #9
RE: FF bascom zagwozdka...
Ewentualnie możesz użyć zapisu szesnastkowego (HEX) czyli zamiast 255 użyć &HFF.

--= SWL SP6-01-396 =--
(Ten post był ostatnio modyfikowany: 04-04-2012 14:40 przez SQ6OXK.)
04-04-2012 14:39
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP9DR Offline
Nowicjusz
*

Liczba postów: 39
Dołączył: 30-11-2011
Post: #10
RE: FF bascom zagwozdka...
Witam
Przy zapisie możesz podać dokładny adres gdzie chcesz zapisać dane w eeprom
np: Dim zmienna as Eram Byte At &H10
Zawsze możesz odczytać komórkę EEprom i porównać czy jest na przykład różna niż FF.


$sim
$prog &HFF , &H3F , &HD9 , &H00 ' generated. Take care that the chip supports all fuse bytes.
$regfile = "m8def.DAT" 'uc type
$crystal = 11059200 'crysal frequency
$baud = 9600
'Config Portb = Output
'*************************************************​******************************
'****************************Variables************​*****************************

Dim X As Byte
Dim Y As Eram Byte At &H10
Y = 100
X = 50
'y nie istniej w SRAM wiec nie możemy się do niej bez pośrednio odwoływać

Print X 'powinno byc 50

Readeeprom X , &H10
Print X ' powinno byc 100

If X <> 255 Then ' jeśli różne od 255
Print "rozne X= " ; X
End If
Wait 1
Y = 255
Readeeprom X , &H10
If X = 255 Then 'jelsi równe czyli zwykle FF
Print "pusta komorka X=" ; X
End If


End

Pozdrawiam
Paweł
(Ten post był ostatnio modyfikowany: 28-04-2012 11:31 przez SP9DR.)
28-04-2012 11:31
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości