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



Teraz jest 30 mar 2026, o 19:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 5 lut 2014, o 18:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 cze 2013
Posty: 137
Lokalizacja: Kraków
Pomógł: 0

Hej
Od jakiegoś czasu staram się zaprojektować sensowne przechowywanie danych w pamięci flash atmegi16. Chciałbym do tego zaprząc struktury, ale nie wiem czy jest to możliwe, a w googlu nic nie mogę znaleźć na ten temat. Muszę zapisać jakieś 60 znaków, ale nie w postaci pikselowej, tylko wektorowej. Znaczy to tyle, że nie mogę zapisać zwykłej maski x na y pikseli i zaznaczyć które mają być zapalone, a które zgaszone. Muszę jakoś zapisać współrzędne punktów wszystkich krzywych składających się na dany znak. Może pokażę na przykładzie litery "r":
Obrazek
Trzeba zapisać współrzędne dla 3 osobnych krzywych:
- czerwona: (0, 232), (48, 216), (80, 240), (128, 240), (152, 208), (152, 176)
- zielona: (48, 216), (48, 8)
- niebieska: (0, 0), (96, 0)

Problem w tym, że dla każdego znaku zarówno ilość krzywych, jak i ich długości mogą być różne. Oczywiście mógłbym to wszystko upakować do jednej tablicy i dodać kilka bajtów o tym ile jest krzywych oraz jakie są ich długości, ale wydaje mi się to niepotrzebnie skomplikowane.
Tak więc Panowie - czy coś takiego ma szansę powodzenia? Używałem już kiedyś struktur na podstawie poradnika Mirka, ale tablice wewnątrz nich miały określone długości.

Jeśli da się coś takiego uzyskać, to cały problem staje się prosty do rozwiązania: osobna struktura dla pojedynczej krzywej (z tablicą współrzędnych punktów), a potem struktura znaku zawierająca tablicę struktur krzywych. Niestety wszystko zatrzymuje się na tym, że nie wiem jak tworzyć struktury z tablicami nieokreślonej długości. Bardzo proszę o jakieś ukierunkowanie...

Pozdrawiam
mopsiok

//edit
Dorwałem teraz Eclipsa i sprawdziłem jak to działa. Niestety tak jak się obawiałem, wywala błąd: "non-static initialization of a flexible array member".
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jakieś propozycje? Nie chciałbym na stałe definiować długości tablic, ale z tego co widzę to jest to jedyne rozwiązanie...

_________________
Więcej dziwactw na: www.youtube.com/user/mopsiok



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2014, o 22:30 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Ciekawy temat 8-)
Na początek dodam, że robi się to tak, że każdą literkę pakuje się do jednej tablicy, gdzie 1 bajt to liczba punktów w jednej łamanej, potem są te punkty (kolejne 2 bajty), a następnie kolejny bajt określający ilość punktów drugiej łamanej itd. i jak nie ma więcej łamanych to jest 0 i dla twojej literki r to będzie tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Cały alfabet można umieścić w jednej tablicy wskaźników do tablicy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Oczywiście można też wszystkie kody ascii umieścić w jednej tablicy i korzystać ze struktury zawierającej również informacje o początkowym adresie każdego ze znaków. Jest to dokładnie opisane w zielonej książce Mirka. Różnica będzie dopiero przy rysowaniu czcionki.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2014, o 23:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 cze 2013
Posty: 137
Lokalizacja: Kraków
Pomógł: 0

Dzięki za odpowiedź. Tak jak pisałem, myślałem nad podobnym rozwiązaniem, ale chciałem się najpierw dowiedzieć czy nie da się tego zrobić strukturą. Takie rozwiązanie wydaje się nieco... niskopoziomowe :). Do tego chciałbym wprowadzić kilka dodatkowych pól, np. przesunięcie literki w pionie (dla literek typu g, j, p itp.) - szkoda że trzeba to robić w jednej tablicy.

Widzę że jesteś obeznany z tematem - nie wiesz może skąd mogę wytrzasnąć przykładowe czcionki w takim lub podobnym formacie (tj. w wersji linii łamanych)? Póki co robię to ręcznie - na podstawie czcionki rysuję krzywe w Inkscape'ie, eksportuje to do HPGL i przepuszczam przez skrypt w Pythonie. Przyznam że to strasznie męczące zajęcie. Nie za bardzo wiem jak się nazywa taki zabieg, więc nie mam możliwości posprawdzać czy gdzieś w czeluściach internetu nie ma gotowych tablic :).

_________________
Więcej dziwactw na: www.youtube.com/user/mopsiok



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2014, o 22:12 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

mopsiok napisał(a):
szkoda że trzeba to robić w jednej tablicy

Przecież tablica może być składową struktury a inna tablica może zawierać w sobie struktury.

Tablic gotowych nie widziałem. Taki rodzaj czcionki zwany single line font jest stosowany w maszynach CNC i tam należy szukać.
Oczywiście można sobie szybko takie tablice przygotować używając Eagle'a. To bardzo uniwersalne narzędzie i aż dziw bierze, że ktoś coś tam w Paincie maluje i daje to na forum :lol:
Do rzeczy
- w edytorze PCB wstawiasz sobie tekst jako pojedyncze literki w odległości 10mm o następujących właściwościach
Obrazek
Jakby jakaś literka nie pasowała, albo potrzeba ogonka to sobie możesz dorysować linią.

-następnie odpalasz z menu File->CAM Processor i wybierasz tylko warstwę TOP i format SWEET (chociaż jest też HPGL)
Obrazek
-Klikasz Process Job i masz plik *.crs w takiej postaci:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

