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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 14 lip 2025, o 01:20


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