Di chuyển với MECRISP-STELLARIS và Embloy

Trong tập cuối, tôi đã ủng hộ một chút cho các vi điều khiển là một nền tảng phát triển vẫn còn khả thi, không chỉ cho ngành công nghiệp mà nó thường thấy những ngày này, mà còn cho tin tặc . Tôi thậm chí có thể đã lừa bạn để có được một vài phần cứng rẻ tiền. Lần này, chúng tôi sẽ nhận được hệ thống Forth được thiết lập trên phần cứng đó và chạy “Hello World” bắt buộc và LED Blinky. Nhưng sau đó chúng tôi cũng sẽ nhúng vào một trong những tính năng tạo ra rất gọn gàng trên vi điều khiển: Đa nhiệm dễ dàng.

Làm việc!

Phần cứng

MECRISP-Stellaris Forth chạy trên một số lượng lớn vi điều khiển ARM, nhưng tôi sẽ tập trung vào đây trên các chip STM32F103 có sẵn cho một ít tiền đặc biệt dưới dạng một bản sao chung của Maple Mini, thường được gọi là bảng hệ thống tối thiểu “STM32F103 “Hoặc” thuốc viên màu xanh “vì yếu tố hình thức, và thực tế là đã từng có màu đỏ để bán. Vi điều khiển trên tàu có thể chạy ở 72 MHz, có 20 KB RAM và đèn flash 64 hoặc 128 KB. Nó có rất nhiều chân, những chân chỉ dành cho kỹ thuật số là dung sai 5 V và nó có tất cả các thiết bị vi điều khiển thông thường. Đó không phải là hiệu quả năng lượng nhất và nó không có một đơn vị dấu phẩy động hoặc DAC, nhưng đó là một thiết kế cũ chắc chắn có sẵn để có ít tiền hơn so với nó.

Lập trình viên kết nối, bật nguồn USB
Những kỳ quan tương tự của công việc sản xuất hàng loạt cho lập trình viên mà bạn sẽ cần phải flash chip. Bất kỳ bản sao nào của ST-LINK V2 sẽ hoạt động tốt. (Trớ trêu thay, phần cứng bên trong lập trình viên gần giống với mục tiêu.) Cuối cùng, xem xét rằng các lần chạy như trong vỏ tương tác, bạn sẽ cần một kết nối nối tiếp với bảng STM32. Có thể chỉ ra một bộ chuyển đổi USB / nối tiếp.

Toàn bộ thiết lập này sẽ không tốn nhiều tiền hơn nhiều so với bữa ăn thức ăn nhanh và bộ điều hợp Lập trình viên và USB / nối tiếp là những thứ mà bạn muốn có trong bộ dụng cụ của mình, nếu bạn chưa có.

Bạn có thể cấp nguồn cho bảng trực tiếp thông qua các chân 3,3 và GND khác nhau rải rác xung quanh bảng hoặc qua cổng Micro USB hoặc các chân 5V trên bảng mục tiêu. Hai tùy chọn sau đi qua bộ điều chỉnh 3,3 V trước khi kết nối với 3,3 chân. Tất cả các chân được kết nối với nhau, vì vậy tốt nhất là bạn chỉ sử dụng một nguồn cung cấp năng lượng tại một thời điểm.

Phần sụn: Hệ thống Forth

GO Let The Super-Edaday-Edition Mangrep Forth Gói từ GitHub. Bao gồm trong thư mục “ROMS” là một hệ thống Forth sẽ hoạt động cho các bản demo ở đây. Tôi cũng đã tải trong một cơ sở đáng kính từ các thư viện Forth đặc biệt của [JCW], cung cấp những thứ như cấu hình GPIO dễ dàng, các chức năng trì hoãn, v.v. Có rất nhiều thư viện nhiều hơn, và chúng ta sẽ xem xét chúng lần sau khi chúng ta cần chúng.

Điều thú vị nhất về việc sử dụng một hệ thống Forth là rất ít phần mềm hỗ trợ là cần thiết trong bất kỳ cách nào – trình thông dịch thứ ra biên dịch mã riêng của mình và bạn tương tác với nó qua thiết bị đầu cuối nối tiếp. Mọi thứ xảy ra bên trong vi điều khiển. Một trở ngại, sau đó, đang nhận được vào chip. Vào những ngày xưa, điều này từng được thực hiện bằng cách chuyển đổi trong byte thủ công và Forth thực sự đủ nhỏ để bootstrapt hóa theo nghĩa đen theo cách này là có thể. Nhưng bạn đã nhận được lập trình viên chip đó, phải không?

Tiện ích ST của [Texane] là cách dễ nhất để có được vào chip của bạn. Tải về chúng từ GitHub và tự xây dựng nó hoặc thử vận ​​may với trình quản lý gói của bản distro. (Windows Folks, bạn cũng không bị bỏ rơi. Mặc dù nhị phân đó đã không thấy cập nhật trong một thời gian, nó sẽ làm được.)

Kết nối các dây lập trình trong thời trang rõ ràng và ban hành các lệnh ma thuật Xóa ST-Flash và St-Flash Viết Mangris-Stellaris-Hackaday-Edition.Bin 0x8000000. Trong năm giây, bạn sẽ sẵn sàng để ầm ầm.

GND – GND.

SWCLK – CLK.

SWSIO – DIO.

Phải có một lập trình viên là một rắc rối nếu bạn không có, nhưng nó sẽ khiến phần còn lại của cuộc sống của bạn dễ dàng hơn và nhận được một người cơ bản như nhấp vào “Trả tiền” và chờ đợi. [Al Williams] của chúng ta (không có mối quan hệ) có một bài đăng gần đây về việc sử dụng cùng một phần mềm để gỡ lỗi mã C hoặc Arduino bằng GDB, vì vậy việc bạn có giá trị thời gian của bạn không.

Phần mềm

Hookup nối tiếp, được cung cấp bởi máy tính xách tay
Đặt lập trình viên ngay bây giờ và kết nối với STM32 trên serial; Tốc độ baud mặc định phải là 115.200. Nếu bạn chưa rút quyền lực, bạn có thể cần nhấn nút đặt lại trên bảng STM32. Nếu tất cả đã diễn ra tốt đẹp, bạn sẽ được chào đón bởi một chiếc sọ-sọ quen thuộc. MECRISP đang mong đợi một dòng sản phẩm ở cuối dòng, vì vậy nếu bạn đang gửi LF + CR, bạn sẽ đánh thành công trả lại hai lần.

A9 TX – SERIAL RX

A10 rx – serial tx

GND – GND.

Folie của [JCW] là một trình giả lập thiết bị đầu cuối nối tiếp tốt, đa nền tảng cho ứng dụng này. Những gì nó làm mà chương trình thiết bị đầu cuối bình thường của bạn không cho phép bạn nhập lại một dòng lệnh bằng mũi tên UP, điều này khiến việc chăm sóc những sai lầm, dễ dàng hơn nhiều so với việc gõ lại một lệnh dài. Nó cũngTự động bao gồm các tệp khác, mà tôi đã sử dụng đáng kể trong việc xây dựng nhị phân cho bài viết này. Bạn không cần phải chạy folie, nhưng tôi cá là bạn sẽ thích nó.

Chào thế giới

Bây giờ là thời gian “Xin chào thế giới”. Nếu bạn chưa quen, hãy đến một phần giới thiệu rất chọn lọc. Loại 2 2 + và nhấn enter. Nó nói ok .. điều đó đang yên tâm, phải không? bây giờ gõ. (Đọc “Dot”) và nó sẽ in ra kết quả không đáng ngạc nhiên. DOT là lần đầu tiên trong số một vài tốc ký toàn cầu mà bạn sẽ muốn thực hiện nội tâm. Rất nhiều lệnh với một dấu chấm in ra kết quả của họ ngay lập tức. .s (dot-ess) in ra nội dung ngăn xếp, ví dụ. Hai thành ngữ nhiều hơn chúng ta sẽ thấy rất nhiều là @ để có được một biến hoặc đọc một đầu vào và! để đặt một biến hoặc đầu ra. Đọc chúng là “Get” và “Set” trong đầu của bạn khi quét mã Fortth.

Tiếp theo, hãy xem cách viết một chức năng. : Bắt đầu một định nghĩa hàm và; kết thúc nó Vì vậy: bốn 2 2 +; Xác định một hàm bổ sung hai và hai lại với nhau. (Và biên dịch nó trong thời gian thực!) Bạn có thể quay lại và gọi chức năng này ngay lập tức. Bốn .s sẽ chỉ cho bạn rằng hàm của chúng tôi đã để lại tổng của hai và hai trên ngăn xếp. Theo nghĩa này, các chức năng trong Forth không thực sự hoạt động. Họ không thực hiện các đối số rõ ràng hoặc trả lại các giá trị rõ ràng. Họ chỉ hoạt động trên bất kỳ dữ liệu nào trên ngăn xếp và để lại kết quả ở đó. Đó là lý do tại sao các hàm ngay được gọi là “từ”. Tôi sẽ gắn bó với quy ước này từ bây giờ.

