Máy móc hàng ngày được lập trình như thế nào?


147

Các máy móc hàng ngày (không quá nhiều máy tính và thiết bị di động như thiết bị, đồng hồ kỹ thuật số, v.v.) được lập trình như thế nào? Những loại mã nào đi vào lập trình của máy bán hàng tự động Coca-Cola? Làm thế nào để máy pha cà phê của tôi chấp nhận thời gian được lập trình sẵn và bắt đầu pha một bình cà phê sau đó, khi thời điểm đó đến?

Những loại máy này có hệ điều hành bên trong chúng, hay nó là một cái gì đó thậm chí còn cơ bản hơn? Chúng được viết bằng hội, C, hoặc một số ngôn ngữ khác?

Và, tôi thực sự muốn tìm một số tài nguyên liệt kê các hệ điều hành này hoặc các hệ thống mã cơ bản, thậm chí có thể với mã nguồn nếu có thể. Nếu bất cứ ai biết về một tài nguyên như vậy (tìm kiếm không mang lại kết quả gì cho tôi), điều đó thật tuyệt vời.


12
Câu hỏi tuyệt vời! Tôi đã tự hỏi điều tương tự bản thân mình.
Jonathan Sterling

7
Thực hiện một số tìm kiếm / nghiên cứu về "hệ thống nhúng" (tôi thậm chí đã thêm thẻ cho bạn).
mu quá ngắn

InRe phiếu bầu gần: Tôi không xem đây là tài liệu cho Lập trình viên vì đó là về lập trình . Mặt khác, nó có thể hoạt động tốt trên trang SE điện tử, đơn giản vì sẽ có nhiều chuyên gia hơn. Câu trả lời, tất nhiên, là một số trong tất cả các bên trên. Bạn sẽ cần chọn một lớp học nhỏ hơn trước khi bạn có thể nhận được một câu trả lời.
dmckee --- ex-moderator mèo con

Câu hỏi rất rộng của nó bao gồm ít nhất 3 ngành kỹ thuật và nhiều sắc thái khác nhau.
Jodrell

FWIW, bạn có thể thích chơi với một nền tảng vi điều khiển như Arduino (~ $ 30) arduino.cc .
hấp25

Câu trả lời:


47

Hầu hết những gì bạn đang nói đến là các hệ thống dựa trên nhúng trong đó C là một thứ xa xỉ thường không có sẵn. Họ không có phần mềm theo nghĩa truyền thống. Hầu hết thời gian phần mềm được viết bằng C, lắp ráp hoặc thậm chí mã máy. C và ASM yêu cầu trình biên dịch được viết để sử dụng chúng cho nền tảng đó. Mã máy được viết dưới dạng trình biên dịch w / oa nhị phân.

Bình cà phê của bạn và hầu hết các hệ thống đơn giản như thế không mang theo hệ điều hành. Họ chỉ cần tải từ một địa chỉ bắt đầu trong bộ nhớ và bạn đặt mã của mình ở đó. Thông thường các hệ thống này có "mã" được ghi vào EEPROMS hoạt động như ổ cứng của hệ thống. Vặn mã sau khi đốt proms, ném chip đi đảo ngược mã trên chip và bắt đầu lại. Có những con chip mới hơn mà các thiết bị cao cấp hơn sử dụng để thử nghiệm, triển khai, v.v. dễ dàng hơn, nhưng chúng là cùng một thứ.

Các máy Coca-cola, bộ định tuyến, v.v ... thường sử dụng HĐH thời gian thực như QNX, EMBOS hoặc đôi khi RTlinux nếu bạn may mắn. Hầu hết trong số này là hệ điều hành độc quyền mà bạn cấp phép cho rất nhiều tiền, nhưng họ có trình biên dịch C, trình điều khiển để làm việc với phần cứng, v.v.

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
Người ta mã hóa nhị phân? Các nhà lắp ráp rất đơn giản để viết, tôi thấy điều đó thật khó tin. Bạn có một nguồn cho việc này? Ngoài ra, câu trả lời này mang lại ấn tượng sai lầm rằng tất cả các hệ thống đều chứa bộ vi xử lý chạy mã. Mặc dù điều này đang trở nên phổ biến hơn khi các bộ vi điều khiển và EEPROM (giúp việc gỡ lỗi và nâng cấp dễ dàng hơn) trở nên rẻ hơn, nhưng nó vẫn không xứng đáng với các hệ thống rất rẻ hoặc các hệ thống không thay đổi nhiều trong 20 năm qua. Ví dụ, một số đồng hồ kỹ thuật số.
BlueRaja - Daniel Pflughoeft

6
Điều này chỉ đơn giản là quá mạnh mẽ tuyên bố. Bạn không cần phải lưu trữ trình biên dịch trên mục tiêu. Trình biên dịch chéo rất phổ biến trong lập trình nhúng.
dmckee --- ex-moderator mèo con

12
Một máy coke chạy QNX? WTF - đó là một loại than cốc khác! Và vâng, có một trình biên dịch C cho mọi nền tảng duy nhất hiện đang vận chuyển về khối lượng. Không ai muốn viết lắp ráp, thiếu C sẽ là một khuyết tật rất lớn. (Một số trình biên dịch không tốt lắm , được cấp.)
Potatoswatter

8
Ngoài ra, EEPROM theo định nghĩa có thể được viết lại hơn 100000 lần. Ký ức một lần đã lỗi thời; tất cả các vi điều khiển phổ biến hiện nay đều có Flash. FPGA là một thị trường hoàn toàn khác với MCU cấp thấp, bạn không biết bạn đang nói về cái gì.
Potatoswatter

7
Tôi có một người bạn làm việc trên các máy bán hàng tự động khá phức tạp. Họ có radio di động, theo dõi hàng tồn kho, theo dõi nhiệt độ, báo cáo số liệu tài chính và gửi các cuộc gọi HTTP trở lại máy chủ để tổng hợp tất cả dữ liệu này để bạn có thể theo dõi trên tất cả các máy của mình. Và vâng, những thương hiệu máy móc này đang sử dụng HĐH nhúng. Tôi nghĩ rằng họ đang sử dụng RTLinux bằng C. Vì vậy, ngay cả máy bán hàng tự động thấp cũng trở nên đủ phức tạp để đảm bảo hệ điều hành nhúng.
chubbsondub

29

Họ sử dụng vi điều khiển, 8051 là loại cổ điển. Đây là các lõi 8 bit hoặc 16 bit, chúng hiếm khi có hệ điều hành. Lập trình viên viết mã để khởi tạo các thiết bị ngoại vi trên bo mạch và thực hiện các trình xử lý ngắt. Các ngôn ngữ được sử dụng là lắp ráp và C. Công việc gỡ lỗi khó khăn đòi hỏi một trình giả lập trong mạch.

Có rất nhiều phòng đang phát triển vượt xa điều này, với các lõi nhúng 32 bit (ARM là con khỉ đột 100 pound) khởi động phiên bản nhúng của Linux và / hoặc Java JVM.


5
Đó là một con khỉ đột khá nhỏ, nhưng tôi đoán những hạn chế về sức mạnh khá quan trọng với những con vượn lớn được nhúng;)
Piskvor rời khỏi tòa nhà vào

Cảm ơn bạn! Câu trả lời của bạn rất hữu ích với tôi và tôi đã đưa cho bạn một upvote.
Josh Leitzel

Các chip ARM cũng đang vào cấp thấp ... với giá <1USD, dấu chân 2x2mm.
domen

24

Đây là những hệ thống nhúng và sẽ được lập trình bằng ngôn ngữ cấp thấp như C hoặc lắp ráp. Nhìn chung, một hệ thống như vậy sẽ chạy mà không cần hệ điều hành, mặc dù một số "máy hàng ngày" mới hơn như đầu DVD tia xanh và bộ định tuyến không dây chạy mã của chúng trên hệ điều hành unix.


Cập nhật

Dọc theo những gì người khác đã nói, nhiều hệ thống nhúng hiện đại cũng chạy một hương vị của các cửa sổ. Nó phụ thuộc vào ứng dụng. Ngoài ra, có nhiều xu hướng chạy trên nền tảng mạnh hơn với hệ điều hành, để xử lý các trường hợp như trình phát tia xanh cần chạy Java và các trường hợp khác mà người dùng cuối mong muốn nhiều chức năng hơn.


Để làm rõ, Bluray sử dụng Java.
Andrew Marshall

6
Có lẽ, nhưng những người chơi thực tế chạy Linux và được viết bằng C / C ++
Justin Ethier

Máy tính tiền và máy bơm xăng và những thứ tương tự đang chạy dos (một số nhãn hiệu), đáng buồn là một số trong số đó chạy cửa sổ bây giờ (cửa hàng tạp hóa hoặc các dòng tự kiểm tra khác). Mong muốn có các chương trình truyền hình thổi vào bạn trong khi bạn bơm xăng, và nhảy baloney trên màn hình khi không, đã dẫn đến nhiều mã lực hơn. Tương tự như vậy, than cốc và máy nước với bộ lấy hai trục.
old_timer

@Justin, vâng, tất nhiên, Java cần phải ngồi trên một cái gì đó để hoạt động. Quan điểm của tôi là nó sử dụng một ngôn ngữ cấp cao (tương đối) như Java.
Andrew Marshall

@Andrew: Và trình thông dịch Java trong tia xanh chạy trên hệ điều hành nào? Và trong ngôn ngữ đó là hệ điều hành được viết?
Gunther Piez

18

Hãy nghĩ về bộ xử lý trong máy tính để bàn của bạn. Tất cả những gì nó làm là chạy các hướng dẫn máy, và bản thân nó, không thực sự quan tâm đến "hệ điều hành" hay "chương trình".

Bạn bật máy tính lên, bộ xử lý chỉ vào hướng dẫn đầu tiên và nó bắt đầu thực thi.

Trên máy tính để bàn của bạn, nó bắt đầu thực thi "hệ điều hành". Nhưng không có lý do gì mà bạn không thể có bộ xử lý thực thi bất kỳ bộ hướng dẫn nào bạn đã chọn. (Điều này có thể không hữu ích lắm, vì bạn vẫn muốn xuất kết quả ra màn hình và chức năng đó nằm trong HĐH.) Đồng thời, nếu hướng dẫn máy của bạn bao gồm các opcode bên phải để bộ xử lý sẽ xuất chuỗi tín hiệu chính xác để vẽ một hình ảnh trên màn hình, tất cả đều tốt hơn. Không cần hệ điều hành.

Máy tính để bàn làm rất nhiều thứ mà chúng ta thường yêu cầu sự trừu tượng của một hệ điều hành. Nhưng tại cốt lõi của nó, tất cả các bộ xử lý làm là thực hiện các hướng dẫn.

Tương tự cho bộ xử lý trong máy Coke và máy Cà phê. Tất cả nó làm là thực hiện hướng dẫn.

Chà, viết hướng dẫn máy từng chút một là tẻ nhạt. Vì vậy, giống như với máy tính để bàn, chúng ta thường viết mã bằng C, sau đó được biên dịch thành mã máy. Mã máy đó được tải vào bộ xử lý nhúng và nó chạy.

Các hệ thống nhúng làm rất ít đến mức chúng không cần hệ điều hành đầy đủ. Một bộ vi điều khiển có thể có 8 hoặc 16 chân trên chip - so với điểm số của các chân trong ổ cắm CPU thông thường của bạn.

Vì vậy, quy trình làm việc là viết một số mã (giả sử bằng C), biên dịch nó trên máy tính để bàn của bạn. Trình biên dịch đó tạo mã máy cho chip nhúng. Sau đó, mã đó được tải vào bộ vi xử lý (và bạn cần phần cứng đặc biệt để làm điều này.) Sau đó, bạn cấp nguồn cho chip và nó bắt đầu thực hiện các hướng dẫn. Đơn giản!


2
Cảm ơn bạn rất nhiều! Nếu tôi có thể chọn một câu trả lời hay nhất, nó sẽ là của bạn. Tôi tìm thấy nó rất hữu ích. +1
Josh Leitzel

Bộ xử lý hiện đại đáng quan tâm nhiều về hệ điều hành. Họ cung cấp các tính năng như Đơn vị quản lý bộ nhớ , hướng dẫn và chế độ đặc quyềnảo hóa phần cứng . Hệ điều hành hiện đại phụ thuộc vào một số tính năng này. Đó là lý do tại sao bạn không thể ( dễ dàng ) chạy linux trên các bộ vi điều khiển nhỏ.
Mira Weller

12

Nhiều thiết bị thực hiện một chức năng cụ thể không chứa bất kỳ "mã" nào. Họ thực hiện các chức năng của mình thông qua các thuộc tính của các thành phần điện tử của họ. Các hệ thống tiên tiến hơn, có thể thực hiện nhiều chức năng khác nhau hoặc cần dễ dàng nâng cấp, sẽ chứa một bộ vi điều khiển và một số "hệ điều hành". Vì chúng vẫn có một số giới hạn đối với chức năng của chúng, nên hệ điều hành sẽ được thiết kế đơn giản và đặc biệt. Thậm chí còn tiên tiến hơn, thiết bị sẽ chứa thứ gì đó tương tự máy tính. Nó sẽ có một hệ điều hành phức tạp hơn có thể giao tiếp với các bộ phận khác nhau của hệ thống. Cuối cùng, bạn tiếp cận các thiết bị như điện thoại thông minh, chứa hệ điều hành đầy đủ có thể chạy mã cấp độ người dùng và có nhiều người dùng nhập hơn so với các thiết bị đơn giản hơn. Tuy nhiên, ngay cả các bộ xử lý hiện đại về cơ bản là các mạch điện rất lớn. Mỗi lệnh mà CPU nhận ra sẽ khiến một mạch khác nhau được sử dụng để thực hiện chức năng đó.

Dưới đây là một số trang Wikipedia bạn có thể quan tâm:

http://en.wikipedia.org/wiki/Electric_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/Microcontler


Cái này sai. Một yếu tố chính trong chi phí của chip giá rẻ là gói mang silicon. Vì lý do này, sẽ rẻ hơn khi thay thế logic rời rạc bằng vi điều khiển một khi bạn có được vài chục cổng hoặc vì vậy, và một chục cổng không làm được gì nhiều. Sự phổ biến của MCU đã thúc đẩy chi phí của các cổng rời rạc, thay đổi số dư. Ngoài ra, hầu hết các MCU cấp thấp không chạy bất kỳ loại hệ điều hành nào.
Potatoswatter

7

Đó là một câu hỏi rất rộng và nó phụ thuộc rất nhiều vào máy. Tôi chỉ có thể đoán rằng phần lớn các máy bán hàng tự động này được điều khiển bởi các bộ vi điều khiển (8051, PIC, ARM7, để đặt tên cho một số được sử dụng nhiều nhất) và hiếm khi có HĐH và nếu có, nó sẽ là một loại RTOS, chẳng hạn như FreeRTOS .

Các máy phức tạp hơn, chẳng hạn như đầu DVD / BluRay hoặc điện thoại di động chạy trên các nền tảng tinh vi, chẳng hạn như OMAP4 . Thông thường một hệ điều hành Unix chạy trên chúng.


Cảm ơn bạn vì câu trả lời! +1
Josh Leitzel

7

Các bộ vi điều khiển cấp thấp được tìm thấy trong các thiết bị hàng ngày thường không chạy hệ điều hành. Chúng được chọn với chi phí thấp và các yếu tố chính thúc đẩy chi phí là số lượng chân trên chip (từ vài chục đến vài trăm) và dung lượng bộ nhớ bên trong (từ vài kilobyte đến ROM megabyte, từ một vài byte đến một trăm kilobyte RAM).

Vì tính năng creep hoạt động kỳ diệu, điều đó xảy ra là lò vi sóng có thể cần đa nhiệm. Trong trường hợp này, lập trình viên nhớ lại khóa học hệ điều hành của họ và thực hiện chuyển tin nhắn, lập lịch tác vụ, I / O không đồng bộ, vv khi cần thiết!

Tất nhiên, vì lợi ích của sự nhanh chóng, đơn giản, kích thước mã, v.v., các tính năng có xu hướng được thực hiện một cách thô sơ. Thông thường, nó phụ thuộc vào cách bạn phân tích chương trình, để tìm chức năng HĐH tổng quát trong mã dành riêng cho tác vụ. Nhưng đó là một chặng đường dài từ một bộ lập lịch tác vụ được mã hóa cứng đến một hệ điều hành và khi bạn chỉ có một vài kilobyte để làm việc, một hệ điều hành ngoài luồng không phải là giải pháp.

Hãy xem DigiKey, một trang web lựa chọn linh kiện điện tử phổ biến, để tìm hiểu về MCU cấp thấp. Dưới đây là thông tin của họ về MCU rất rẻ với bộ điều khiển LCD, chẳng hạn như có thể được tìm thấy trong máy pha cà phê. Nó đủ dễ dàng để có được hướng dẫn lập trình và mọi thứ.


5

Công việc của một hệ điều hành là cung cấp quyền truy cập chung vào các tài nguyên - thời gian thực hiện CPU, RAM, I / O, v.v. Hầu hết các hệ thống nhúng dựa trên vi điều khiển đơn giản chỉ có một chương trình chạy cùng lúc và chúng tự truy cập (và quản lý) các tài nguyên này , do đó họ không cần một hệ điều hành.

Các hệ thống nhúng thường được lập trình bằng C và đôi khi được lắp ráp để tối ưu hóa thời gian hoặc bộ nhớ. Một số trình biên dịch nhúng cho phép bạn xen kẽ lắp ráp trong một ngôn ngữ cấp cao hơn.


4

Gần đây tôi đã bắt gặp một máy bán thuốc lá chạy Ubuntu (máy đang khởi động lại, vì vậy tôi có thể thấy logo).



1

Nếu bạn đang tìm kiếm thông tin chung, hãy tìm những thứ như "hệ thống nhúng", "soc" (hệ thống trên chip). Tôi muốn nói rằng một phần lớn các loại thiết bị này chạy bằng các ngôn ngữ cấp thấp, chẳng hạn như C.

Sự thật thú vị: Java ban đầu được hình thành như một giải pháp cho lập trình hệ thống nhúng: http://en.wikipedia.org/wiki/Oak_(programming_lingu )


Cảm ơn, tôi chắc chắn sẽ nghiên cứu thêm! +1
Josh Leitzel

1

Hầu hết các ki-ốt, thanh ghi, màn hình ổ đĩa, và thậm chí cả máy pha cà phê và lò vi sóng cao cấp thực sự chạy Windows XP hoặc Linux, như các dòng máy "Jura Impressa"; bạn có thể SSH vào chúng và pha cà phê.

Đây là tập lệnh github của công việc cron máy pha cà phê: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

Hầu hết các Bộ định tuyến, lò mới hơn, tủ lạnh mới hơn, ô tô, đầu DVD, thiết bị điện tử khác nhau, các sản phẩm tự động hóa gia đình mới hơn bao gồm bóng đèn, chạy phiên bản ARM linux hoặc Linux nhúng.

Hầu hết các thiết bị rẻ hơn, dưới 20 đô la, nếu chúng mới hơn, chạy trên ESP8266 hoặc thiết bị tương tự (có thể chạy LUA hoặc máy chủ Node giảm với số lượng lớn 2 đô la - cực kỳ rẻ)

http://nodemcu.com/index_en.html

Sử dụng các hệ thống nhúng và các hệ thống nhúng như 8051, Z80 hoặc các thiết bị nhúng khác như PICC, AVR và Arduino sẽ sớm được thay thế bằng các hệ thống tất cả trong một / SoC (System on Chip) như ESP8266. Chúng đơn giản là quá dễ để lập trình và là một hệ thống hoàn chỉnh trên một con chip chạy máy chủ web của riêng chúng; bạn chỉ cần cấp nguồn cho chúng, tải lên mã nguồn của bạn và bạn có một máy chủ được nối mạng với giá 2 đô la.

Tôi đã lớn lên mã hóa PICC và AVR và 8051, và tôi rất buồn khi thấy chúng đi, nhưng tôi đã không chạm vào bất cứ thứ gì khác ngoài ESP8266 trong những năm qua vì chúng có giá bằng 1/10 và là một đơn đặt hàng dễ dàng hơn để làm việc với . Bạn có thể lấy chúng trên các bảng phát triển với các gói pin và bố trí pin phát nổ với giá 5 đô la trên ebay hoặc 10 đô la trên adafnut.


-2

Tôi đã nghe từ một kỹ sư rằng Xe lửa đi lại đường sắt nhẹ của Siemens chạy trên những chiếc 386.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.