-
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not
-for-mail
From: MrWebsky <m...@p...onet.pl>
Newsgroups: pl.misc.elektronika
Subject: Re: WinAVR - Pytanie do znawcow C
Date: Wed, 19 May 2010 01:53:22 +0200
Organization: http://onet.pl
Lines: 126
Message-ID: <4...@p...onet.pl>
References: <hsk7u8$a77$1@news.onet.pl>
NNTP-Posting-Host: aajz193.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 8bit
X-Trace: news.onet.pl 1274226790 24531 83.5.3.193 (18 May 2010 23:53:10 GMT)
X-Complaints-To: n...@o...pl
NNTP-Posting-Date: Tue, 18 May 2010 23:53:10 +0000 (UTC)
X-Mailer: Mozilla 4.8 [en] (Windows NT 5.0; U)
X-Accept-Language: en
Xref: news-archive.icm.edu.pl pl.misc.elektronika:588762
[ ukryj nagłówki ]Szczerze mówiąc to napisanie czegoś takiego "main(1)" powinno
zostać oprotestowane prez kompilator bo składnia main w C jest taka
int main(int arg,char* argv[])
niemniej kompilatory są na ogół wyrozumiałe.
Natomiast
while(1);
{
}
to już ewidentny błąd. Dla kompilatora taki zapis oznacza, że
program ma stać w pustej pętli i nie robić nic a instrukcje z bloku
otoczonego klamrami w ogóle nie zostaną wykonane. Kompilator
może wtedy potraktować strukturę s_pid jak nieużywaną i usunać ją.
Zapis powinien wyglądać tak:
while(1) // Bez średnika!!!
{
}
Wtedy procesor ma wykonywac w kółko instrukcje zawarte w bloku.
Jeśli miałbym się tutaj jeszcze czego przyczepić, to nie wiem jak kompilator
reaguje na wyznaczanie adresu struktury w locie operatorem &
Załóż dodatkową zmienną wskaźnikową typu struct s_pid*
zainicjalizują ją adresem struktury pid i podaj do funkcji zamiast &pid.
Możliwe, że coś źle działa operator & i podstawia do funkcji zły adres
structury powodując przekłamania.
A tak w ogóle jaki to proc i kompilator?
roxy wrote:
> 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
Następne wpisy z tego wątku
- 18.05.10 23:59 Konop
- 19.05.10 21:09 Adam Dybkowski
- 22.05.10 14:13 roxy
- 22.05.10 16:01 Artur M. Piwko
Najnowsze wątki z tej grupy
- odzysk z panela PV
- tuner i silnik od rolety
- Przednia lampka rowerowa Basta / AXA pod dynamo w piaście
- Boję siię capa...
- Efekt gitarowy koda kd-30 trash metal
- Re: Efekt gitarowy koda kd-30 trash metal
- Wykrywanie przerwy w długim przewodzie zakopanym w ziemi.
- PT500
- supercap
- Procesor NMOS i karta CF
- Jak sprawdzic uC
- radyjko znalazłem
- Telewizor przestał widzieć sygnał z anteny
- LED
- System operacyjny dla 6800?
Najnowsze wątki
- 2024-05-31 Mały kogenerator gazowy
- 2024-05-30 Co to znaczy wer. eksportowa? Na przykładzie motoru Java 350 Perak
- 2024-05-31 Co to znaczy wer. eksportowa? Na przykładzie motoru Java 350 Perak
- 2024-06-01 karta SD po formacie odzyskiwanie zdjęć i filmów
- 2024-06-01 Modem LTE typu pendrive z agregacją pasm
- 2024-06-01 czy grad zbił wam szybę?
- 2024-06-01 odzysk z panela PV
- 2024-06-01 Sila sygnalu routera
- 2024-06-01 Warszawa => Spedytor międzynarodowy <=
- 2024-06-01 Warszawa => Senior Developer React Native <=
- 2024-06-01 Warszawa => Senior React Native Developer <=
- 2024-06-01 Warszawa => Interactive/Experience Designer <=
- 2024-06-01 Warszawa => Starszy inżynier oprogramowania (Rust) <=
- 2024-06-01 Gdynia => Sales Executive <=
- 2024-06-01 Łódź => Salesperson - CRM Systems <=