Câu hỏi Các ngôn ngữ tương tác có sẵn chạy trong bộ nhớ nhỏ là gì?


Tôi đang tìm các ngôn ngữ lập trình có mục đích chung

  • có lời nhắc tương tác (mã hóa trực tiếp)
  • làm việc trong bộ nhớ RAM 32 KB của chính nó hoặc 8 KB khi trình biên dịch được lưu trữ trên một máy riêng biệt
  • chạy trên một vi điều khiển với ít nhất là 8-32 KB RAM tổng (không có MMU).

Dưới đây là danh sách của tôi cho đến nay, tôi đang thiếu gì?

  • Python: Các PyMite VM cần 64K flash, 8K RAM. Nhắm mục tiêu LPC, SAM7 và ATmegas với 8K trở lên. Được lưu trữ.
  • Lua: Các eLua Hỏi đáp khuyến nghị 256K flash, 64K RAM.
  • FORTH: amforth cần 8K flash, 150 byte RAM, 30 byte EEPROM trên ATmega.
  • Kế hoạch: sơ đồ nách Mục tiêu nhỏ nhất là LPC2103 với 32K Flash, 4K SRAM.
  • C: Tương tác C chạy trên 68HC11 không có flash và SRAM 32K. Được lưu trữ.
  • C: picoc một nguồn mở, biên dịch chéo, hệ thống C tương tác. Khi biên dịch cho AVR, phải mất 63K flash, 8K RAM. RAM có thể được giảm với nỗ lực để giữ cho bảng trong flash.
  • C ++: AngelScript một mã nguồn mở, mã byte dựa trên, C / C ++ như ngôn ngữ kịch bản với các cuộc gọi bản địa dễ dàng.
  • Tcl: TinyTCL chạy trên DOS, 60K nhị phân. Có vẻ dễ dàng để cổng.
  • CĂN BẢN: TinyBasic: Khởi tạo với một heap 64K, có thể điều chỉnh được.
  • Lisp
  • PostScript: (Tôi chưa tìm thấy triển khai FOSS cho bộ nhớ thấp)
  • Vỏ: bitlash: Một shell lệnh tương tác cho Arduino (ATmega). Xem thêm AVRSH.

68
2017-07-04 19:31


gốc


Hệ thống đầu tiên bạn đề cập xuất hiện chỉ yêu cầu 8k flash, nhưng bạn liệt kê nó là 128k. Tui bỏ lỡ điều gì vậy? - SingleNegationElimination
nên là cộng đồng wiki. - SilentGhost
1) Các số Flash / RAM cho FORTH impl. dành cho bộ xử lý có tên. 2) Tôi không biết một wiki cộng đồng trong stackoverflow. Tôi sẽ xem xét nó. - dwhall
Một câu hỏi thú vị. Phát biểu như một lập trình viên nhúng, tôi tò mò là tại sao bạn muốn có một dấu nhắc tương tác để chạy trên hệ thống nhúng. Ngoài yếu tố "neato", đó là. Miễn là hệ thống nhúng của tôi được kết nối với PC, tôi sẽ cố gắng xử lý nhiều nhất có thể trong PC và có mã tối thiểu trong thiết bị được nhúng. Việc thực hiện một chức năng cụ thể trong mã trên máy tính dễ dàng hơn so với trong một hệ thống nhúng, nói chung. - Craig McQueen
Tôi đã sử dụng Interactive C trong một robot tự chọn ở trường đại học. Tôi đã tìm hiểu thêm về C thông qua dấu nhắc tương tác trong 6 tuần so với tôi đã làm trong toàn bộ học kỳ của một phòng thí nghiệm C. Tôi đã được lập trình Python từ năm 1996 và tôi nhắc nhở tương tác của nó cho tôi học ngôn ngữ (đến thời điểm làm những gì tôi cần làm) trong 2 ngày. Vì vậy, tôi tin rằng các ngôn ngữ tương tác là tuyệt vời cho việc học và cũng tạo mẫu nhanh. Cuối cùng, tôi là nhà phát triển chính của PyMite, vì vậy tôi đang tìm kiếm các ví dụ về các ngôn ngữ ngang hàng và học tất cả những gì tôi có thể từ chúng. - dwhall


