Một ngôn ngữ diễn giải tốt cho một dự án nhúng nhỏ [đã đóng]


8

Tôi có một vi điều khiển mbedARM Cortex M3 nhỏ trên đó. Về cơ bản, tài nguyên hiệu quả của tôi cho dự án là ~ 25 KB RAM và ~ 400 KB Flash. Đối với I / O, tôi sẽ có bàn phím PS / 2 , bộ đệm khung VGA (có đầu ra ký tự) và thẻ SD để lưu / tải chương trình (có thể lên tới vài MB).

Tôi hỏi bởi vì tôi đang cố gắng tìm ra ngôn ngữ lập trình để thực hiện điều này. Tôi đang tìm kiếm một ngôn ngữ diễn giải dễ dàng để tôi thực hiện và sẽ không phá vỡ ngân hàng về tài nguyên của tôi. Tôi cũng dự định điều này ít nhất có thể để viết trên chính thiết bị, mặc dù trình chỉnh sửa có thể được diễn giải (yay, bootstrapping).

Dù sao, tôi đã xem một vài ngôn ngữ đơn giản. Một số ứng cử viên tốt đẹp:

Có ai đã làm một cái gì đó như thế này hoặc biết bất kỳ ngôn ngữ nào có thể phù hợp với dự luật này hoặc có ý kiến ​​về ba ứng cử viên của tôi cho đến nay?


Nếu quy mô của bạn quá nhỏ để phù hợp với LUA, bạn có thể bị mắc kẹt với C và việc bạn thực hiện một ngôn ngữ trong đó. Nếu bạn có thể có được sơ đồ phù hợp thì đó là một ứng cử viên tuyệt vời để viết ngôn ngữ kịch bản đơn giản của riêng bạn.
Jimmy Hoffa

@JimmyHoffa bạn đang nói rằng tôi nên triển khai chương trình trên thiết bị của mình và sau đó từ đó triển khai ngôn ngữ kịch bản trong sơ đồ? giải thích kép? lol
Earlz

Không, tôi đang đề cập đến việc viết một trình thông dịch theo sơ đồ, sau đó biên dịch trình thông dịch đó thành bản địa. Mặc dù tôi chắc chắn có trình biên dịch tốt hơn cho lược đồ này, nhưng đây là google pop đầu tiên cho lược đồ được biên dịch: matt.might.net/articles/compiling-scheme-to-c
Jimmy Hoffa

Tôi muốn nói thêm rằng dự án eLua cũng có một cổng tới ARM M3, tôi nghĩ nó sẽ hữu ích cho bạn.
Machado

Có một số trình thông dịch Tiny Basic (một số được viết bằng C), trong đó tổng dung lượng bộ nhớ có thể chỉ bằng 16kB (thậm chí ít hơn đối với các trình thông dịch được viết bằng ASM).
hotpaw2

Câu trả lời:


6

Đối với những gì bạn đã mô tả, FORTH có lẽ là lý tưởng. FORTH thường xuyên chạy trên các nền tảng nhỏ hơn nhiều so với của bạn. (Tổng cộng 16K là một cỗ máy lớn cho FORTH.) Sẽ có một số đường cong học tập nghiêm túc liên quan, nếu bạn chưa bao giờ nhìn vào FORTH trước đây.

Có một triển khai Scheme gọi là TinyScheme (như tôi nhớ lại), có thể đáng xem. Lần đầu tiên tôi nghe về nó từ một mẩu trên Slashdot, về một anh chàng đã sử dụng nó làm cốt lõi của công cụ phần mềm độc hại của mình. (Vâng, điều đó đúng: Công việc của anh ấy là viết phần mềm độc hại, bằng cách này hay cách khác và thực hiện nó trong TinyScheme có nghĩa là trọng tải của họ có thể nhỏ hơn rất nhiều.)


Tôi nhìn TinyScheme. Tôi nghĩ rằng nó sẽ hoạt động, nhưng tôi hoàn toàn không biết Scheme .. Vì vậy, tôi cho rằng Forth sẽ dễ dàng hơn để quấn đầu tôi (chính là nó). Mặc dù vậy, tôi sẽ không coi Forth có một đường cong học tập hoàn toàn khổng lồ, trước đây tôi đã từng làm việc với máy xếp chồng, vì vậy đó có lẽ là lý do tại sao nó lại khá tự nhiên đối với tôi heh. Forth là tuyệt vời cho điều này mặc dù vì việc mở rộng sau này để thực hiện một hình thức JIT thô sơ và như vậy ... và việc thực hiện bao gồm một chồng, một từ điển và một vài từ được xây dựng
Earlz

Vì vậy, tóm lại. Cuối cùng tôi đã đi bằng cách viết trình thông dịch Forth (không tuân thủ) của riêng tôi.
Earlz

"Bắt đầu FORTH" kinh điển của Leo Brodie cho đến nay là phần giới thiệu tốt nhất về FORTH mà tôi từng tìm thấy, ngay cả khi nó mô tả một phiên bản rất cũ của ngôn ngữ và môi trường (poly-16-bit, từ FORTH Inc.). Nếu bạn có thể tìm thấy một bản sao, "Ngôn ngữ diễn giải theo luồng" của Loeliger sẽ thực hiện rất tốt việc giải thích cách triển khai FORTH trên bộ vi xử lý Zilog Z80.
John R. Strohm

11

Tôi sẽ làm cho trường hợp Lua là đặt cược tốt nhất của bạn. Bạn có thể biên dịch Lua ở bất cứ đâu mà C có thể chạy và đó là một trong những ngôn ngữ kịch bản nhẹ nhất ngoài kia. Nó linh hoạt ồ ạt như một ngôn ngữ và các kỹ năng cũng khá dễ chuyển nhượng. Thậm chí còn có một phiên bản nhúng đặc biệt của Lua .

Phụ lục: Rõ ràng có thể giảm dung lượng bộ nhớ xuống chỉ còn hơn 25K.

Phụ lục 2 - Mọi thứ trở nên hấp dẫn: Có một tùy chọn được đưa ra bởi câu hỏi SO này . Squirrel là ngôn ngữ mà tôi đã nghe nói nhưng chưa bao giờ sử dụng. Nó dường như thậm chí còn nhỏ hơn Lua do sử dụng tính năng tham chiếu.


eLuanhưng nó nằm ngoài phạm vi của tôi cho các tài nguyên. Về cơ bản 32K RAM là cần thiết cho bất cứ điều gì hữu ích
Earlz

1
Lua sẽ không bao giờ có thể cạnh tranh với Forth về dấu chân.
SK-logic

NEver nói nó có thể. Lua không xa lạ với hầu hết các lập trình viên.
Kỹ sư thế giới

+1 cho LuaeLua .
Machado

Nếu bộ xử lý của tôi có thêm RAM một chút, tôi sẽ sử dụng eLua, nhưng tiếc là nó không có, vì vậy tôi đang viết một trình biên dịch Forth nhỏ
Earlz

1

Về ngôn ngữ kịch bản có thể nhúng, 2 ngôn ngữ tôi quen thuộc là LUA PAWN .

Tôi nghĩ rằng có các phiên bản Python và các ngôn ngữ khác được chuyển đến các hệ thống nhúng, nhưng chúng có xu hướng là loại Linux nhúng. Tùy thuộc vào nền tảng của bạn (không biết đó là MCU nhỏ với 8K ROM hoặc PC nhúng) có thể là một tùy chọn.


1

Tôi nhớ đã đọc cách đây một thời gian về Tcl / Tk và việc sử dụng nó trong các bộ định tuyến.

Trích đoạn "Phát triển nhúng" được tìm thấy tại http://www.tcl.tk/about/uses.html :

Bởi vì Tcl là một ngôn ngữ rất nhỏ gọn và dễ dàng tích hợp với phần cứng đặc biệt, nó là một lựa chọn phổ biến cho phát triển nhúng. Bạn sẽ thấy Tcl bị ẩn đi trên nhiều thiết bị, bao gồm nhiều sản phẩm mạng từ Cisco và các thiết bị khác, và các hộp giải mã bao gồm Tivo. Tất nhiên, việc nhúng Tcl trong các dự án phần mềm khác cũng rất phổ biến và trở thành ngôn ngữ điều khiển thống trị trong một số ngành, như trong tự động hóa thiết kế điện tử (EDA) và các ứng dụng thiết kế hỗ trợ máy tính (CAD).


1
Bạn không cần phải kéo tk cùng với Tcl - Tcl là một ngôn ngữ tốt. Bạn cũng có thể xem xét "TinyTcl" - sourceforge.net/projects/tinytcl
Bryan Oakley
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.