-
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
- Cewka elektrozaworu
- zapytanie o chip r5f21275nfp
- nie naprawiam więcej telewizorów
- Zrobił TV OLED z TV LCD
- Zasilacz USB na ścianę.
- Gniazdo + wtyk
- Aliexpress zaczął oszukiwać na bezczelnego.
- OpenPnP
- taka skrzynka do kablowki
- e-paper
- 60 mA dużo czy spoko?
- Dziwne zachowanie magistrali adresowej w 8085
- Współczesne mierniki zniekształceń nieliniowych THD audio, produkują jakieś?
- Jaki silikon lub może klej?
- Smar do video
Najnowsze wątki
- 2025-03-08 Cięcie wysokich tui
- 2025-03-08 Środa Wielkopolska => SAP FI/CO Konsultant wewnętrzny <=
- 2025-03-08 Prawo "gminne"
- 2025-03-08 Warszawa => Senior Recruiter <=
- 2025-03-08 Warszawa => Key Account Manager IT <=
- 2025-03-08 Najszybciej ładujące się samochody elektryczne
- 2025-03-07 AION przejety
- 2025-03-07 Warszawa => Data Engineer (Tech Leader) <=
- 2025-03-07 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-03-07 Warszawa => System Architect (background deweloperski w Java) <=
- 2025-03-07 Gliwice => Business Development Manager - Network and Network Security
- 2025-03-07 Chiny-Kraków => Senior PHP Symfony Developer <=
- 2025-03-07 Gliwice => IT Expert (Network Systems area) <=
- 2025-03-07 Chiny-Kraków => Backend Developer (Node + Java) <=
- 2025-03-07 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS