Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[18F] CCS C - Mnożenie i dzielenie przez liczbę z eepromu

Rinho 08 Sty 2013 02:07 1641 4
  • #1 08 Sty 2013 02:07
    Rinho
    Poziom 19  

    Witam, mam pewien problem z wykonaniem działania mnożenie a następnie dzielenia przez liczbę dziesiętną odczytaną z eepromu.

    Sam odczyt z eepromu jest poprawny, wyświetlałem dla testu odczytaną wartość na wyświetlaczu i się zgadza z tym co zapisałem przed ponownym uruchomieniem uC.
    Jak w programie zdefiniuje stałą (np 0.123) i przez nią podzielę jest ok, działanie wykonuje się i mam poprawny wynik. Jednak jeśli odczytam tą samą wartość z eepromu to zawsze przy wykonaniu działania mam 0.

    Kompilator CCS C w wersji 4.136 i PIC18F4550.

    Poniżej fragmenty kody, cały jest dość obszerny i nie ma sensu tego wszystkiego wklejać.

    Float'a zapisuje do pamięci:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Odczytuje:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    po zmianie na

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Brak zmian.

    Zapewne powodem jest jakiś szczegół o którym jeszcze nie wiem, dopiero się uczę :) Z góry dziękuje za pomoc, i mam nadzieje że przejrzyście napisałem mimo godziny... 2 w nocy.

    Pozdrawiam Krzysiek

    0 4
  • #3 08 Sty 2013 10:00
    Rinho
    Poziom 19  

    Tego help'a znam, dość często go przeglądam, jednak wielu funkcji nie ma w nim opisanych. Funkcja write_float_eeprom była opisana (w sumie to była tylko zmianka o tym) w którymś z przykładów na stronie, stąd też wiedziałem że znajduje się w pliku internal_eeprom.c. Zawartość pliku poniżej.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    To jaki problem byłby z nią skoro, mogę bez problemu odczytywać wartość?

    0
  • #4 08 Sty 2013 11:22
    94075
    Użytkownik usunął konto  
  • #5 09 Sty 2013 01:53
    Rinho
    Poziom 19  

    Problem już rozwiązany, wielkie dzięki za zainteresowanie. Jednak jest coś wspólnego. Trochę im zajęło ale support CCS'a pomógł.

    Otóż przy użyciu funkcji

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Należy dla jeden zmiennej float zarezerwować 4 miejsca (address, jest to opisane w internal_eeprom.c). Jednak czasem jest z tym problem i i należy robić odstępy co 5.

    Faktycznie po tej zmianie wszystko śmiga jak powinno.

    0