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



Teraz jest 23 lut 2025, o 17:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 27 mar 2015, o 01:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Wszystko przez Mirka :D

Naoglądałem się poradników i przy soku przyszło mi do głowy, żeby się pobratać z Asemblerem!

Ale wstawki to Mirek pięknie pokazał jak mają być, a ja zawsze chcę inaczej.

Rozwiązanie jest proste - Eclipse jest z default'u przygotowane na działanie z asemblerem dla AVR-ów.

Pokażę jak zacząć.

Potrzebujemy pliku main.c, no bo całego programu nie chciałem pisać - wszystko od zera w asemblerze, może za chwilę :)

Z tym, że main.c jest potrzebny zawsze, nawet jak jest prawie pusty, tylko funkcja main() musi być. Bez tego nie idzie....

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


A oto pojavia się tajemnicza funkcja blink();

Zawartość pliku blink.h

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


A teraz najważniejsze !!!! Tadaaaam !!!!

Plik blink.s (<--- s jak syczący słoń)

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


Nie ma żadnych specjalnych ustawień Eclipse, przynajmniej u mnie na Ubuntu - sprawdźcie prosze na windzie

Pozdrawiam wszystkich szalonych asemblerowców !!!!

------------------------ [ Dodano po: 37 minutach ]

A teraz trzy różne funkcje w pliku - taka sobie mini biblioteka

Dyrektywa #define, działa też #include

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


Plik "blink.h"

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


A main.c to sobie sami wymyślcie :P

Niestety edytor za bardzo nie pomaga przy pisaniu, ale co tu można pomóc....

Jeszcze jedna "odmiana" biblioteczki:

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

_________________
--... ...-- - --- -- . -.-



Ostatnio edytowano 27 mar 2015, o 22:47 przez sq5rix, łącznie edytowano 8 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2015, o 01:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

To jest takie C ze wstawkami w assemblerze. Czysty assembler wygląda troszkę inaczej. Ale trzeba przyznać, że sposób dość ciekawy.
Sprawdzałeś może czy działa to też w AS?

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2015, o 01:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Nie, odpalam wszystko w Eclipse na razie.
Czysty asembler to nie jest, bo z definicji chcę używać do krytycznych funkcji, a nie kodować całość.

Trochę mi się formatowanie rozjeżdża, w eclipsie jest równo :(

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2015, o 12:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Dzięki !!

Apropos dyrektyw, to wszystkie pasujące do tego sposobu kodowania są tu:

http://www.sourceware.org/binutils/docs ... eudo%20Ops

Super poradnik (wprawdzie o Arduino, ale 99% o asemblerze) jest tu:
https://www.youtube.com/watch?v=h8T3PWa ... Kdn3i6zdZD

Początek serii.

W lengłydżu, ale bardzo jasno przekazane. Nawet dla samych slajdów warto zajrzeć.

I najważniejszy dokument, bez tego ani rusz:

http://www.atmel.com/Images/doc1022.pdf

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2015, o 22:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Uch, przepraszam za duplikowanie, wszystko było już na naszym forum.
Nie widziałem i doszedłem własnym "długim marszem" :)
Dodatkowa fajna stronka dla kolegów z tegoż postu na forum:
http://msoe.us/taylor/tutorial/ce2810/candasm
A cały post o asemblerze i C:
topic5881.html

Powiem Wam, że te same funkcje napisane w asemblerze działają jakby lepiej :D

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 mar 2015, o 22:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Hej,

zobaczcie biblioteczkę do pomiarów ADC.
Funkcja uint16_t adc() może być użyta jako zwykły odczyt lub przy uśpieniu procka w zależności od define
Przetwornik musi być odpowiednio zainicjowany przed użyciem tej funkcji.
Miłego używania!

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

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


Oczywiście jak zwykle proszę o uwagi - co tu można poprawić?

T.

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 kwi 2015, o 18:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Ciekawa sprawa, był jeden na sto odczyt z dziwacznymi wartościami, trzeba uważać z pomiarami we śnie :)
W ogóle temat funkcji sleep jest trudny. Zaczynam go zgłębiać!

Fajny link znalazłem:
http://www.atmel.com/webdoc/avrassemble ... b_SEI.html
Zły wynik był prawdopodobnie spowodowany wskoczeniem przerwania timera po ustawieniu r24 i r25, który popsuł.
Wstawię cli i potem sei, po którym wykona się jeszcze jedna komenda przed kolejnym przerwaniem. Czyli w mojej funkcyjce pomiarowej mogę dać cli po sleep, a sei przed ret i ret się wykona...

Czytam:
http://www.atmel.com/Images/doc8352.pdf
http://www.atmel.com/images/doc8003.pdf
http://www.atmel.com/Images/doc0937.pdf
http://www.atmel.com/images/doc2551.pdf

_________________
--... ...-- - --- -- . -.-



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 6 gości


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO