Skocz do zawartości

Kurs Intel Edison - #5 - podstawy Arduino, wejścia i wyjścia


Komentator

Pomocna odpowiedź

html_mig_img
Umiemy już połączyć się z modułem Intel Edison, poznaliśmy podstawy pracy z systemem plików oraz konsolą systemu Linux.Od tej części kursu zaczynamy programowanie. Wykorzystamy Arduino IDE, jako znane i lubiane środowisko do tworzenia prostych aplikacji.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

Link do komentarza
Share on other sites

różnicę możemy zobaczyć na obrazku powyżej – program jest krótki, ale zajmuje aż 76kB.

Jednak nie powinniśmy się tym przejmować,
maksymalny rozmiar programu, to aż 10MB.

Kwestia tego jak to się skaluje dla większych programów, bo zwykła binarka na linuxie to ok 2-6kB. (idąc dalej tym przelicznikiem 10MB robi nam się z ~500kB "normalnego" kodu)

Oczywiście zakładam że nikt nie zapomniał o tym że w gcc istnieje coś takiego jak flagi optymalizacyjne.

Link do komentarza
Share on other sites

jnk0le, programy kompilowane są na Arduino IDE dostarczonym w pakiecie od Intela. Nie były wprowadzane żadne zmiany, ponieważ zapewne 99,999% użytkowników Arduino takich zmian nie robi. Chcemy, aby tekst odzwierciedlały warunki występujące u największej ilości osób. Trzeba też pamiętać, że kosztem wygody programowania w Arduino tracimy trochę na szybkości programów oraz zwiększamy ich objętość. Jest to kwestia wyboru, obserwując jednak trendy popularności większość osób godzi się na takie ustępstwa i wybiera Arduino.

Link do komentarza
Share on other sites

jnk0le, programy kompilowane są na Arduino IDE dostarczonym w pakiecie od Intela. Nie były wprowadzane żadne zmiany, ponieważ zapewne 99,999% użytkowników Arduino takich zmian nie robi.

A jak któryś z tych użytkowników przesiądzie się na natywne rozwiązanie intela to nieprzypadkowo doświadczy dziesięciokrotnego wzrostu wydajności.

Można bardzo łatwo zauważyć że intel celowo stosuje zagrywkę "gcc -O0 i robimy benchmarki" aby promować swój kompilator.

Spójrzmy najpierw do wiki:

https://en.wikipedia.org/wiki/Silvermont - Core2 z SSE4_2 (CPU w Edisonie)

https://en.wikipedia.org/wiki/Intel_Quark - zmodyfikowany i586

A oto prawidłowe flagi gcc dla Edisona według intela:

echo $CC

i586-poky-linux-gcc -m32 -march=i586 --sysroot=/opt/poky-edison/1.6/sysroots/core2-32-poky-linux

Ewidentne wprowadzanie w błąd (gcc - quark bez SSE w przestarzałej architekturze, icc - pełny silvermont). Równie dobrze zamiast i586 mogli dać i686 albo core2, ale oczywiście całkowicie przypadkiem dali i586.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

jnk0le, nie bardzo rozumiem do kogo i o co masz żal. Intel jak wiele innych firm ma swoją politykę, plany oraz produkty które dostarcza użytkownikom. Edison to jeden z produktów - można go używać lub nie, w zależności od potrzeb, upodobań, czy środków finansowych. Nie jest to idealne rozwiązanie, które ma poprawić życie wszystkich ludzi - to nie Windows 10, który każdy musi mieć.

Z materiałów publikowanych przez Intela wynika, że Edison jest produktem przeznaczonym do pewnego, dość specyficznego zastosowania. Celowo nie wyposażono go w wydajny i prądożerny procesor - zastosowane rozwiązanie miało być przede wszystkim energooszczędne.

Edison to miniaturowy moduł, który ma pracować przy zasilaniu bateryjnym, dostarczając mocy obliczeniowej niezbędnej przede wszystkim do efektywnej komunikacji z internetem - na potrzeby internetu rzeczy (IoT). Tak patrząc na ten moduł, nie należy oczekiwać niesamowitych osiągów - w końcu większa moc obliczeniowa to większy pobór mocy, a więc skrócenie czasu pracy na baterii. A moduł miał być maksymalnie mobilny.

Co do architektury, to bazowanie na i586 jest tak samo dobre ja na każdej innej i nie świadczy o byciu przestarzałym, bądź nie. Nadal wielu producentów produkuje zupełnie nowe mikrokontrolery zgodne z architekturą 8051, która ma już 36 lat!. Sam ostatnio programowałem moduł Bluetooth 4.0 wyposażony w rdzeń zgodny z '51...

