trong hai bài viết cuối cùng, tôi đã bị cuốn vào cách nó tuyệt đẹp nhưng lạ, và sau đó bạn đã thiết lập trên một hệ thống cơ bản và nhấp nháy một số đèn LED. Và trong khi tôi đã chỉ cho bạn tại Đa nhiệm, chúng tôi chưa sử dụng nhiều cách thực sự. Bắt đầu trên một hệ thống Forth như thế này là khoảng một nửa trận chiến. Làm việc bên trong vi điều khiển khác nhau so với biên dịch cho vi điều khiển và tìm ra quy trình làm việc, cách gặp vấn đề về kỹ thuật và nơi các nguồn lực có lợi không nhất thiết phải rõ ràng. Ngoài ra, có một số tính năng tuyệt vời của MECRISP-STELLARIS FORTH mà bạn có thể không chú ý đến khi bạn bị hack trên hệ thống trong một thời gian.
Lý tưởng nhất là bạn sẽ nhìn trộm mang theo một người làm việc của họ, và bạn sẽ thấy một số cách họ làm việc. Đó là mục tiêu của tác phẩm này. Nếu bạn đã flash trong phiên bản MECRISP-STELLARIS-PLUN của chúng tôi, bạn đã sẵn sàng theo dõi. Nếu không, hãy quay lại và làm bài tập về nhà của bạn thật nhanh. Chúng tôi vẫn sẽ ở đây khi bạn hoàn thành. Rất nhiều bài đăng này sẽ rất chắc chắn với hương vị của Mangris-Stellaris, nhưng cho rằng nó chạy trên hàng tấn chip cánh tay ngoài kia, đây không phải là một nơi xấu.
Được thích nghi
Điều đầu tiên bạn sẽ cần phải làm quen với Forth là ngăn xếp. Bạn biết rằng hạt dẻ cũ về những người chỉ có thể giữ năm (bảy?) Những điều trong tâm trí của họ tại một thời điểm? Ngay lập tức để kiểm tra.
Lần cuối, tôi đã chỉ ra một cách ngắn gọn các lệnh .s (“in stack”). Trong phiên bản Hackaday, tôi đã xác định lại MECRISP thông thường. Trong một chút dài dòng, và mắt tôi dễ đọc hơn rất nhiều. Nếu bạn thấy mình đánh. Rất nhiều, và bạn sẽ, tôi cũng đã viết một hàm (tạm thời) ghi đè lên “OK.” Nhắc nhở bằng cách nối một bản in ngăn xếp cho nó, bất cứ khi nào bạn nhấn Enter. Nhập in.Stack và nhấn Enter Enter một cách nhiều thời gian để xem nó hoạt động như thế nào. Nhấn nút reset hoặc gõ reset sẽ xóa sạch mọi thứ trong RAM và bao gồm dấu nhắc in ngăn xếp, vì vậy bạn sẽ quay lại một nửa phiếu sạch.
Bây giờ có lẽ là thời điểm tốt để chơi xung quanh với các nhà khai thác ngăn xếp. Bạn đã đọc thuật ngữ MECRISP? Kiểm tra danh sách các hoạt động tung hứng ngăn xếp ở đó. Bật in .Stack và chơi xung quanh cho đến khi tất cả đều có ý nghĩa.
Bạn đã chạy từ chưa? Nó phun ra một danh sách liên kết của mỗi từ mà Forth biết, cùng với các vị trí bộ nhớ nơi chúng sống và một số chi tiết bổ sung – quá nhiều chi tiết, trừ khi bạn gỡ lỗi hệ thống. Có thêm, không có tiêu chuẩn, từ trong MECRISP chỉ cần in ra tên hàm: danh sách. Đưa ra rằng một shot bây giờ. Nếu bạn chưa xác định một vài từ, hãy làm như vậy.
: hw. Xin chào, thế giới! cr;
là một trong những tốt để có trong tay.
Lớp trong bộ nhớ
Bộ nhớ của Mangris-Stellaris được chia thành hai vị trí gộp: RAM và Flash. Tất cả các từ được cung cấp trước “- Mark Core -” Mangris-Stellaris – “đang ở trong RAM và sẽ bị mất khi đặt lại hoặc tắt nguồn. Các chức năng RAM mới sẽ được thêm vào mặt trước của danh sách.
Sau chức năng “- Mangris-Stellaris -” Đánh dấu hoạt động trong Flash. Ở những phần đầu của Flash, trước khi “- Từ điển Flash -” là lõi Regisp Forth thông thường. Từ đó cho đến khi “<>” là những từ được lấy từ phân phối MECRISP bình thường hữu ích, bao gồm một số chức năng gỡ lỗi và đa nhiệm. Trước “<>” là những đóng góp từ các thư viện Embello, bao gồm rất nhiều định nghĩa GPIO và những định nghĩa trước đây “<>” được thêm vào chỉ cho loạt bài này.
Điều không rõ ràng là tất cả các điểm đánh dấu này với dấu ngoặc xung quanh chúng đều là Nền tảng. Chúng cho phép bạn xóa flash lên cho đến khi vị trí bộ nhớ đó. Vì vậy, nếu bạn đã thêm một số chức năng bổ sung vào Flash và muốn xóa lại trạng thái mặc định phiên bản Hackaday, bạn có thể nhập << Hackaday-Extras >>. Các chức năng bổ sung sẽ bị xóa và thiết lập lại chip. (Lưu ý rằng điều này mất bất cứ thứ gì trong RAM!) Lệnh EraseFlash sẽ đưa bạn trở lại “- Từ điển Flash -“.
Ghi đè lịch sử
Nếu bạn xác định một từ hai lần có cùng tên, bạn sẽ có hai phiên bản của từ trong từ điển. Khi một từ được gọi hoặc biên dịch, trình thông dịch nhìn qua bộ nhớ, từ đỉnh ram xuống, sau đó từ cuối flash trở lại từ đầu. Các từ có cùng tên trong RAM do đó được gọi trước những từ đó trong Flash. Những gì có thể đặc biệt kỳ quặc về Forth là, bởi vì nó biên dịch trong thời gian thực, từ được đề cập trong bất kỳ từ gọi nào là một từ ở trên cùng tại thời điểm từ gọi được xác định. Làm cho lịch sử rối là một cách chắc chắn để phát điên.
: foo. “foo!” Được;
: thanh foo. “Bar!” Được;
thanh foo! quán ba! Vâng.
: foo. “BÓNG!” Được; Xác định lại foo. Vâng.
foo bizzle! Vâng.
thanh foo! quán ba! Vâng.
Mặt khác, đây là một cách tuyệt vời để làm việc tận dụng các tính năng bộ nhớ khác nhau này. RAM bị xóa trên mọi thiết lập lại, cung cấp cho bạn một bảng slate sạch, nhưng bằng cách sử dụng Cornerstones, Flash cũng không thể thay đổi. Tất nhiên, sâu hơn trong flash bạn phải xóa,Càng nhiều từ bạn phải xác định lại sau, giả định rằng một số trong số họ rất hữu ích. Điều này cho thấy một kỹ thuật nhiều lớp để phát triển, với hầu hết các từ “cốt lõi” trong cùng trong Flash. Điều đó cũng tự nhiên vì các từ cần được xác định được gọi là, vì vậy hãy xác định những điều cơ bản trước tiên có ý nghĩa.
Bạn có thể biên dịch một từ mới với RAM (mặc định) bằng cách gọi Compiletoram hoặc để nhấp nháy bằng cách gọi Compiletoflash. Nguyên mẫu từ của bạn trong RAM. Cảm thấy miễn phí để ghi đè lên chúng nhiều lần như bạn muốn, nhưng hãy nhớ rằng bạn phải xác định lại bất kỳ từ phụ thuộc nào sau khi bạn thay đổi một thứ gì đó ngược dòng để giữ lịch sử cuộc gọi nguyên vẹn. Khi bạn đã thực hiện với một phần phát triển, hãy nhập thiết lập lại và RAM rõ ràng. Bây giờ xác định lại những từ này vào flash. Nếu bạn phát triển ứng dụng của mình từ dưới lên, bạn sẽ thấy rằng tất cả đều bị treo cổ nhau một cách độc đáo. Khi bạn đã phát hiện ra một lỗi trong thứ gì đó đã được ghi vào Flash, các Nền tảng sẽ đến giải cứu.
Cuối cùng, bản chất lớp này của các định nghĩa ra có thể thực sự tiện dụng. Ví dụ: một chức năng init được xác định trong flash sẽ chạy trên mỗi lần thiết lập lại. Nó bao gồm những thứ như đặt tốc độ bộ xử lý và đánh dấu hệ thống, có lẽ bạn không muốn gây rối với. Bởi vì bạn có thể ghi đè init và bất kỳ biên dịch nào sử dụng các từ có sẵn tại thời điểm biên dịch, bạn có thể đơn giản là lớp chức năng của mình vào init :: init init. “Howdy!” cr;. “Init” đầu tiên là tên của từ mới và thứ hai đang gọi init hiện có và thực hiện tất cả các thiết lập. Phần còn lại của định nghĩa là của bạn để chơi với. Khi khởi động lại, mọi thứ sẽ được thực hiện trong mua mà nó đã được xác định.
Tiện nghi sinh vật
Tôi viết rất nhiều mã trong trình soạn thảo (VIM) và sau đó gửi nó đến chip để chơi xung quanh. Rất cụ thể, tôi đã viết một kịch bản gọi là forth_upload.sh có chứa các mục sau:
[[$ 1]] && Thuật ngữ = $ 1 || Thuật ngữ = / dev / ttyusb0
Trì hoãn = 0,2.
trong khi đọc -r f; Do echo “$ f”; echo “$ f”> $ Term; Ngủ $ {trì hoãn} s; xong
Để gửi một tệp đến cổng nối tiếp và do đó đến Forth, forth_upload.sh
0