Günlük makineler nasıl programlanır?


148

Günlük makineler (aletler, dijital saatler, vb. Kadar bilgisayarlar ve mobil cihazlar değil) nasıl programlanır? Bir Coca-Cola satış makinesinin programlamasına ne tür bir kod girilir? Kahve makinem önceden programlanmış bir zamanı nasıl kabul eder ve saatler sonra, o saat geldiğinde bir fincan kahve pişirmeye başlar?

Bu tür makinelerin içinde işletim sistemleri var mı, yoksa daha da basit bir şey mi? Assembly, C veya başka bir dilde mi yazılmışlar?

Ve bu işletim sistemlerini veya temeldeki kod sistemlerini listeleyen bir kaynak bulmak istiyorum, hatta mümkünse kaynak kodu ile bile. Böyle bir kaynağı bilen biri varsa (aramak benim için hiçbir şey vermedi), bu harika olurdu.


12
Harika soru! Ben de aynı şeyi merak ediyorum.
Jonathan Sterling

7
"Gömülü sistemler" hakkında biraz araştırma / araştırma yapın (etiketi sizin için bile ekledim).
mu çok kısa

InRe yakın oylar: Bunu Programcılar için materyal olarak görmüyorum çünkü bu programlama ile ilgili . Öte yandan, elektronik SE sitesinde iyi iş çıkarabilir, çünkü daha fazla uzman olacak. Cevap elbette yukarıdakilerin bazıları. Bir cevap alabilmek için önce daha küçük bir sınıf seçmen gerekecek.
dmckee --- eski moderatör kedicik

En az 3 mühendislik disiplinini ve aralarındaki birçok rengi kapsayan çok geniş bir soru.
Jodrell

FWIW, Arduino (~ 30 $) arduino.cc gibi bir mikrodenetleyici platformuyla oynamak ilginizi çekebilir .
steamer25

Yanıtlar:


47

Bahsettiğiniz şeylerin çoğu, C'nin çoğu zaman mevcut olmayan bir lüks olduğu gömülü tabanlı sistemlerdir. Geleneksel anlamda bir yazılımları yok. Yazılım çoğu zaman C, montaj ve hatta makine koduyla yazılır. C ve ASM, derleyicilerin bu platform için kullanmak üzere yazılmasını gerektirir. Makine kodu, derleyici olmadan ikili olarak yazılır.

Cezveniz ve bunun gibi çoğu basit sistem bir işletim sistemi taşımaz. Sadece hafızadaki bir başlangıç ​​adresinden yüklenirler ve kodunuzu oraya koyarsınız. Genellikle bu sistemlerin "kodları", sistemin sabit diski görevi gören EEPROM'lara yazılır. Komutları yaktıktan sonra kodu alt üst edin , çipleri atarak çip üzerindeki kodu yeniden yazın ve baştan başlayın. Daha yüksek uç cihazların test etmeyi, dağıtmayı vb. Kolaylaştırmak için kullandıkları daha yeni FPGA çipleri vardır, ancak bunlar aynı şeydir.

Coca-cola makineleri, yönlendiriciler vb. Genellikle QNX, EMBOS veya şanslıysanız bazen RTlinux gibi gerçek zamanlı bir işletim sistemi kullanır. Bunların çoğu, çok para karşılığında lisansladığınız tescilli işletim sistemidir, ancak C derleyicileri, donanımla çalışmak için sürücüler vb.

http://www.qnx.com/

http://www.segger.com/cms/embos.html

http://www.microsoft.com/windowsembedded/en-us/campaigns/compact7/default.aspx?WT.srch=1&WT.mc_ID=SEARCH

RTLinux


35
İkili kodlama yapan insanlar? Birleştiricilerin yazması o kadar aptalca basit ki, inanması zor buluyorum. Bunun için kaynağın mevcut mu? Ayrıca, bu cevap, tüm sistemlerin kod çalıştıran bir mikroişlemci içerdiği yanlış izlenimini veriyor. Mikrodenetleyiciler ve EEPROM (hata ayıklamayı ve yükseltmeyi kolaylaştırır) daha ucuz hale geldikçe bu daha popüler hale gelse de, çok ucuz sistemler veya son 20 yılda çok fazla değişmemiş sistemler için buna değmez. Örneğin bazı dijital saatler.
BlueRaja - Danny Pflughoeft

6
Bu çok güçlü bir şekilde ifade edilmektedir. Derleyiciyi hedefte barındırmanıza gerek yoktur. Çapraz derleyiciler, gömülü programlamada çok yaygındır.
dmckee --- eski moderatör kedicik

12
QNX çalıştıran bir kok makinesi mi? WTF - bu da başka bir tür kok! Ve evet, şu anda hacim olarak satılan her bir platform için bir C derleyicisi var. Hiç kimse assembly yazmak istemez, C eksikliği büyük bir handikap olur. (Bazı derleyiciler çok iyi değil , kabul edilir.)
Potatoswatter

8
Ayrıca, EEPROM tanımı gereği 100000+ kez yeniden yazılabilir. Bir kez yazılan bellekler artık kullanılmıyor; günümüzde tüm popüler mikro denetleyicilerde Flash var. FPGA, düşük kaliteli MCU'dan tamamen farklı bir pazar… neden bahsettiğiniz hakkında hiçbir fikriniz yok.
Potatoswatter

7
Oldukça karmaşık olan satış makinelerinde çalışan bir arkadaşım var. Hücresel radyoları var, envanteri izliyor, sıcaklığı takip ediyor, mali rakamları rapor ediyor ve tüm bu verileri bir araya getirmek için sunuculara HTTP çağrıları gönderiyorlar, böylece tüm makinelerinizde takip edebilirsiniz. Ve evet, bu marka makineler Gömülü bir işletim sistemi kullanıyor. Sanırım C kullanarak RTLinux kullanıyorlar. Yani evet, düşük otomat makinesi bile gömülü işletim sistemini garanti edecek kadar karmaşık hale geliyor.
chubbsondubs

29

Mikrodenetleyiciler kullanıyorlar , 8051 klasik olanı. Bunlar 8 bit veya 16 bit çekirdeklerdir, nadiren bir işletim sistemine sahiptirler. Programcı, yerleşik çevre birimlerini başlatmak ve kesme işleyicilerini uygulamak için kodu yazar. Kullanılan diller, montaj ve C'dir. Zorlu hata ayıklama işleri, devre içi bir emülatör gerektirir.

Bunun ötesinde, Linux ve / veya Java JVM'nin gömülü bir sürümünü başlatan 32-bit gömülü çekirdeklerle (ARM 100 poundluk gorildir) çok sayıda büyüme alanı var.


5
Bu oldukça küçük bir goril, ancak yerleşik büyük maymunlar için güç kısıtlamalarının oldukça önemli olduğunu tahmin ediyorum;)
Piskvor,

Teşekkür ederim! Cevabınız benim için yararlı oldu ve size bir olumlu oy verdim.
Josh Leitzel

ARM çipleri de düşük seviyeye giriyor ... <1USD fiyatları, 2x2mm ayak izi.
domen

24

Bunlar gömülü sistemlerdir ve C veya assembly gibi çok düşük seviyeli bir dil kullanılarak programlanacaktır. Blue-ray DVD oynatıcılar ve kablosuz yönlendiriciler gibi bazı yeni "günlük makineler", kodlarını unix tabanlı bir işletim sisteminin üzerinde çalıştırmasına rağmen, genel olarak böyle bir sistem bir işletim sistemi olmadan çalışacaktır.


Güncelleme

Başkalarının söylediklerinin yanı sıra, birçok modern gömülü sistem de bir çeşit pencere çalıştırır. Uygulamaya bağlıdır. Ayrıca, birçok alanda bir işletim sistemi ile daha güçlü bir platformda çalışma, Java çalıştırması gereken Blue-ray oynatıcılar gibi durumları ve son kullanıcının daha fazla işlevsellik istediği diğer örnekleri ele alma eğilimi vardır.


Açıklığa kavuşturmak için Bluray Java kullanıyor.
Andrew Marshall

6
Belki, ama gerçek oyuncular Linux kullanıyor ve C / C ++ ile yazılıyor
Justin Ethier

Yazar kasalar ve gaz pompaları ve benzerleri dos çalıştırıyordu (bazı markalar), ne yazık ki bunlardan bazıları şimdi pencereleri çalıştırıyor (bakkal veya diğer kendi kendine ödeme hatları). Siz gazınızı pompalarken size gürül gürül tv şovları, yoksa ekranda palavra dans etme arzusu daha fazla beygir gücüne yol açtı. Aynı şekilde kok kömürü ve iki eksen tutuculu su makineleri.
old_timer

@Justin, tabii ki, Java'nın çalışması için bir şeyin üstüne oturması gerekiyor. Demek istediğim, Java gibi yüksek seviyeli bir dili (karşılaştırmalı olarak) kullanmasıydı.
Andrew Marshall

@Andrew: Blue ray'deki Java yorumlayıcısı hangi işletim sisteminde çalışıyor? Ve bu işletim sistemi hangi dilde yazılıyor?
Gunther Piez

18

Masaüstünüzdeki işlemciyi düşünelim. Tek yaptığı makine talimatlarını çalıştırmaktır ve kendi başına "işletim sistemleri" veya "programlar" ile ilgilenmez.

Bilgisayarınızı açarsınız, işlemci ilk talimatı gösterir ve çalışmaya başlar.

Masaüstünüzde "işletim sistemi" ni çalıştırmaya başlar. Ancak, işlemcinin seçtiğiniz herhangi bir talimat setini yürütmesine izin vermemeniz için hiçbir neden yok. (Bu, sonuçları ekrana yine de çıkarmak isteyeceğinizden ve bu işlevsellik işletim sisteminde bulunduğundan, bu çok kullanışlı olmayabilir.) Aynı zamanda, makine talimatlarınız, işlemcinin çıktı vermesi için doğru işlem kodlarından oluşuyorsa monitörde bir resmi boyamak için doğru sinyal dizisi, çok daha iyi. İşletim sistemine gerek yok.

Masaüstü bilgisayarlar o kadar çok şey yapar ki, genellikle bir işletim sisteminin soyutlamasına ihtiyaç duyarız. Ancak özünde, işlemcinin yaptığı tek şey talimatları uygulamaktır.

Kola makineleri ve Kahve makinelerindeki işlemci için aynı. Tek yaptığı talimatları uygulamaktır.

Şey, makine talimatlarını parça parça yazmak sıkıcıdır. Yani, masaüstlerinde olduğu gibi, genellikle C dilinde kod yazarız ve bu daha sonra makine koduna derlenir. Bu makine kodu gömülü işlemciye yüklenir ve çalışır.

Gömülü sistemler o kadar az şey yapar ki tam işletim sistemlerine ihtiyaç duymazlar. Bir mikrodenetleyicinin çip üzerinde 8 veya 16 pin olabilir - normal CPU soketinizdeki çok sayıda pin ile karşılaştırıldığında.

Yani iş akışı bir kod yazmaktır (örneğin C'de), onu masaüstü makinenizde derleyin. Bu derleyici, gömülü çip için makine kodu üretir. Daha sonra bu kod mikroişlemciye yüklenir (ve bunu yapmak için özel bir donanıma ihtiyacınız vardır.) Sonra çipi çalıştırırsınız ve talimatları yürütmeye başlar. Basit!


2
Çok teşekkür ederim! Başka bir en iyi yanıtı seçebilseydim, bu senin olurdu. Bunu çok kullanışlı buldum. +1
Josh Leitzel

Modern işlemciler şaşırtıcı bir şekilde işletim sistemleriyle ilgileniyor. Bellek Yönetim Birimleri , ayrıcalıklı talimatlar ve modlar ve donanım sanallaştırma gibi özellikler sağlarlar . Modern işletim sistemleri bu özelliklerin bazılarına bağlıdır. Linux'u küçük mikro denetleyicilerde ( kolayca ) çalıştıramamanızın nedeni budur .
Mira Weller

12

Belirli bir işlevi yerine getiren birçok cihaz herhangi bir "kod" içermez. Elektronik bileşenlerinin özellikleri aracılığıyla işlevlerini yerine getirirler. Birçok farklı işlevi yerine getirebilen veya kolayca yükseltilebilmesi gereken daha gelişmiş sistemler, bir mikro denetleyici ve bir tür "işletim sistemi" içerecektir. Bunların hala işlevselliklerinde bazı sınırları olduğundan, işletim sistemi basit ve özel olarak tasarlanmış olacaktır. Daha da gelişmiş hale gelen cihaz, bilgisayara benzer bir şey içerecek. Sistemin farklı bölümleriyle iletişim kurabilen daha karmaşık bir işletim sistemine sahip olacak. Son olarak, kullanıcı seviyesi kodu çalıştırabilen ve daha basit cihazlara göre çok daha fazla kullanıcı girişi olan tam bir işletim sistemi içeren akıllı telefonlar gibi cihazlara ulaşırsınız. Ancak, modern işlemciler bile aslında çok büyük elektrik devreleridir. CPU'nun tanıdığı her talimat, bu işlevi gerçekleştirmek için farklı bir devrenin kullanılmasına neden olacaktır.

İşte ilginizi çekebilecek bazı Wikipedia sayfaları:

http://en.wikipedia.org/wiki/Electrical_engineering
http://en.wikipedia.org/wiki/Integrated_circuits
http://en.wikipedia.org/wiki/Electronic_engineering
http://en.wikipedia.org/wiki / Computer_engineering
http://en.wikipedia.org/wiki/Microcontroller


Bu yanlış. Düşük maliyetli yongaların maliyetinde önemli bir faktör, silikonu taşıyan pakettir. Bu nedenle, birkaç düzine kapıya ulaştığınızda ayrık mantığı bir mikro denetleyiciyle değiştirmek daha ucuzdur… ve bir düzine kapı pek bir şey yapmaz. MCU'nun her yerde bulunması, ayrık kapıların maliyetini artırarak dengeyi değiştirdi. Ayrıca, çoğu düşük kaliteli MCU, herhangi bir işletim sistemi çalıştırmaz.
Potatoswatter

7

Bu çok geniş bir soru ve büyük ölçüde makineye bağlı. Bu otomat makinelerinin çoğunun mikrodenetleyiciler (8051, PIC, ARM7, en çok kullanılanları adlandırmak için) tarafından kontrol edildiğini ve nadiren bir işletim sistemine sahip olduğunu ve varsa, bir tür RTOS olacağını tahmin edebiliyorum. FreeRTOS .

DVD / BluRay oynatıcılar veya cep telefonları gibi daha karmaşık makineler, OMAP4 gibi gelişmiş platformlar üzerinde çalışır . Genellikle bir Unix OS bunlarda çalışır.


Cevabınız için teşekkür ederim! +1
Josh Leitzel

7

Günlük cihazlarda bulunan düşük kaliteli mikro denetleyiciler tipik olarak bir işletim sistemi çalıştırmaz. Düşük maliyet için seçilirler ve maliyeti etkileyen ana faktörler, çipteki pin sayısı (bir düzineden birkaç yüze kadar) ve içerideki bellek miktarıdır (birkaç kilobayttan megabayt ROM'a, birkaç taneden) bayt'tan yüz kilobayt RAM'e kadar).

Özellik sürünmesi sihrini yerine getirirken, bir mikrodalganın çoklu görev yapması gerekebilir. Bu durumda, programcı işletim sistemi dersini geri çağırır ve gerektiği şekilde mesaj iletme, görev zamanlama, eşzamansız G / Ç vb. Uygular!

Elbette, uygunluk, basitlik, kod boyutu vb. İçin, özellikler ilkel bir şekilde yapılma eğilimindedir. Göreve özgü kod içinde genelleştirilmiş işletim sistemi işlevselliğini bulmak genellikle programı nasıl analiz ettiğinize bağlıdır. Ancak bu, sabit kodlanmış bir görev planlayıcısından bir işletim sistemine kadar uzun bir yol ve üzerinde çalışmak için yalnızca birkaç kilobaytınız olduğunda, kullanıma hazır bir işletim sistemi çözüm değildir .

Düşük kaliteli MCU'lar hakkında bilgi edinmek için popüler bir elektronik parça seçim sitesi olan DigiKey'e bir göz atın. Kahve makinesinde bulunanlar gibi, LCD denetleyicili çok ucuz bir MCU hakkındaki bilgileri burada . Programlama kılavuzunu ve her şeyi almak yeterince kolaydır.


5

Bir işletim sisteminin görevi, kaynaklara ortak erişim sağlamaktır - CPU yürütme süresi, RAM, G / Ç vb. Çoğu basit mikro denetleyici tabanlı gömülü sistem, aynı anda çalışan yalnızca bir programa sahiptir ve bu kaynaklara kendileri erişir (ve bunları yönetirler). , dolayısıyla bir işletim sistemine ihtiyaçları yoktur.

Gömülü sistemler tipik olarak C'de ve bazen aşırı zamanlama veya bellek optimizasyonu için montajda programlanır. Bazı gömülü derleyiciler, montajı daha yüksek seviyeli bir dilde yaymanıza izin verir.


4

Geçenlerde Ubuntu çalıştıran bir sigara otomatına rastladım (makine yeniden başlatılıyordu, bu yüzden logoyu görebiliyordum).



1

Genel bilgiler için etrafta dolaşıyorsanız, "gömülü sistemler", "soc" (yonga üzerinde sistem) gibi şeyleri arayın. Bu tür cihazların büyük bir kısmının C gibi düşük seviyeli dillerde çalıştığını söyleyebilirim.

Eğlenceli gerçek: Java aslında gömülü sistem programlamasına bir çözüm olarak düşünülmüştür: http://en.wikipedia.org/wiki/Oak_(programming_language )


Teşekkürler, bunları daha fazla araştıracağımdan emin olacağım! +1
Josh Leitzel

1

Çoğu Kiosk, kayıt defteri, arabaya servis ekranları ve hatta son teknoloji kahve makineleri ve mikrodalgalar aslında "Jura Impressa" serisi makineler gibi Windows XP veya Linux çalıştırır; bunlara SSH uygulayabilir ve kahve hazırlayabilirsiniz.

İşte bir kahve makinesi cron işi için bir github komut dosyası: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

Çoğu Yönlendirici, daha yeni fırınlar, daha yeni buzdolapları, arabalar, DVD oynatıcılar, çeşitli elektronik cihazlar, ampuller dahil yeni ev otomasyon ürünleri, ARM linux veya gömülü Linux'un bir sürümünü çalıştırır.

20 $ 'ın altındaki en ucuz cihazlar, daha yeniyse, ESP8266 veya benzeri bir cihazda çalışır (LUA veya azaltılmış bir Node sunucusunu toplu olarak 2 $' a çalıştırabilir - inanılmaz ucuz)

http://nodemcu.com/index_en.html

FPGA ve 8051, Z80 gibi gömülü sistemler veya PICC, AVR ve Arduino gibi diğer gömülü cihazların kullanılması, yakında ESP8266 gibi hepsi bir arada / SoC (Yonga Üzerinde Sistem) sistemlerle değiştirilecek. Programlanması çok kolaydır ve kendi web sunucularını çalıştıran bir çip üzerinde eksiksiz bir sistemdir; sadece onları güçlendirirsiniz, kaynak kodunuzu yüklersiniz ve 2 $ karşılığında ağa bağlı bir sunucunuz olur.

PICC, AVR ve 8051'i kodlayarak büyüdüm ve gittiklerini görmekten üzüldüm, ancak yıllardır ESP8266es dışında hiçbir şeye dokunmadım çünkü bunlar fiyatın 1 / 10'u ve çalışması daha kolay. . Bunları, batarya paketleri ve patlatılmış pin düzenleri olan geliştirme panolarına ebay'de 5 ABD doları veya adafruit'ta 10 ABD doları karşılığında alabilirsiniz.


-2

Bir mühendisten Siemens Hafif Raylı Banliyö Trenlerinin 386'larda çalıştığını duydum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.