logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

Rinho 08 Sty 2013 02:07 1887 4
REKLAMA
  • #1 11758294
    Rinho
    Poziom 19  
    Posty: 348
    Pomógł: 18
    Ocena: 52
    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 / C++
    Zaloguj się, aby zobaczyć kod


    Odczytuje:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    po zmianie na

    Kod: C / 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
  • REKLAMA
  • #2 11758427
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 11758704
    Rinho
    Poziom 19  
    Posty: 348
    Pomógł: 18
    Ocena: 52
    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 / C++
    Zaloguj się, aby zobaczyć kod


    To jaki problem byłby z nią skoro, mogę bez problemu odczytywać wartość?
  • REKLAMA
  • #4 11758973
    Konto nie istnieje
    Konto nie istnieje  
  • #5 11763322
    Rinho
    Poziom 19  
    Posty: 348
    Pomógł: 18
    Ocena: 52
    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 / 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.
REKLAMA