-
Data: 2010-05-18 23:53:22
Temat: Re: WinAVR - Pytanie do znawcow C
Od: MrWebsky <m...@p...onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- Mierniki poziomu glukozy (CGM, FGM)
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Kontrola nad prądem - sprawdź jak działa [apka - przyp. JMJ] eLicznik
- NETIA i hasło logowania
- Modulacja FM
- Najgorszy język programowania
- Kol. sukces po polsku: firma Szumisie sp. z o.o.
- Chińska Telefonia 6G - Chcą Nas Sterować Elektrycznie - Jak Kukiełki w Teatrze Lalek!!!
- RS-485 ale automatycznie dwukierunkowy
- Leżakujące SSD gubią po roku dane
- kolorowy e-paper
- Sterownik kotła CO praca PWM
- Jakie baterie A23 i LR44?
- OLED SSD1306 - degradacja?
- Który symulator AVR jest ,,prawilny"?
Najnowsze wątki
- 2025-12-12 Warszawa => Microsoft Dynamics 365 Finance Consultant <=
- 2025-12-11 To już efekt Żurka czy coś jeszcze GORSZEGO?
- 2025-12-11 Policjanci w mieście Łodzi zmierzą ci prędkość z błędem mniejszym niż producent w laboratorium :-)
- 2025-12-11 Warszawa => Senior Java Developer <=
- 2025-12-11 Kolejny prezent
- 2025-12-10 hameryka
- 2025-12-10 Tak im zależy na wlasnym kraju. :-(
- 2025-12-10 Czy "hipoteka przymusowa" podpada (powinna podpadać) pod ochronę immunitetem poselskim? [Ziobro]
- 2025-12-10 Żurek po raz kolejny wykazał jaki poziom reprezentuje
- 2025-12-10 Gdańsk => Microsoft Dynamics AX/365 SCM Consultant - Service & Suppor
- 2025-12-10 Rzeszów => Konsultant ERP Microsoft Dynamics 365 Commerce <=
- 2025-12-10 Chrzanów => Spedytor Międzynarodowy (handel ładunkami/prowadzenie f
- 2025-12-10 Chiny => Koordynator Produkcji / Przedstawiciel ds. rozwoju produktu <
- 2025-12-10 Przekroczenie uprawnien
- 2025-12-10 China => Production Coordinator / Representant Product Dev <=




2035 rok coraz mniej realny? Europa traci tempo w wyścigu o elektromobilność