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



Teraz jest 27 lis 2024, o 18:25


Strefa czasowa: UTC + 1





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

Dołączył(a): 01 wrz 2014
Posty: 14
Pomógł: 0

Witam,

Ostatnio, po kilku miesiącach pisania w c# wzięło mnie na AVR. Wybór padł na c++ (fajne fjuczery), ale przyzwyczajony do programowania obiektowego i czystego kodu zapisy typu DDRA = 0xff; stały się dla mnie nieprzyjazne.

"Nie będę pisał cały czas jakiś magicznych rejestrów" pomyślałem. Pogrupuję je, żeby było przejrzyście.

Przy okazji - na O3 kompilator sobie wywala wszystko nie potrzebne i zmniejsza kod do 0 - Pin_A3::Set(); to jedna linijka w ASMie po kompilacji.

TR;DR;
Niżej generatorek, dzięki którym można ustawiać bity, porty, przeźroczyście dla programisty.
Obrazek

A tu przykładowy output i przykład użycia.
Obrazek

Wygenerowany kod: http://pastebin.com/xajujBiH

Jak myślicie - ma to sens? Siedzicie w tym dłużej, więc macie większe doświadczenie niż ja.
Myślę do rozwinięciem tego programu, by można było prostym plikiem XML zdefiniować mikroprocesor i tworzyć fajne pliki wynikowe obejmującego wszystkie możliwości.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2016, o 00:14 
Offline
Użytkownik

Dołączył(a): 20 lip 2015
Posty: 83
Pomógł: 6

Nie wiem czy jest sens, taka/takie klasy to spory i chyba niepotrzebny narzut na flash, względem możliwości zapisania tego jako proste makra preprocesora.

O ile, być może komfort użytkowania tego jest większy, o tyle przy procesorach 8bitowych avr z takim podejściem (mówiąc ogólnikowo) szybko sobie zapchasz niepotrzebnie pamięć.

Jak już chcesz robić coś podobnego, to raczej polecałbym chociaż bit rejestru przekazywać jako argument, bo tych klas masz w chwili obecnej pierdyliard :P Nie wyobrażam sobie ewentualnych zmian w takich klasach, gdy masz ich z 20.

Możesz spróbować zastosować też template'y. Kiedyś widziałem gdzieś fajny kod pod avry, zrobiony właśnie z wykorzystaniem template'ów. Sprytnie załatwiał w ramach jednej klasy taką obsługę portów jaką Ty próbujesz zrobić.

Niestety, przy programowaniu procesorów bez systemów operacyjnych musisz wybierać często pomiędzy komfortem i optymalnością danego rozwiązania.
Sam zobaczysz, że w miarę większych projektów, komfort pisania będzie miał drugorzędne znacznie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2016, o 00:21 
Offline
Nowy

Dołączył(a): 01 wrz 2014
Posty: 14
Pomógł: 0

Na 4programmers.net rozwiałem te wątpliwości - 0 pamięci zapchanej. http://forum.4programmers.net/C_i_C++/2 ... d&id=11598 Wszystko się zwija do inline static z C. Mój generator ma szersze możliwości niż templaty - wyobrażasz sobie pisanie

PORTX<PORTA> PortA;
Pin_XY<PORTA,1> Pin_A1;?? i tak 128 razy dla uc z 130 nóżkami
Generator robi wszystko ładnie :P

Te klasy są generowane generatorem https://github.com/pixellos/CodeGenerator, rozwijam go caly czas - szukam osób, które by też chciały popracować nad takim czymś.

W zamyśle będzie jeszcze Pin_B3::Interrupt::Rising();, albo INT2::Rising();

W miarę pisania większych projektów wygoda jakość i czytelność mają najważniejszy priorytet.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2016, o 00:39 
Offline
Nowy

Dołączył(a): 28 gru 2015
Posty: 9
Zbananowany użytkownik

Pomógł: 0

Napisałeś że: "Mój generator ma szersze możliwości niż templaty" <- Możesz ten temat nieco przybliżyć? Dlaczego generator będzie lepszy niż szablony i co ma Twój generator a nie mają szablony i odwrotnie.
Bo to że można użyć bez dodatkowych kosztów C++ do AVR to jestem pewien :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2016, o 07:19 
Offline
Nowy

Dołączył(a): 01 wrz 2014
Posty: 14
Pomógł: 0

Nie precyzyjnie sie wyrazilem - wiem, iz nie ma nic co by sie nie dalo zrobis szablonami I makrami w cpp, ale taka sytuacja - procki rozne z roznym rozmieszczeniem nozek ale te same rejestry - w mojej nowej wersji sie zmieni, to prosta zmiana w xml. Zobaczycie jak skoncze release dzis / jutro. Sry za bledy tapam z smartfona.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2016, o 12:06 
Offline
Nowy

Dołączył(a): 28 gru 2015
Posty: 9
Zbananowany użytkownik

Pomógł: 0

Hm.. Przyznam że dalej nie uzyskałem odpowiedzi, ale może jesteś zajęty. Dość że "rozmywanie informacji" o typie MCU do 2 elementów czyli do biblioteki oraz do generatora, w mojej ocenie jest błędem projektowym. Masz wtedy 2 miejsca z tą samą odpowiedzialnością oraz 2 technologie i 2 języki które powinny być znane programiście/programistce.
O ile można to akceptować jeśli chodzi o konfigurację uruchomienia np. dla różnych płyt (bo nie wiadomo jakie elementy i gdzie są podłączone) o tyle obsługa czegoś tak podstawowego jak port, powinna być przeniesiona do biblioteki a nie konfiguratora. Tym bardziej że jeśli przeniesiesz to do konfiguratora, automatycznie tracisz możliwość testowania kodu podstawowego.

No ale to forum nie jest od wymądrzania się a Twoim celem może być "przećwiczę to sobie".. więc na tym skończę.



Ostatnio edytowano 26 sty 2016, o 15:50 przez mastalerz-marek, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2016, o 13:48 
Offline
Nowy

Dołączył(a): 01 wrz 2014
Posty: 14
Pomógł: 0

Przepraszam, że nie odpisywałem - byłem w szkole. Typ mcu jest definiowany w projekcie na np __atmega16a__, co jest potrzebne do AVR/io.h. Gdzie jest rozmywanie informacj? Do pliku xml się wprowadzi dane procka, na outpucie będzie się pracować, generator będzie przeźroczysty. Programista nie będzie musiał znać c#, wszystko da się w xml zmienić.

Generator się użyje tylko raz na każdy typ uc, tylko chodzi o to, by przy dodwaniu nowych funkcji było łatwiej i kod był czytelniejszy.
Marku, nie odbieram Twoich opinii jako wymądrzanie się - jestem uczniem technikum, programuje w domu (w szkole króluje asm, więc nihil novi), Feedback jest mi bardzo potrzebny! Dzięki!

@Edit - Nie słyszałem o szablonach dających się generować z pliku xml,więc ma taką przewagę. Szablon robi praktycznie to samo w czasie kompilacji co generator, tylko że mam większą kontrolę nad kodem i nad czymś co się będzie wywoływać :D



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 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