eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaWinAVR - Pytanie do znawcow C › WinAVR - Pytanie do znawcow C
  • Data: 2010-05-14 19:22:40
    Temat: WinAVR - Pytanie do znawcow C
    Od: "roxy" <k...@o...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Mam pytanie dlaczego zmienna Ki oraz Kp (s->Ki oraz s->Kp) wchodzaca w
    sklad struktury s_pid przyjmuje losowe warosci wewnatrz funkcji
    RegulatorNextStep;
    Przedstawiam ponizej zawartosc plikow zrodlowych

    Dodam tylko ze problem rozwiazalem ale nie moge sobie wytlumaczyc tak
    dziwnego zachowania kompilatora. Rozwiazanie problemu polegalo na
    przeniesieniu tworzenia struktury (struct s_pid pid;) z wnetrza funkcji
    main() na zewnatrz jej (globalna).




    ********
    plik main.c
    ********

    #include "pid.h"
    ...
    main(1);
    {
    ...
    struct s_pid pid; // jezeli przeniose to strukture na
    zewnatrz funkcji main
    // to program wykonuje sie
    prawidlowo
    ...
    InitReg(&pid,40,1,0);
    ...
    while(1);
    {
    ...
    err=RegulatorNextStep(&pid,i_set,current);
    ...
    }// end while
    }// end main

    ***************************
    plik pid.h
    ***************************
    #ifndef _PID_H_
    #define _PID_H_

    struct s_pid
    {
    signed int Kp;
    signed int Ki;
    signed int Kd;
    signed long sigma;
    signed int delta;
    };


    void InitReg(struct s_pid *s, signed int Kp, signed int Ki, signed int Kd);
    signed int RegulatorNextStep(struct s_pid *s,signed int set,signed int mes);
    void RegulatorReset(struct s_pid *s);

    #endif

    *****************************
    plik pid.c
    **************************
    #include "pid_flt.h"
    ...
    signed int RegulatorNextStep(struct s_pid *s,signed int set_value,signed int
    measure_value)
    {
    ...

    p_term=(s->Kp) * error;
    i_term= (s->Ki * s->sigma)/8;
    ...
    lcd(s->Kp); // !!!!!! dla czego mam losowe wartosci???
    lcd(s->Ki);
    ...
    return (signed int)out;
    }

    void InitReg(struct s_pid *s, signed int Kp, signed int Ki, signed int Kd)
    {
    s->Kp=Kp;
    s->Ki=Ki;
    s->Kd=Kd;
    s->sigma=0;
    s->delta=0;
    }


    ****************************************************
    **************************





    __________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow
    5103 (20100510) __________

    Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

    http://www.eset.pl lub http://www.eset.com




Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: