-
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
- w czasach LED komary mają ciężko
- walizka z kodami
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
- Fajny film widziałem...
- Jaka ładowarka sieciowa do Iphona?
- Taśma izolacyjna do prac elektrycznych
- Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Wkrętarki, wiertarki...
- Zasilacz impulsowy 12V 10A, coś godnego uwagi jako zamiennik akumulatora wkrętarki
- Mouser - koszt wysyłki
- [OT] Jak wycinac ksztalt w piance lub styropianie?
Najnowsze wątki
- 2025-07-16 Tadeusz Rolke RIP
- 2025-07-14 Dwa dylematy
- 2025-07-14 Re: Dwa dylematy
- 2025-07-14 [UOKiK] Jeronimo Martins, właścicielowi sieci Biedronka, [przedstawił zarzut] udział[u] w zmowie z 32 firmami transportowymi.
- 2025-07-14 Re: Dwa dylematy
- 2025-07-14 Re: Dwa dylematy
- 2025-07-15 w czasach LED komary mają ciężko
- 2025-07-14 walizka z kodami
- 2025-07-15 Warszawa => Konsultant Wiodący SAP PP <=
- 2025-07-15 Warszawa => Lead SAP PP Consultant <=
- 2025-07-15 China => Production Coordinator / Representant Product Dev <=
- 2025-07-15 Warszawa => IT Data Analyst (Power BI) <=
- 2025-07-15 Teoretyczny przypadek
- 2025-07-15 Totaliztyczne Prawa i Obowiązki Człowieka: dodałem p. 11 zabraniający efektywnych, podatków przekraczających 49% zysków
- 2025-07-14 Jest odp. UE na mój 17. Rap. Tot. Patroni Kontra Bankierzy