Ustawienia optymalizatora to chyba najmniej istotny temat dla osób które dopiero zaczynają programować, a do nich adresowany jest niniejszy kurs.

Nie wiem o jakim kompilatorze Intela mówisz - wszystko działa na bazie gcc. Arduino IDE pod spodem wykorzystuje właśnie gcc, więc nic nie stoi na przeszkodzie zmianie parametrów kompilatora. Osoby zainteresowane nieco bardziej profesjonalnym wykorzystaniem modułu, mają do dyspozycji Eclipse oraz pełną kontrolę nad procesem kompilacji.

Jeszcze więcej można uzyskać kompilując system oraz toolchain od podstaw za pomocą Yocto.

Link do komentarza
Share on other sites

"Polityka" Intela to bardzo szeroki temat

Z materiałów publikowanych przez Intela wynika, że Edison jest produktem przeznaczonym do pewnego, dość specyficznego zastosowania. Celowo nie wyposażono go w wydajny i prądożerny procesor - zastosowane rozwiązanie miało być przede wszystkim energooszczędne.

Edison to miniaturowy moduł, który ma pracować przy zasilaniu bateryjnym, dostarczając mocy obliczeniowej niezbędnej przede wszystkim do efektywnej komunikacji z internetem - na potrzeby internetu rzeczy (IoT). Tak patrząc na ten moduł, nie należy oczekiwać niesamowitych osiągów - w końcu większa moc obliczeniowa to większy pobór mocy, a więc skrócenie czasu pracy na baterii. A moduł miał być maksymalnie mobilny.

Co do architektury, to bazowanie na i586 jest tak samo dobre ja na każdej innej i nie świadczy o byciu przestarzałym, bądź nie.

Problem w tym że jest to Atom (pełne SSE4.2) z wyciętymi nieużywanymi peryferiami i obniżonym taktowaniem. Na podstawowym wariancie i586 bazuje Quark.

Traktowanie Atoma jako takiego 100MHz szybszego quarka i przygotowywanie benchmarków (gcc vs icc które linkuje do bibliotek korzystających z SSE) da oczywiste wyniki.

Link do komentarza
Share on other sites

Możliwe, ja nie dotarłem do tak szczegółowych informacji o wewnętrznej budowie procesora Quark. Ale nawet jeśli Quark jest zmodyfikowanym Atomem to co z tego? Wielu producentów wykorzystuje wcześniejsze konstrukcje do tworzenia nowych. Przykładowo Cortex-M0 ma inną architekturę (ARMv6) niż pozostałe Cortexy (ARMv7). Można więc powiedzieć że ARM wykorzystał starszą wersję.

Natomiast jeśli jesteś tak bardzo zainteresowany porównywaniem z Atomem, możesz poszukać informacji o trzecim rdzeniu. Z tego co udało mi się wyszukać pracuje na nim RTOS - tego chyba Atom nie oferował.

Link do komentarza
Share on other sites

Elvis, jnk0le mówi że Intel celowo podaje złe ustawienia dla gcc żeby promować swój kompilator.

Flagi które podaje są dla "słabszej" architektury którą ten procesor też wspiera, po to żeby wyniki były gorsze niż na ich kompilatorze.

Tak ja to zrozumiałem.

Link do komentarza
Share on other sites

Ale o jaki kompilator intela chodzi? Przecież ani w artykule, ani w jakiejkolwiek dokumentacji Edisona nie ma mowy o kompilatorze intela. Wszystko działa na gcc i nie ma tutaj nawet śladu promocji.

Natomiast po załączonym linku domyślam się, że koledze jnk0le chodziło o promocję nie kompilatora, ale samego procesora i starą wojnę Intela z AMD.

W tym temacie się nie wypowiem, bo dawno przestałem śledzić losy AMD, ale to też nie ma nic wspólnego z kursem.

Poza tym powstał jakiś potworny offtop, zamiast o kursie Edisona, całość jest o opcjach kompilatora - mam nadzieję, że administrator usunie, albo chociaż przesunie do innego wątku wszystko co niezwiązane z kursem.

[ Dodano: 31-01-2016, 11:13 ]

Swoją drogą w dokumentacji do Edisona jest potworny bałagan. Przeróżne rzeczy można wyszukać, a powód chyba jest następujący: było kilka wersji modułu Intel Edison. Niestety wszystkie mają taką samą nazwę, więc ciężko jest się połapać, która dokumentacja dotyczy której wersji.

Z tego co znalazłem, pierwsze wersje miały jednordzeniowy procesor oparty o Pentium, stąd i586 w większości oprogramowania. Po prostu kod skompilowany dla i586 będzie też działał na nowszych wersjach.

Poniżej zrzut cpuinfo procesora, który jest zainstalowany na mojej płytce (są 2 rdzenie, zrzut tylko jednego):

processor : 0

vendor_id : GenuineIntel

cpu family : 6

model : 74

model name : Genuine Intel® CPU 4000 @ 500MHz

stepping : 8

microcode : 0x81f

cpu MHz : 500.000

cache size : 1024 KB

physical id : 0

siblings : 2

core id : 0

cpu cores : 2

apicid : 0

initial apicid : 0

fdiv_bug : no

f00f_bug : no

coma_bug : no

fpu : yes

fpu_exception : yes

cpuid level : 11

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf nonstop_tsc_s3 pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes rdrand lahf_lm 3dnowprefetch ida arat epb dtherm tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms

bogomips : 998.40

clflush size : 64

cache_alignment : 64

address sizes : 36 bits physical, 48 bits virtual

power management:

Natomiast co do wykorzystania tych możliwości to nie ma najmniejszego problemu. Wystarczy wszystko skompilować od podstaw z Yocto. Wtedy dostaniemy nie tylko optymalne ustawienia kompilatora, ale co ważniejsze cały system zostanie przekompilowany z naszymi ustawieniami.

Yocto buduje cały system, od gcc z biblioteką standardową C, przez biblioteki systemowe, aż po programy użytkowe. Więc jeśli wybierzemy zoptymalizowane opcje kompilatora, możemy uzyskać cały system działający wydajniej.

Natomiast nie jest to tematyka dla początkujących oraz nie jest związana z tym kursem.

Domyślne ustawienia dostarczane w narzędziach Intela nie są może optymalne, ale za to działają na wszystkich wersjach Edisona - do nauki powinny więc w zupełności wystarczyć.

Link do komentarza
Share on other sites

http://akizukidenshi.com/download/ds/intel/edison-module_HG_331189-002.pdf

Intel®Atom™ Processor Z34xx Series is the next generation 22 nm SoC product targeted for the smartphone market segment. The SoC contains dual IA-32 cores operating at 500 MHz.

The architecture includes 2-wide instruction decode and Out Of Order Execution with 1MB cache shared between the two CPU cores. It includes Intel SIMD Extensions 2, 3, 4 (SSE2, SSE3, SSE4.1/4.2).

Ale o jaki kompilator intela chodzi? Przecież ani w artykule, ani w jakiejkolwiek dokumentacji Edisona nie ma mowy o kompilatorze intela. Wszystko działa na gcc i nie ma tutaj nawet śladu promocji.

ICC, nawet ładny tutorial powstał dla Edisona.

https://software.intel.com/sites/default/files/managed/70/1f/Build%20and%20Debug%20Applications%20for%20Intel%20Edison_u1.pdf

A oto benchmarki przygotowane o których mowa:

https://software.intel.com/en-us/articles/use-edison-sdk-chroot-to-build-up-performance-application

tymczasem w niezależnych źródłach różnica bardzo często zawiera się w granicach błędu pomiarowego.

Nawet jak użyli tylko -O2/3 to w gcc zabrakło jawnego podania -march=core2 -msse4.2 (icc i tak niejawnie kompiluje z SSE)

Note

On Windows and Linux operating systems on IA-32 architecture, the compiler, by default, implements floating-point (FP) arithmetic using SSE2 and SSE instructions. This can cause differences in floating-point results when compared to previous x87 implementations.

Link do komentarza
Share on other sites

Jako ciekawostkę napiszę tylko, że Arduino IDE wcale nie używa -O0. Domyślne opcje:

CC_FLAGS=-m32 -march=i586 --sysroot=/p/clanton/kbfabd/xchains/1.4.1/sysroots/i586-poky-linux-uclibc -c -g -Os -Wall -ffunction-sections -fdata-sections -D__ARDUINO_X86__ -DARDUINO=153

Oczywiście można je zmienić jakby ktoś chciał.

Link do komentarza
Share on other sites

-Os -ffunction-sections -fdata-sections

Wygląda mi to na zaszłość z avr'ów gdzie atmega8 nie była łaskawa zmieścić najprostszego migania diodą na -O0 😉

No ale że to jest arduino to musiało tam się znaleźć -g z którego nikt nigdy nie skorzysta. (pewnie stąd te 72kB)

a kompilacja pod i586 to tak jak pisałem wcześniej. Na quarka nikt nie będzie pisał z poziomu Arduino bo

a) Arduino już lepiej odpalać na rdzeniu głównym.

b) Quark ma własne api z mniejszym narzutem

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.