MA oznacza ustaw się na pozycji, DA rysuj do pozycji, więc MA x,y; DA x1,y1; DA x2, Y2; to jedna łamana, a od następnego MA zaczyna się następna. Kolejna literka ma pozycję x zaczynającą się od 100. Myślę że łatwo przerobić taki plik na tablicę o której była mowa wcześniej. W razie czego mogę się pomęczyć w wolnej chwili.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2014, o 23:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 cze 2013
Posty: 137
Lokalizacja: Kraków
Pomógł: 0

Łał mój mistrzu, nie wiedziałem że Eagle ma taką opcję :D. Już mi się nie przyda, bo wyeksportowałem wszystkie literki z Inkscape'a do HPGL, ale z pewnością warto to wiedzieć.


Krauser napisał(a):
Przecież tablica może być składową struktury a inna tablica może zawierać w sobie struktury.

Hmm... czuję się trochę zagubiony. Mógłbyś mi wyjaśnić w prosty sposób co to znaczy? ^^ Poza punktami łamanych potrzebuję przechować jeszcze szerokość znaku oraz jego przesunięcie w pionie. Jest jakaś szansa na to, żebym przechowywał te dane poza tablicą łamanych?

_________________
Więcej dziwactw na: www.youtube.com/user/mopsiok



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 14:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 paź 2011
Posty: 780
Pomógł: 20

No i wyszedł pseudo G cod :D

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2014, o 20:53 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

mopsiok napisał(a):
Jest jakaś szansa na to, żebym przechowywał te dane poza tablicą łamanych?

W drugiej tablicy.
Nie wymyślam koła. Masz to w książce "Język C Pasja programowania mikrokontrolerów 8-bitowych" tylko tam czcionka jest rastrowa. Czcionkę wektorową można sobie skalować, ale jak się używa łamanych (a nie krzywych) to jest raczej brzydka :roll:
Tablica łamanych dla wszystkich znaków:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

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

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

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

Może wygląda skomplikowanie, ale dzięki temu masz porządek.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2014, o 21:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 cze 2013
Posty: 137
Lokalizacja: Kraków
Pomógł: 0

Aaa, w ten sposób! Dzięki wielkie, już rozumiem o co chodziło. Mając punkty dla wszystkich znaków w jednej tablicy, odpada problem różnej długości tablic w strukturze - genialne :D.
Z pewnością łamane nie wyglądają pięknie, ale nie używam ich do wyświetlania na wyświetlaczu, a w obecnym zastosowaniu nawet lepiej się sprawdzają niż np. krzywe sklejane. Za kilka dni postaram się opublikować projekt ;).
Jeszcze raz dzięki za pomoc, bardzo mi rozjaśniłeś sprawę - leci pomógł.

_________________
Więcej dziwactw na: www.youtube.com/user/mopsiok



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2014, o 00:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 cze 2013
Posty: 137
Lokalizacja: Kraków
Pomógł: 0

Hej
Niestety mam kolejny problem. Postanowiłem przepisać całość w taki sposób jak proponowałeś, ale utknąłem przy jednej rzeczy.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie do końca orientuję się jak się dostać do wartości wewnątrz struktur. Nie wiem czy rozumuję prawidłowo, ale utworzyłem takie cosie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Niestety w pierwszej linijce wywala mi warning "ignoring attributes applied to 'struct <anonymous>' after definition", a po wypisaniu zmiennych na LCD dostaję jakieś ogromne liczby. Poprzednio zamiast tablicy struktur używałem tablicy wskaźników - używałem tego w podobny sposób i było okej.
Byłbym wdzięczny za nakierowanie co robię źle - przyznam że trochę się gubię w tym wszystkim :).

Nie wiem czy w ogóle to co robię jest możliwe - może jedyną opcją jest odczytywanie pamięci bajt po bajcie i ręczne parsowanie danych? Jeśli tak to ja chyba podziękuję i wrócę do tablicy wskaźników ;).

_________________
Więcej dziwactw na: www.youtube.com/user/mopsiok



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2014, o 02:10 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

To jeszcze pokaż jak wygląda cała czcionka żeby można było sprawdzić, bo od tego należałoby wyjść. No chyba że takiej nie masz.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

itd.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2014, o 10:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 cze 2013
Posty: 137
Lokalizacja: Kraków
Pomógł: 0

Aa, w ten sposób. Ten temat jest naprawdę strasznie skomplikowany :). W każdym razie... i tak nie działa.

To może ja wrócę do początku. Tak wygląda czcionka w Inkscapie:
Obrazek

Potem każdy znak zapisuję w oddzielnym pliku w formacie HPGL, a następnie przepuszczam przez skrypt w Pythonie który generuje mi z tego kod dla Atmegi.
Tablica z danymi o łamanych:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Tak to właśnie u mnie wygląda ;). Dostać się do łamanych to łatwizna, ale mam problem z wartościami w strukturach. Próbowałem kilku rozwiązań, m.in. takiego jak zaproponowałeś mi wcześniej, ale przerobionego na struktury. Wyskakiwał taki warning jak pisałem wcześniej, i nawet jak udało mi się go pozbyć, to wartości na LCD i tak były identyczne jak z warningiem - rozmiar kodu ten sam.

------------------------ [ Dodano po: 38 minutach ]

Posiedziałem nad tym trochę i chyba znalazłem przyczynę. Po Twojej sugestii zamieniłem (*charP).arr_offset na &charP->arr_offset, ale tak mi się pogmatwało że zostawiłem definicję charP taką jaka była. O ile mnie LCD nie myli, to tak to powinno wyglądać:

Struktura z atrybutem PROGMEM i wskaźnik na nią:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Jeszcze raz wielkie dzięki za pomoc, nie dałbym rady samemu tego ogarnąć :).

_________________
Więcej dziwactw na: www.youtube.com/user/mopsiok



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

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