eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaWinAVR - Pytanie do znawcow C › WinAVR - Pytanie do znawcow C
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not
    -for-mail
    From: "roxy" <k...@o...pl>
    Newsgroups: pl.misc.elektronika
    Subject: WinAVR - Pytanie do znawcow C
    Date: Fri, 14 May 2010 21:22:40 +0200
    Organization: http://onet.pl
    Lines: 103
    Message-ID: <hsk7u8$a77$1@news.onet.pl>
    NNTP-Posting-Host: 91.214.36.65
    X-Trace: news.onet.pl 1273864968 10471 91.214.36.65 (14 May 2010 19:22:48 GMT)
    X-Complaints-To: n...@o...pl
    NNTP-Posting-Date: Fri, 14 May 2010 19:22:48 +0000 (UTC)
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: Microsoft Outlook Express 6.00.2900.5843
    X-RFC2646: Format=Flowed; Original
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579
    X-EsetScannerBuild: 7097
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:588491
    [ ukryj 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: