Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 7 lut 2025, o 17:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 2 sie 2016, o 18:38 
Offline
Nowy

Dołączył(a): 07 lis 2015
Posty: 4
Pomógł: 0

Witam, mam pewien problem, piszę oprogramowanie do atmega8, przy czym nie mam na razie działającego egzemplarza, więc piszę na czuja. jednak od pewnego czasu rozmiar pliku jest ten sam, 204 bajty (program się kompiluje bez błędów). Nawet jak wytnę połowę kodu, rozmiar jest ten sam... A jak pisałem nie mam egzemplarza by przetestować, ale coś tu jest nie tak.
Ktoś może wie o co tu chodzi ?

PS. Korzystam z Atmel studio.

Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2016, o 19:12 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

A zapisujesz ten program przed kompilacją? I jesteś pewien, że kompilujesz ten właśnie kod?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2016, o 19:16 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Waxy napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nie wiem jaki warunek w ten sposób sprawdzasz, ale raczej nie będzie on nigdy spełniony (jeśli to cały Twój kod).

Waxy napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ten warunek z kolei będzie spełniony zawsze, ponieważ zmienna ADCD nie jest zadeklarowana jako volatile.

W efekcie do tego bloku nigdy nie dojdzie:
Waxy napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czyli program nigdy nie wyjdzie z pętli while(1) (tej drugiej wewnątrz pierwszej). W związku z powyższym kompilator może optymalizować (usuwać) resztę kodu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2016, o 19:50 
Offline
Nowy

Dołączył(a): 07 lis 2015
Posty: 4
Pomógł: 0

1. warunek miał sprawdzać czy ADC skończył pracę
2. dodanie volatile nic nie zmieniło
3. błędu nie zauważyłem bo i testować nie miałem jak

Ale, przeniosłem break; na początek pętli, i coś ruszyło... Dostałem masę błędów typu "undefined reference to `LCD_WriteText(char*)'", i nie wiem o co chodzi, dodałem ścieżkę do folderu w opcjach kompilatora(w sumie to błąd linkera, więc nie wiem co miało by to zmienić...), przeniosłem pliki do folderu z main.cpp (zmieniając include), sprawdziłem nazwy funkcji.
Jakieś pomysły ?

PS. Biblioteka ściągnięta z radzio.dxp.pl, wersja 4-bit z odczytem flagi zajętości, piny dostosowane do projektu.

EDIT: Udało mi się rozwiązać problem, przekopiowałem co trzeba do main, teraz jest strasznie zaśmiecony, ale działa. Plik waży 3466 bajtów.

EDIT2: Skożystam z okazji, czy
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ustawi rejestr na 0001 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2016, o 21:55 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

No toż przecież używasz typu float i się dziwisz ? ... dociąga ci biblioteki do obsługi floatów

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2016, o 10:55 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Waxy napisał(a):
Ale, przeniosłem break; na początek pętli, i coś ruszyło...
To znaczy co i gdzie konkretnie przeniosłeś i co oznacza, że "ruszyło"?

Cytuj:
1. warunek miał sprawdzać czy ADC skończył pracę
Powinno być raczej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Waxy napisał(a):
2. dodanie volatile nic nie zmieniło
Uwierz mi, że dodanie volatile wiele zmienia. Niekoniecznie efekt będzie widoczny od razu podczas kompilacji, ale jest wysoce mało prawdopodobne, by Twój program działał prawidłowo (zgodnie z założeniem) bez volatile.

Waxy napisał(a):
3. błędu nie zauważyłem bo i testować nie miałem jak
Jeśli korzystasz z Atmel Studio, to sporo błędów można wychwycić za pomocą symulatora. Oczywiście nie wszystko można prawidłowo zasymulować, ale podejrzewam, że te o których pisałem dałoby radę.

Dodatkowy błąd to zerowanie zmiennej ADC po instrukcji break;

W ogóle Twoją pętlę, która prawidłowo powinna wyglądać tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zamieniłbym na przykład tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kolejny błąd to brak włączenia ADC. Należałoby w tym celu ustawić bit, ADEN w ADCSRA, bo bez tego nie wystartujesz żadnej konwersji.

Nie wiem, czy to wszystkie błędy. Nie mam już czasu tego dalej sprawdzać. Chyba będziesz musiał jeszcze sporo popracować nad tym kodem. No i powinieneś jednak mieć prototyp do sprawdzenia kodu w realnym mikrokontrolerze, bo to dopiero daje (jako taką) gwarancję poprawności kodu.

P.S. Jeśli chodzi o zmianę kanału (ADMUX) to też jest źle, ale naprawdę już nie mam czasu o tym pisać. Był całkiem niedawno wątek o tym na forum, więc może spróbuj poszukać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2016, o 14:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Waxy napisał(a):
EDIT2: Skożystam z okazji, czy
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ustawi rejestr na 0001 ?

A skąd taki koszmarek? - tak na siłę ...0001 to wystarczy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

...jeśli nie dokonujesz kilku pomiarów, w innym wypadku:
andrews napisał(a):
Był całkiem niedawno wątek o tym na forum

Np.:http://forum.atnel.pl/topic15808.html

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO