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



Teraz jest 19 kwi 2024, o 02:51


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 16 lut 2016, o 01:53 
Offline
Nowy

Dołączył(a): 19 sty 2016
Posty: 8
Pomógł: 0

Cześć, lata temu pisałem sporo w Assemblerze (6502,80286+), przez następne lata(nie pytajcie ile) ..prawie zapomniałem jak to było.
Dziś dłubię sobie trochę takich użytecznych w domu projekcików (i chyba nakupię attiny13a i attiny24 bo tanie są <2,5zł a ja mam 1000 pomysłów - tylko żona wściekła chodzi.
Mam takie pytanko:
Jak wymusić na C określony sposób przekazywania parametrów do asm, kiedyś trochę hakowałem małe programy w C na intelu to raczej zawsze szło przez stos z C (C raczej znałem tylko po łebkach wtedy).

Tutaj widzę (zaglądałem do .dump w asm) że wszystko jest pchane przez rejestry, głównie r24 i r25, a ja bym chciał tak prościutko wołać w C np. RS232_wyslij(12); zamiast ładować r24 i wołać - tak, oczywiście, to w asm czytam r24, ale czy zawsze to będzie r24? - o to chodzi, można chyba przekazać adres zmiennej z C do ASM, no ale - ale co z tym stosem? - to mnie ciekawi.
Ogólnie ten r24 mi nie przeszkadza, ale chciałbym by to (kompilacja) działało na więcej niż jednym kompie (i kompilatorze).
Ale może od początku (tak sobie to kompiluję (linux, avrdude,avr-gcc,avr-libc)
UWAGA! - wersje "mocno robocze", takie "tysiąc razy" poprawiane/testowane :
Składnia: [ Pobierz ] [ Ukryj ]
język bash
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

no i mam sobie w asm takie wysyłanie przez RS232 (sciągniete z noty ATMELA i prrzerobione na AVR-GCC) "ladowarka-ctc2.S" (duże ".S" !):
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Przepraszam - wersja robocza ze śmieciami, działa na Attiny13A (przynajmnie jeszcze niedawno hehe) - transmisja 9600n bodów, 8N1.

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


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


(EDIT 18.02.2016) Taka jeszcze uwaga do powyższego (akurat nie złapałem zapisu ze zmiennych 16 bit, te widoczne są uint8_t).
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Daje to mniejszy kod wynikowy w ASM względem RS_putchar( zmienna16t ) - to ładuje r24 i r25; RS_putchar( zmienna16t>>8 ) - to ładuje r24 i r25 + przepisuje r25 do r24; RS_putchar( lo8(zmienna16t) ) daje tylko ładowanie r24 (lds r24, 0xadres-zmienna16t-pierwszy-bajt).
Choc nie wiem czy dałoby się to zapisać ładniej (w C programuję mało i okazjonalnie = słabo pamiętam).
(END)


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


Jeżeli "zarejestrowałem" w C rejest r24 to podczas kompilacji dostaję ostrzeżenia o wykorzystywaniu R24 przez C - całkiem nieźle - ale dla wiedzącego o co kaman.
A jak wymusić przekazanie przez stos?
.. przez zdefiniowanie czegoś w C inline asm? (przyznam nawet nie próbowałem tego tykać).
Czy może jest inny sposób? - zasada np. taka, zrzuca mi na stos, ja zrzucam na stos jeszcze robocze, przestawiam wskaźnik SP -(+) X bajtów parametrów, odczytuje do roboczych parametry ze stosu, robię, pobieram ze stosu wart. roboczych i wracam z procedury.
Tylko stos trochę mały :) 64 RAM uff.
Przepraszam za chaotyczność wypowiedzi. Ciut późno skończyłem.



Ostatnio edytowano 27 lut 2016, o 23:16 przez kenubi, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 12:30 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

Sprzętowy uart i hardcodowane delay'e to niezbyt dobry pomysł.Jednak jest to sw

A tu coś więcej o przekazywanych argumentach
http://www.elektroda.pl/rtvforum/topic1091583.html

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Ostatnio edytowano 16 lut 2016, o 17:10 przez jnk0le, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 13:50 
Offline
Nowy

Dołączył(a): 19 sty 2016
Posty: 8
Pomógł: 0

dzięki za linka, byłem na tych stronach (http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage) i zapomniałem że tam jest co poczytać. Ten RS służy mi raczej jako podglądacz, bo do t13 co ma 8 nóg raczej ciężko doczepić wyświetlacz itp., coś 30 bajtów a spore możliwości przesłania danych (mam taki USB pl2303 TTL za kilka zł -dobra i szybka sprawa).

No to już chyba wszystko [w zakresie pytania] będę wiedział.

[OT] A projekt to taka ładowarka Li-ion z własnym trafo i chińskim modułem TP4056 (takie z alle po 3 zł), dodałem do tego P-MOSFET (TCP8103 bodaj) i procka by to było takie włóż i zapomnij, podlutowałem się pod otwarte kolektory TP4056 Ledów. MOSFET pilnuje biegunowości (moduł się pali choć w nocie coś tam było że niby odporny), odłącza ładowanie po np. 3h definitywnie, itd. Po prostu trochę boję ogniw z laptopów, to ma dodatkowo czuwać nad przebiegiem ładowania. I tylko jeszcze zachciało mi się rozbudowywać o "diagnostykę" ładowania.



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: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO