Pytanie:
Czy są dostępne jakieś programowalne urządzenia dla nowocześniejszych języków?
arussell84
2011-05-21 12:01:20 UTC
view on stackexchange narkive permalink

Przepraszam, moja naiwność, ale wygląda na to, że większość programowalnych urządzeń (FPGA, PLC, PIC, itp.) można programować przy użyciu języków C lub C ++ lub jednego z wariantów jednego z nich. Czy są jakieś urządzenia, które używają czegoś takiego jak D, Mozilla Rust lub Google Go? Zdaję sobie sprawę, że szczególnie te dwa ostatnie są językami niedojrzałymi; ale na pewno ktoś gdzieś wypuścił eksperymentalny produkt.

Czy ktoś ma jakieś sugestie?

Lubisz Forth? To popularny język dla urządzeń wbudowanych. Niedawno pojawił się artykuł [tutaj] (http://www.forth.org/lost-at-c.html) i dyskusja na temat Hacker News [tutaj] (http://news.ycombinator.com/item?id= 2574204), z bardzo pouczającymi komentarzami. W tej chwili nie mam jednak czasu, aby przynosić cokolwiek z tego tutaj. Jeśli ktoś chciałby przekształcić te informacje w odpowiedź, byłbym bardzo zobowiązany!
@reemrevnivek Dzisiaj widziałem ten artykuł i nie sądzę, że Forth pasuje do mojego osobistego gustu, ale zdecydowanie dziękuję za udostępnienie tego!
@arussell - Tak, nie byłem pewien, czy pasuje do formy D, Rust czy Go.
Co współczesne języki wniosłyby do (naprawdę) programowania osadzonego? PS. W tym kontekście przez programowanie osadzone mam na myśli programowanie, w którym Cortex-M3 to krzycząca bestia wydajności i zawsze używasz tylko wbudowanej pamięci SRAM i Flash.
powiązane: [Jakie są dobre opcje rozpoczęcia programowania sprzętu przy użyciu języków wysokiego poziomu?] (http://stackoverflow.com/questions/366991/what-are-good-options-for-beginning-hardware-programming-using-high -level-language)
powiązane: [Jakie są dostępne interaktywne języki, które działają w małej pamięci?] (http://stackoverflow.com/questions/1082751/what-are-the-available-interactive-languages-that-run-in-tiny-memory )
@davidcary Szukałem bardziej odpowiedzi na temat języków programowania systemu niż języków wyższego poziomu lub języków interpretowanych, ale w tych linkach wciąż jest kilka dobrych informacji. Dzięki.
@jpc Wydaje mi się, że zamiast być naprawdę zaciekawionym, po prostu sugerujesz, że nie jesteś zainteresowany odpowiedziami na moje pytanie. Jeśli nie interesuje Cię nic poza C, możesz po prostu zignorować moje pytanie. W przeciwnym razie chętnie odpowiem na bardziej szczegółowe pytania.
@arussell84: Jestem szczerze zainteresowany odpowiedzią zarówno na Twoje, jak i na moje. Ponadto: uwierz mi, że naprawdę mam dość zwykłego C w programowaniu wbudowanym. Uważam, że w dziedzinie wbudowanych języków programowania jest wiele do zrobienia, ale nie wierzę, że „normalne” języki programowania dla dużych komputerów zapewnią wiele z tych ulepszeń. Dlatego zapytałem, jak oczekujesz od nich pomocy.
@jpc W takim razie proszę o wyrozumiałość, ponieważ komentarze mogą mieć tylko tyle znaków. D ma być ulepszeniem C ++. Nie mam na myśli wyższego poziomu, takiego jak C # czy Java. Nadal można ręcznie zarządzać pamięcią i używać wskaźników. Przeczytaj [D przegląd] (http://www.digitalmars.com/d/2.0/overview.html). Dwie funkcje, które mnie szczególnie interesują, to zamknięcia i funkcje anonimowe. Uważam, że Go i Rust mogą stać się popularne, ale w rzeczywistości mogą nie być odpowiednie dla urządzeń wbudowanych. Za wcześnie, żeby powiedzieć. Jednak Objective-C może zadziałać; Nie patrzyłem.
Zawsze miałam wrażenie, że zamknięcia bez wywozu śmieci to ból. Może powinieneś spojrzeć na bloki (ostatnia funkcja LLVM od Apple). Możesz sprawdzić Objective-C, ponieważ ma kilka fajnych zamienników dla domknięć (protokół celu / akcji) i uważam, że libobjc, który jest przyjazny dla systemów wbudowanych, nie byłby zbyt duży. OTOH, kiedy zaczniesz pisać takie rzeczy jak serwery HTTP lub inne (gdzie uważam, że dynamiczne wiązanie i nowoczesne języki są najbardziej przydatne), szybko zabraknie Ci pamięci z lub bez nowoczesnego języka.
Dziewięć odpowiedzi:
starblue
2011-05-21 17:12:20 UTC
view on stackexchange narkive permalink

Nie potrzebujesz różnych urządzeń do korzystania z tych języków, wystarczy odpowiedni system oprogramowania.

Główne problemy, dla których nie jest to wykonywane częściej, to:

  • Te języki zazwyczaj wymagają więcej zasobów (pamięci, czasu wykonania) do tego samego zadania. W przypadku dużych wolumenów zmniejszony wysiłek programistyczny byłby więcej niż zrównoważony wyższymi kosztami sprzętu.

  • Większość języków wyższego poziomu wymaga dynamicznej alokacji pamięci z wyrzucaniem elementów bezużytecznych, co jest trudne do wykonania w czasie rzeczywistym.

  • Trudniej jest znaleźć programistów osadzonych dla tych języków.

To powiedziawszy, istnieją takie rzeczy, jak Java czasu rzeczywistego, które są używane w prawdziwych systemach wbudowanych.

Twoja odpowiedź nie podała wszystkich szczegółów, których szukałem, ale ostatecznie doprowadziła mnie do mojej odpowiedzi. Biorąc na przykład PIC, istnieje wiele etapów między procesem pisania kodu na komputerze a uruchomieniem tego kodu na PIC. Musisz go skompilować i przesłać, a nawet to zrobić na różne sposoby. Aby, powiedzmy, pisać z D dla PIC, ktoś musiałby napisać odpowiednik [SDCC] (http://sdcc.sourceforge.net/) dla D.
Dodatkowa uwaga: w systemach wbudowanych (szczególnie małych bez systemu operacyjnego itp.) Wiele funkcji (i narzutów / kar) języków wyższego poziomu / nowocześniejszych jest w najlepszym przypadku nieistotnych lub w rzeczywistości niepożądanych.
Dr. Watson
2011-05-21 17:18:43 UTC
view on stackexchange narkive permalink

Istnieją projekty open source, które pracują nad takimi celami. Jest projekt dla Ady na mikrokontrolerach Atmel (choć nie mogłem go uruchomić). Jeden z moich współpracowników programuje swój MCU 68HC11 z pomniejszoną wersją Rubiego, nad którą sam pracował. Jest też firma BlueSpec, która ma nowy HDL dla układów FPGA / ASIC oparty na Haskell. Ale nie jest to narzędzie, do którego większość miałaby dostęp.

Sprzedawcy zwykle trzymają się C, ponieważ C ma wielu odbiorców i jest ono powszechnie akceptowane. Podobnie w przypadku układów FPGA / PLD, VHDL / Verilog są powszechnie akceptowane i sprawdzone. Zamiast obsługiwać wiele różnych języków, większość woli skupić się na swoich chipach, próbując poprawić wydajność swoich kompilatorów C i zaoferować lepsze narzędzia do konfigurowania i zarządzania zasobami na swoich chipach. Sam w pewnym sensie zgadzam się z tym podejściem. O wiele bardziej wolę, aby firma Texas Instruments ulepszyła swoje narzędzia do konfigurowania zaawansowanych urządzeń peryferyjnych w swoich układach niż implementacja zaawansowanego metaprogramowania szablonów na minimalnym kompilatorze C ++.

Gorgen
2011-05-21 14:08:15 UTC
view on stackexchange narkive permalink

Jesteś ułaskawiony.

Powodem, dla którego C, a mniej C ++ (między innymi językami jak VHDL) jest używany w tego typu urządzeniach, jest to, że łatwo jest przetłumaczyć konstrukcje językowe na sprzęt bazowy. C jest uważane za lingua franca, rozumiane przez wielu i przenoszenie nowego języka do urządzenia, zwłaszcza jeśli czytanie / zapisywanie do rejestrów jest niewygodne, nie jest warte wysiłku, jeśli język nie jest dużo lepszy w wyrażaniu użytecznych konstrukcji.

Przykłady, których używasz jako nowsze, bardziej błyszczące języki, na przykład D, mogą być kandydatami na język „niskiego poziomu”, jeśli używa go więcej programistów. D jest reklamowany jako nowoczesny C ++ bez kompromisów z C i implementowany od samego początku. Niestety bez wszystkich bibliotek C ++. Myślę, że możesz zadzwonić do bibliotek C z D.

Pytanie nie brzmi, czy jest nowsze, ale czy są lepszymi narzędziami. O ile widzę, tak nie jest.
edytuj
Kiedy napisałem kod osadzony (w C), chciałem mieć lepsze makra / szablony niż C oferta. Ponieważ jest to konstrukcja czasu kompilacji, tak naprawdę nie ma ona nic wspólnego z podstawowym sprzętem. Ale dużo bardziej skomplikowane do zaimplementowania w kompilatorze.

Możesz użyć zewnętrznego procesora makr, takiego jak m4. Jest bardzo potężny.
Odkryłem, że chciałbym mieć możliwość przeciążania funkcji wbudowanych na podstawie tego, czy kompilator może ocenić parametr jako stałą. W funkcji takiej jak „podnieś x do potęgi y” warto byłoby zastosować wbudowaną wersję do specjalnych potęg stałych od 0 do 3 i wywołać funkcję biblioteczną dla innych potęg. Jednak nie warto byłoby generować wbudowanego kodu do testowania tych stałych. Niestety, nie znam żadnych kompilatorów dla żadnego języka, który potrafiłby rozróżnić przeciążenia na podstawie stałych wartości.
@supercat: Możesz specjalizować się w szablonach w C ++, aby rozwiązać niektóre z tych problemów, ale robiąc to, twoje argumenty muszą znajdować się w instancji szablonu „<>” zamiast argumentów funkcji „()”, co nie jest idealne.Nie możesz mieć ciasta i też go zjeść.
Leon Heller
2011-05-21 14:06:00 UTC
view on stackexchange narkive permalink

Urządzenia zostały zaprojektowane do efektywnego używania innych języków, takich jak LISP / Scheme, Forth i Java. Nie sądzę, aby którykolwiek z nich został zaprojektowany dla tych języków, o których wspomniałeś, być może nie są one odpowiednie dla systemów wbudowanych (poza D, które powinno działać wydajnie na wszystkim, co zostało zaprojektowane dla C / C ++). Można je przypuszczalnie zaimplementować na dowolnym odpowiednim MCU, gdyby ktoś chciał to zrobić.

Być może Go i Rust ostatecznie nie będą odpowiednie do programowania wbudowanego. Sądzę, że są trochę nowe, ale twierdzą, że są językami programowania systemów, dlatego wymieniłem je jako przykłady. Ostatnio w kręgach programistów pojawiły się również wiadomości dotyczące tych języków, więc starałem się wybrać języki, które nie były zbyt niejasne.
jamesotron
2011-05-24 09:18:51 UTC
view on stackexchange narkive permalink

Zawsze jest netduino, które umożliwia programowanie w .NET.

Nie jestem fanem .NET, ale właśnie tego szukałem. =)
Peter Gibson
2014-06-19 16:50:32 UTC
view on stackexchange narkive permalink

Spójrz na Micro Python http://micropython.org/

Micro Python to oszczędna i szybka implementacja języka programowania Python 3, która jest zoptymalizowany do pracy na mikrokontrolerze. Płytka Micro Python to mała elektroniczna płytka drukowana obsługująca język Micro Python.

Została pomyślnie sfinansowana jako kickstarter projekt w grudniu 2013 r. I ma tablica referencyjna.

Philippe
2011-05-21 18:03:21 UTC
view on stackexchange narkive permalink

Szukasz mikroprocesora. Sprzedaje je Intel, podobnie jak AMD i ARM. Na tych urządzeniach możesz używać dowolnego języka programowania.

Jeśli chodzi o układy FPGA: wybór języków jest ograniczony. Dzieje się tak, ponieważ potrzebujesz narzędzia do syntezy, które przetłumaczy twój kod na listę sieci. Oprócz VHDL, Verilog i (ograniczone C), możesz korzystać z bardziej nowoczesnych języków, takich jak MyHDL (zbudowany na Pythonie) lub Bluespec (podobny do Haskella).

Mikrokontrolery to po prostu mikroprocesory małej mocy ze zintegrowanymi urządzeniami peryferyjnymi. Nie możesz uruchomić żadnego starego języka programowania na FPGA (z miękkim rdzeniem, jak sądzę zakładamy) lub mikrokontrolerze, ponieważ są one zbyt wolne, zbyt małe i zbyt niskie, aby inne języki działały dobrze (i w związku z tym nie mają kompilatorów napisanych dla tych języków. Mikroprocesor kontra mikrokontroler nie jest rozróżnieniem, które nas tutaj interesuje.
Nie powiedziałem mikrokontrolera, powiedziałem mikroprocesor, który obejmuje mikrokontrolery, ale także zwykły procesor Intel Core i7. Jeśli chodzi o FPGA z miękkimi lub twardymi rdzeniami; są dostępne w wielu różnych rozmiarach i tak, mogą obsługiwać każdy język. Obsługują cały system operacyjny Linux.
Twój cytat z Intela przypomina mi ten stary układ: 8052AH-BASIC.http://www.dusko-lolic.from.hr/i8052fract/sbc1.jpg.Miał interpreter języka BASIC w ROM!
Johan
2011-05-24 18:47:53 UTC
view on stackexchange narkive permalink

Po pierwsze, twoje przykłady to małe urządzenia, które mają ograniczony zestaw zasobów, następnie stare języki, które są bliskie sprzętowi, takie jak c i vhdl, dobrze sobie radzą.

Nowe „fajne” języki potrzebują więcej zasoby, aby działały dobrze, więc przypuszczam, że to, czego szukasz, pojawi się wkrótce, ponieważ MCU staje się z czasem coraz potężniejsze.

Chodzi mi o to, że większość MCU jest nadal zaprogramowana w C, a fajny facet właśnie zaczął bawić się C ++ na tych urządzeniach.

Ale jeśli spojrzysz na 32-bitowy MCU oparty na ARM, który ma o wiele więcej zasobów niż stare 8-bitowe, może znaleźć szalony projekt, taki jak eLua, który próbuje uruchomić język skryptowy lua na mcu opartym na Cortex-M3 ...

Tak więc dotrzemy, ale to zajmie jeszcze kilka lat i nie sądzę, aby którykolwiek z tych szalonych projektów był (jeszcze) gotowy do użytku produkcyjnego, ale niektóre z nich będą, ponieważ szybciej rozwijają się w językach o wyższym poziomie abstrakcji.

Unslander Monica
2014-10-06 21:23:20 UTC
view on stackexchange narkive permalink

Istnieje aplikacja proof-of-concept działająca w ramach Rust na mikrokontrolerach ARM STM32F4xx. Zaskakująco drobne zmiany niezbędne do przeniesienia Rusta są dostępne w tym rozwidleniu Rusta.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...