Các câu trả lời:


Có một số phiên bản Tcl cho chương trình được nhúng:

http://wiki.tcl.tk/1363


8



Ettcl quá lớn đối với giới hạn 32 KB, nhưng liên kết mà bạn cung cấp có các triển khai nhỏ khác đến gần. Cảm ơn bạn. - dwhall
Bạn nói đúng, sai lầm của tôi. Tôi đã chỉnh sửa câu trả lời của mình để xóa liên kết đó sau khi tôi nhận ra điều tương tự. - ars


Một thời gian chạy homebrew Forth có thể được thực hiện trong bộ nhớ rất ít thực sự. Tôi biết một người đã thực hiện một trong một Cosmac trong những năm 1970. Thời gian chạy lõi chỉ là 30 byte.


7



FORTH đã được liệt kê. Đây là một bình luận, không phải là một câu trả lời. - dwhall


Tôi nghe nói rằng CHIP-8, XPL0, PicoC và Mục tiêu Caml đã được chuyển sang đồ thị máy tính. Bài viết "Lego Mindstorms" trên Wikipedia liệt kê một loạt các ngôn ngữ lập trình được cho là chạy trên nền tảng Lego RCX hoặc Lego NXT. Có ai trong số họ đáp ứng tiêu chí "mã hóa trực tiếp" của bạn không?

Bạn có thể muốn kiểm tra Forths vi điều khiển khác tại wiki Forth. Nó liệt kê ít nhất 4 Forth cho Atmel AVR: amforth (mà bạn đã đề cập), PFAVR, avrforth và ByteForth.
(Các liên kết đến các thông dịch viên, cũng như câu hỏi StackOverflow này, được bao gồm trong "Những hệ thống nhúng"wikibook"


7





Tôi muốn giới thiệu LUA (hoặc eLUA http://www.eluaproject.net/ ). Tôi đã "chuyển" LUA sang Cortex-M3 một thời gian nữa. Từ đỉnh đầu của tôi, nó có kích thước flash 60 ~ 100KB và cần khoảng 20KB RAM để chạy. Tôi đã vứt xuống các yếu tố cần thiết trần, nhưng tùy thuộc vào ứng dụng của bạn, điều đó có thể là đủ. Vẫn còn chỗ cho tối ưu hóa, đặc biệt là về yêu cầu RAM, nhưng tôi nghi ngờ bạn có thể chạy nó thoải mái trong 8KB.


5



Cảm ơn, nhưng dự án eLua đã có trong danh sách của tôi (xem viên đạn thứ hai trong câu hỏi). - dwhall


Một số thông dịch viên / máy ảo AVR:

  1. http://www.cqham.ru/tbcgroup/index_eng.htm
  2. http://www.jcwolfram.de/projekte/avr/chipbasic2/main.php
  3. http://www.jcwolfram.de/projekte/avr/chipbasic8/main.php
  4. http://www.jcwolfram.de/projekte/avr/main.php
  5. http://code.google.com/p/python-on-a-chip/
  6. http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=688&item_type=project
  7. http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=626&item_type=project
  8. http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=460&item_type=project
  9. http://www.harbaum.org/till/nanovm/index.shtml

4





Wren phù hợp với tiêu chí của bạn - theo mặc định nó được cấu hình để chỉ sử dụng 4k RAM. AFAIK nó đã không nhìn thấy bất kỳ sử dụng thực tế, kể từ khi anh chàng tôi đã viết nó cho quyết định ông không cần một thông dịch viên chạy hoàn toàn trên hệ thống mục tiêu sau khi tất cả.

Ngôn ngữ bị ảnh hưởng rõ ràng nhất bởi ML và Forth.


4





Bạn đã xem xét một port in C của Cơ bản nhỏ? Hoặc, có lẽ viết lại UCSD Pascal p-máy đến kiến ​​trúc của bạn từ Z-80?

Nghiêm túc, mặc dù, JavaScript sẽ làm cho một ngôn ngữ kịch bản nhúng tốt, nhưng tôi không có đầu mối những gì yêu cầu bộ nhớ tối thiểu là cho VM + GC, cũng không khó khăn như thế nào để loại bỏ phụ thuộc hệ điều hành. Tôi đã chơi với NJS một thời gian trở lại, mà có thể có thể phù hợp với nhu cầu của bạn. Điều này là thú vị trong đó trình biên dịch được viết bằng JavaScript (tự lưu trữ).


2





Bạn có thể xem qua AvrCo Multitasking Pascal rất mạnh mẽ cho AVR. Bạn có thể thử nó tại http://www.e-lab.de. Phiên bản MEGA8 / 88 hoàn toàn miễn phí. Có rất nhiều trình điều khiển và giả lập với trình gỡ lỗi JTAG và hình ảnh trực quan hoặc mô phỏng trực quan của tất cả các thiết bị tiêu chuẩn (LCDCHAR, LCDGRAPH, 7SEG, 14SEG, LEDDOT, KEYBOARD, RC5, SERVO, STEPPER ...).


2





Bạn đang thiếu EmbedVM, trang chủ đây, svn repo đây. Nhớ kiểm tra cả hai [1,2] video trên trang chủ;)

Từ trang chủ:

EmbedVM là một máy ảo nhúng nhỏ cho vi điều khiển   với lối vào ngôn ngữ giống chữ C. Nó đã được thử nghiệm với GCC và AVR   vi điều khiển. Nhưng máy ảo khá đơn giản   nên dễ dàng chuyển nó sang các kiến ​​trúc khác.

VM mô phỏng một CPU 16bit có thể truy cập tới 64kB bộ nhớ. Nó   chỉ có thể hoạt động trên các giá trị 16 bit và các mảng có giá trị 16 bit và 8 bit.   Không có hỗ trợ cho các cấu trúc dữ liệu phức tạp (struct, objects,   v.v.) Một hàm có thể có tối đa 32 biến cục bộ và 32   lập luận.

Bên cạnh bộ nhớ cho máy ảo, một cấu trúc nhỏ giữ trạng thái VM   và số lượng bộ nhớ hợp lý mà các chức năng của EmbedVM cần trên   ngăn xếp không có yêu cầu bộ nhớ bổ sung cho VM.   Đặc biệt là VM không phụ thuộc vào bất kỳ quản lý bộ nhớ dymaic nào.

EmbedVM được tối ưu hóa cho kích thước và tính đơn giản, không phải tốc độ thực thi. Các   Bản thân VM chiếm khoảng 3kB bộ nhớ chương trình trên một AVR   vi điều khiển. Trên một AVR ATmega168 chạy ở 16MHz VM có thể   thực hiện khoảng 75 lệnh VM mỗi mili giây.

Tất cả các truy cập bộ nhớ được thực hiện bởi máy ảo đều được thực hiện bằng cách sử dụng gọi lại của người dùng   chức năng. Vì vậy, có thể có một số hoặc tất cả bộ nhớ VM trên   thiết bị bộ nhớ ngoài, bộ nhớ flash, vv hoặc phần cứng "bản đồ bộ nhớ"   chức năng cho máy ảo.

Trình biên dịch là một công cụ dòng lệnh UNIX / Linux mà đọc trong một * .evm   tệp và tạo bytecode ở định dạng vaious (tệp nhị phân, intel hex,   Khởi tạo mảng C và định dạng đầu ra gỡ lỗi đặc biệt). Nó cũng   tạo một tệp biểu tượng có thể được sử dụng để truy cập dữ liệu trong VM   bộ nhớ từ ứng dụng máy chủ.

Ngôn ngữ giống chữ C trông giống như sau: http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm


1





Tôi muốn giới thiệu MY-BASIC, chạy với RAM tối thiểu 8 KB và dễ dàng kết nối.


1