Ở đây, cuối cùng, là “Hello World” :: hw. “Xin chào, thế giới!” CR; “Chuỗi là một chút lẻ trong, chủ yếu là do cách ngôn ngữ được phân tích cú pháp – trình biên dịch đọc lên một khoảng trắng và sau đó thực thi những gì nó đã tìm thấy, do đó phải có khoảng trắng giữa in-a-chuỗi lệnh (. “) và ký tự đầu tiên mà bạn muốn in. Lệnh in quét về phía trước cho đến khi nó tìm thấy sự đóng cửa, vì vậy bạn không cần thêm một không gian ở đó. CR gửi trở lại vận chuyển. Gõ CTNH tại dấu nhắc. Xin chào, thế giới!

Đèn LED nhấp nháy

Mặc dù nhập và đầu ra văn bản nối tiếp rất dễ dàng, nhấp nháy đèn LED là tiêu chuẩn “Hello World” của vi điều khiển, vì vậy đã đến lúc một số GPIO. Vì hệ thống đã được định cấu hình cho bảng vi điều khiển cụ thể này, hãy bật đèn LED dễ dàng như gõ led.on tại dấu nhắc. Bạn muốn tắt nó đi? dẫn ra. Tuy nhiên, nhấp nháy bằng tay sẽ trở nên cũ khá nhanh, vì vậy hãy viết một từ nhấp nháy. : Blink led.on 100 ms led.off 200 ms; sẽ làm thủ thuật. Hãy thử Blink Blink Blink. Xem mã demo Blink của tôi để xây dựng. (Nhiều hơn trên MS trong vài nghìn mili giây.)

Các chi tiết của việc khởi tạo GPIO được ẩn trong lõi / hackaday / led.fs và tương ứng STM32F1 / IO.FS của Embello. Đào thông qua, bạn sẽ thấy quy trình khởi tạo tiêu chuẩn: Mã PIN cụ thể được đặt làm đầu ra bằng cách lật một số bit trong các thanh ghi điều khiển ngoại vi của STM32. [JCW] đã xác định một loạt các trong số này, tạo mã PIN làm đầu ra, với trình điều khiển đẩy, dễ dàng như PC13 Omode-PP IO-Mode !. (Ghi nhớ “!” Cho biết đặt giá trị trong một biến hoặc đăng ký.)

Để định cấu hình PIN PA7 cho đầu vào ADC: PA7 IMODE-ADC IO-MODE !. Các nút kiểm tra, sử dụng các điện trở tích hợp hoặc điện trở Pulldown: PA3 IO-Kéo io-Mode! và sau đó đặt đầu ra để kéo lên hoặc xuống bằng PA3 IO thực! hoặc PA3 iOS !. Sau đó, bạn sẽ có thể đọc trạng thái nút với PA3 IO @ (“io get”) sau này.

GPIO trên chip STM32 rất linh hoạt và nếu bạn muốn tìm sâu vào các tùy chọn cấu hình trong biểu dữ liệu, bạn có thể đặt tất cả điều này một cách khá dễ dàng bằng mã IO.fs của [JCW]. Chẳng hạn, IO.ALL in tất cả các thanh ghi GPIO và giá trị của chúng, đây là một trợ giúp tuyệt vời để gỡ lỗi tương tác. Điều đó nói rằng, có một số phòng ở đây để có nhiều lớp trừu tượng hóa phần cứng thân thiện với người dùng, nếu bạn muốn đóng góp một.

Đa nhiệm nhanh chóng

Vì vậy, bây giờ chúng tôi đã có một đèn LED nhấp nháy và in serial-port “Xin chào thế giới”. Không phải là một khởi đầu tồi tệ, và cả hai điều này đều sử dụng tốt tương tác của Forth: đèn LED chỉ sáng lên khi bạn nhập chớp mắt. Một trong những đức tính chính của Forth, đối với tôi, là sự dễ dàng xảy ra giữa các từ thử nghiệm tương tác như thế này, sau đó triển khai chức năng trong một hệ thống làm việc. Một lý do là gần như tất cả các tiện ích hỗ trợ đa nhiệm hợp tác cơ bản. Đây là những gì tôi muốn nói.

Đầu tiên, hãy lặp chức năng chớp mắt của chúng ta để chúng ta không phải gõ rất nhiều. : BB bắt đầu chớp mắt một lần nữa; Tạo một hàm, BB cho “Bad Blink”, điều đó sẽ chạy mãi mãi. Vấn đề với “Chạy mãi mãi” là bạn không bao giờ quay lại dòng lệnh của trình thông dịch mà không cần nhấn vào nút đặt lại, và sau đó mọi thứ bạn đang làm việc trong RAM bị mất.

Thay vào đó, hãy chớp mắt trong một vòng lặp với một lối thoát. : GB bắt đầu nhấp nháy phím? cho đến khi ; Tạo một chức năng sẽ chạy lệnh nhấp nháy của chúng tôi cho đến khi có một số đầu vào từ bàn phím – độ liên quan trở lại được nhấn. Cấu trúc vòng lặp đặc biệt này rất có lợi cho việc thử nghiệm các chức năng mà bạn muốn chạy liên tục, mà không cần treo hệ thống. Giữ nó I.n nhớ.

Khi chúng tôi đã điều chỉnh chức năng Blink của chúng tôi để chạy theo cách chúng tôi muốn, hãy tạo một tác vụ nền để nó có thể chớp mắt không giám sát.

Nhiệm vụ: BlinkTask.
: nháy mắt &
Blinktask kích hoạt.
bắt đầu chớp mắt một lần nữa
Được;
Đa nhiệm
nháy mắt &

Tóm lại, nhiệm vụ: Word tạo một số dung lượng bộ nhớ cho tác vụ nền nhấp nháy của chúng tôi mà chúng tôi đang gọi blinktask. Hàm chớp mắt & làm việc trong nền. Nhấp nháy và khởi động bằng cách khai báo rằng nó sẽ sử dụng bối cảnh tác vụ blinktask và nó phải bắt đầu chạy. Sau đó, nó đi vào một vòng nhấp nháy không giới hạn mà từ đó nó không bao giờ rời đi. Multitask biến đa nhiệm và nhấp nháy và thực thi nhiệm vụ của chúng tôi. Chạy nó và đèn LED nhấp nháy trong khi bạn vẫn có thể tương tác với bảng điều khiển. Kẹo. Nhập tác vụ và bạn sẽ thấy rằng có hai hoạt động: một là đèn nháy của chúng tôi và cái còn lại là trình thông dịch tương tác.

Nhưng làm thế nào để tác vụ chớp mắt biết khi nào để mang lại các quy trình đồng thời khác? Tóm lại, từ tạm dừng từ ngữ cảnh hiện tại và chuyển sang đa nhiệm tiếp theo, robin. Chức năng MS, trong số những người khác, bao gồm một lệnh tạm dừng, vì vậy những gì trông giống như độ trễ chặn trong một thiết lập một tác vụ kết thúc tốt để chơi tốt với các nhiệm vụ khác của bạn.

Điều tuyệt vời về đa nhiệm hợp tác là bạn kiểm soát chính xác khi sẽ có một công tắc bối cảnh, có thể giúp loại bỏ các trục trặc mà bạn sẽ tìm thấy trong các hệ thống ưu tiên. Nhược điểm là bạn có trách nhiệm ghi nhớ các chức năng của mình ngay bây giờ và sau đó, và bạn phải tự xác minh thời gian. Tất nhiên, đây là một vi điều khiển và bạn cũng có bộ điều khiển ngắt nội bộ khá phong phú của ARM để chơi với.

Điểm thực sự của đa nhiệm trên micros theo Forth là nó tạo ra một quy trình công việc tuyệt vời để viết, thử nghiệm và triển khai các trình nền nhỏ: các chức năng muốn “luôn luôn”. Đầu tiên, hãy viết chức năng thực hiện hành động một lần. Thứ hai, kiểm tra nó trong một vòng lặp với một nở thoát. Thứ ba, một khi nó hoạt động, loại bỏ lối thoát và tạo một nhiệm vụ nền cho nó. Sau đó, bạn có thể bật và tắt bằng cách sử dụng Idle và Wake, ngay cả từ trong các tác vụ khác. Xem MECRISP MULTITASK.TXT, nguồn, để biết thêm chi tiết.

Cái gì tiếp theo?

Cho đến nay, chúng tôi đã thiết lập MECRISP-STELLARIS, với các thư viện bổ sung từ khung Champlo Forth của Jeelabs và chạy một số bản demo nhanh. Nếu điều này đã khơi gợi sự quan tâm của bạn, tôi sẽ đưa bạn đi theo một hướng dẫn để xây dựng một số phần mềm thực sự vào lần tới. Có rất nhiều điều để nói về cách mà MECRISP xử lý các sắc thái của Flash so với RAM, đầu vào và đầu ra, và thực hành phát triển tương tác. Một số khía cạnh thực sự kỳ dị của việc làm việc trong Forth sẽ nâng cao những cái đầu hình ngộ nghĩnh của họ, và dù sao chúng ta cũng sẽ học cách yêu chúng.

Trong khi đó, hãy lấy bảng STM32F103 giá rẻ của bạn nhấp nháy với nhị phân của chúng tôi và nhận được một chút được sử dụng để phát xung quanh trong môi trường Forth trên chip. Nhấp nháy một số đèn LED. Nhìn xung quanh bảng chú giải Mangris-Stellaris và tài liệu API Embllo. Hoặc chỉ cần nhập danh sách để xem tất cả các lệnh theo ý của bạn và bắt đầu hack đi.