Phát triển nhúng - Thực hiện bước tiếp theo


7

Tôi sẽ bắt đầu bằng cách nói với bạn những gì tôi biết. Sau đó, tôi sẽ nói với bạn rằng tôi muốn đến vùng đất huyền diệu này để biết mọi thứ về phát triển hệ thống nhúng. Sau đó tôi sẽ hỏi bạn những bước tiếp theo của tôi sẽ là gì để đến đó. Câu trả lời này khá nhiều thông tin, nhưng tôi đang cố gắng để biết chi tiết hơn một chút:

Những gì tôi biết

Hãy xem, tôi công bằng với C và C ++. Rõ ràng, tôi muốn cải thiện hơn với các ngôn ngữ đó nhưng tôi nghĩ vào thời điểm này cách tốt nhất để tôi cải thiện là tiếp tục sử dụng chúng và tiếp tục cố gắng cải thiện mã của mình khi tôi viết nó. Tôi không nghĩ sẽ rất có ích khi dành bất kỳ bài tập học tập nào cho việc học C nữa.

Tôi khá thoải mái với việc thiết kế các mạch đơn giản. Tôi thấy một con chip có đầu ra bộ thu mở và tôi biết tôi cần kéo lên, v.v ... Tôi khá tự tin rằng đã cung cấp một IC và biểu dữ liệu của nó, tôi có thể tìm ra cách giao tiếp với nó hoặc ít nhất là hỏi đúng câu hỏi Tìm hiểu làm thế nào để giao diện nó.

Tôi rất giỏi toán và tư duy logic. Có một vài thuật toán / khái niệm thiết kế ném tôi cho một vòng lặp. Đây chắc chắn là khu vực mạnh nhất của tôi.

Những điều tôi đã làm

Cho đến bây giờ, tất cả kinh nghiệm của tôi là với các bộ vi điều khiển 8 bit. Khóa học đại học của tôi sử dụng Motorola HC08, Intel 8051 và Zilog EZ8. Giáo sư của tôi đã xây dựng một bảng dev nhỏ cho cả ba người trong số họ với màn hình 7 chữ số và một số thứ khác. Chúng tôi đã lập trình chúng trong lắp ráp vì vậy tôi có phần quen thuộc với lắp ráp và tôi đã tham gia một khóa học kiến ​​trúc máy tính cơ bản để tôi có một ý tưởng hay về phần cứng. Tuy nhiên, chúng tôi đã làm việc trên môi trường windows và cả 3 MCU đều có IDE và chuỗi công cụ riêng đã được thiết lập nên tôi chưa bao giờ thực sự biết cách mã của tôi chuyển từ lắp ráp sang chạy trên MCU.

Bước tiếp theo của tôi là tự học. Tôi đã rất quen thuộc với môi trường Arduino bằng cách giao tiếp với các cảm biến / bộ nhớ / màn hình mà cả hai đều có thư viện viết sẵn và một số thì không. Tiếp theo, tôi đã xây dựng bảng Arduino của riêng mình với một ICSP trên đó và kết nối với một MCU khác để tôi có thể flash bộ nạp khởi động lên ATmega328s trần. Tuy nhiên, một lần nữa, IDE và chuỗi công cụ đã được thiết lập và tôi chưa bao giờ hiểu được cách tôi đi từ C / Arduino sang mã thực sự chạy trên MCU.

Những gì tôi muốn biết

Vì vậy, từ câu trả lời được liên kết trước đó, tôi nghĩ rằng những điều thú vị / có lợi nhất đối với tôi sẽ là viên đạn về việc học các công cụ (trình biên dịch và trình liên kết) và học các kiểu kiến ​​trúc phần mềm khác nhau (từ các vòng điều khiển dựa trên ngắt đến trình lập lịch và RTOSes) . Đó là ý kiến ​​của tôi về những gì sẽ hữu ích nhất ... nhưng vì tôi chưa biết nên thật khó để nói liệu điều đó có đúng hay không nên thoải mái đề xuất các gạch đầu dòng khác từ câu trả lời đó nếu bạn nghĩ rằng chúng sẽ tốt hơn và vui lòng cung cấp một lời giải thích về lý do tại sao bạn nghĩ rằng.


Vì vậy, lấy kiến ​​thức hiện tại của tôi làm điểm khởi đầu và mô tả ở trên về những gì tôi muốn biết làm mục tiêu, tôi đang tìm kiếm các đề xuất rất cụ thể về nơi sẽ đi tiếp theo. Tôi đang tìm kiếm các đề xuất dự án chính xác, các trang web / mục blog để đọc, các chương trong sách, v.v.

Ngoài ra, có bất kỳ lỗ hổng nào khác trong cơ sở kiến ​​thức của tôi mà bạn nghĩ rằng tôi nên lấp đầy trước khi chuyển sang các chủ đề được đề cập ở trên không?

Cảm ơn


Đây là một câu hỏi rất cởi mở và chủ quan, nhưng nó được suy nghĩ kỹ và đã dẫn đến câu trả lời tuyệt vời. Những câu hỏi như vậy nên được CW.
Kevin Vermeer

@Kevin Vermeer Ah ok, làm thế nào để tôi tham khảo trong tương lai?
NickHalden

@JGord, bạn phải gắn cờ cho người điều hành chú ý. Chỉ người điều hành mới có thể tạo CW.
Kortuk

Câu trả lời:


8

Vì vậy, từ câu trả lời được liên kết trước đó, tôi nghĩ rằng những điều thú vị / có lợi nhất đối với tôi sẽ là viên đạn về việc học các công cụ (trình biên dịch và trình liên kết) và học các kiểu kiến ​​trúc phần mềm khác nhau (từ các vòng điều khiển dựa trên ngắt đến trình lập lịch và RTOSes)

Chuyển một hệ điều hành nhỏ sang một thiết bị mới có thể giúp bạn hiểu được các trình lập lịch và RTOS. FreeRTOS là phổ biến và tài liệu tốt. eCos là một.

Viết một bộ tải khởi động là một cách tốt để nắm bắt được một trình liên kết vì bạn sẽ muốn phân chia bộ nhớ và flash thành các vùng.

Một mẹo khác là chọn một kiến ​​trúc hoặc chip hoàn toàn mới và xây dựng cho mình một ban phát triển. Buộc bản thân bắt đầu ngay từ đầu và tìm kiếm mọi thứ trong biểu dữ liệu là một cách tốt để học.

Khám phá Protothreads . Hãy thử viết các chương trình giống nhau theo cả kiểu máy ren và trạng thái. Khi bạn đã hoàn thành với Protothreads, hãy viết một trình lập lịch biểu thực sự.


Xin chào, cảm ơn vì câu trả lời của bạn, nhưng đây thực sự là loại câu trả lời tôi đang cố tránh. Tôi google các nội dung như "cách học RTOS" và không có liên kết hữu ích nào. Bạn có bất kỳ hướng dẫn hay tài nguyên học tập tốt cho những thứ bạn đề cập?
NickHalden

Nếu anh ấy thực sự cố gắng học những thứ này, RTOS sẽ chỉ che khuất những thứ ban đầu. Tôi đã thực hiện hơn 100 dự án vi điều khiển và chưa tìm thấy một dự án nào trong đó RTOS sẽ là một câu trả lời hay. Tôi đã sử dụng một trình lập lịch tác vụ hợp tác vòng tròn đơn giản rất nhiều lần, nhưng đó là ít hơn so với hầu hết mọi người coi là RTOS. Lập lịch tác vụ của tôi cho các gia đình PIC 18 và DSPIC có sẵn miễn phí trên trang web của tôi.
Olin Lathrop

1
@Olin Đối với các hệ thống nhỏ, tôi thích đa nhiệm hợp tác với các nhiệm vụ được thăm dò. Đó là tính quyết định và nhẹ, lý tưởng cho các hệ thống bị hạn chế. Đa nhiệm ưu tiên với các luồng, trong khi rất mạnh mẽ, có thể gây ra những cơn ác mộng gỡ lỗi - với điều kiện chủng tộc và các lỗi không thể lặp lại. Cho tôi một máy nhà nước bất cứ ngày nào.
Toby Jaffey

1
@JGord: Không, tôi đang nói một RTOS đầy đủ là không phù hợp với các bộ vi điều khiển, với hầu hết những gì bạn thực sự cần là một công cụ trao đổi nhiệm vụ hợp tác. RTOS là một cái gì đó cho các hệ thống nhúng "lớn", mà vi điều khiển không có. Có rất nhiều PC nhúng và những thứ tương tự ngoài đó có RTOS hoặc các hệ điều hành khác có ý nghĩa, nhưng tôi chưa tìm thấy cái nào phù hợp với vi điều khiển.
Olin Lathrop

3
Để biết thông tin về RTOS, hãy xem cuốn sách của Jean Labrosse trên Hạt nhân thời gian thực RTOS: MicroC OS II của anh ấy. Ông có một chương tuyệt vời nói về các cơ chế RTOS nói chung. Với cuốn sách của anh ấy, bạn có quyền sử dụng RTOS của anh ấy.
Jay Atkinson

7

Cuốn sách MicroC OS II có lẽ là thứ để đầu tư. Bạn cũng nên tạo các dự án để tìm hiểu các giao diện khác nhau i2c, spi, mdio, v.v. Đặc biệt là làm thế nào để đập từng cái. Thỉnh thoảng phần cứng sẽ hỗ trợ xe buýt (cần phải tìm hiểu điều đó trên cơ sở của nhà cung cấp) nhưng thường vì nhiều lý do bạn không thể sử dụng phần cứng i2c / spi và phải đập mạnh.

Avr / arduino vẫn ổn, bạn nên học ARM, ngón tay cái và ngón cái2, và msp430 và một số pic cũ hơn (không phải mips). Nhìn vào mã bộ nạp khởi động cho arduino và tìm ra cách tạo chương trình nạp, xóa đèn flash trên nó và tiếp quản bảng / chip. Nhận một micro dựa trên lpc, giao dịch tương tự nhìn vào giao thức lập trình cổng nối tiếp. Nhận một sam7 hoặc một cái gì đó với arm7 có jtag truyền thống, nhận một wiggler olimex hoặc jtag-tiny (tôi khuyên bạn nên dùng cái sau). Hãy thoải mái với openocd. Swd của ARM đau đớn hơn khi jtag bình thường nhưng trong thị trường này sẽ thắng thế (đối với các sản phẩm dựa trên cortex-m). Tóm lại, tìm hiểu các cách khác nhau mà các nhà cung cấp cung cấp cho lập trình mạch. Thỉnh thoảng bạn sẽ gạch ván và sẽ muốn được thoải mái với việc bỏ chúng. Dọc theo những dòng này, viết một số mã để phân tích intel hex, srec,

Bạn đã đề cập đến các công cụ. Bạn không thể học sai gcc và binutils, học cách biên dịch chéo, ít nhất là đối với các nền tảng được hỗ trợ (thường liên quan đến --target = msp430 --prefix = / ví dụ). Các nền tảng được hỗ trợ cho gcc và binutils chính là mục tiêu di động, vì vậy avrgcc và mspgcc và những thứ tương tự về cơ bản được thực hiện cho bạn. Bạn cần học cách viết các tập lệnh liên kết, cách viết mã C của bạn sao cho các bảng cố định hiển thị trong rom không phải là ram. Cũng có cảm giác tháo rời các nhị phân, bạn cần đảm bảo rằng các bảng được đặt đúng chỗ, đảm bảo rằng mã là nơi bạn nghĩ rằng, các bảng vectơ và mã khởi động / khởi động là nơi mà bộ xử lý cần đến khởi động. Cũng không hại để tìm hiểu những gì tối ưu hóa trình biên dịch làm và mã C trông như thế nào khi được biên dịch thành trình biên dịch / mã máy. nếu có thể, đừng giới hạn bản thân trong gcc / gnu. llvm là một người chơi mạnh mẽ, nó có khả năng vượt qua gcc như một công cụ tốt hơn. Bạn có thể đã sử dụng sdcc. Hãy thử các phiên bản eval của kiel, iar, v.v. Bạn sẽ nhanh chóng thấy rằng có rất nhiều vùng màu xám trong các tiêu chuẩn C / C ++ và mỗi trình biên dịch diễn giải những khác nhau, cũng có sự khác biệt lớn về chất lượng mã được tạo ra từ cùng một mức cao nguồn cấp. Nếu bạn gắn bó với nghề này, sẽ có lúc bạn buộc phải sử dụng một trình biên dịch không quá xuất sắc và phải làm việc xung quanh mụn cóc và điểm yếu của nó. Trong kinh doanh máy tính để bàn, bạn thường có thể thoát khỏi việc từ chối sử dụng các công cụ không tuân thủ tiêu chuẩn. Trong thế giới vi điều khiển, đôi khi bạn có được những gì bạn nhận được và đó là nó. Đôi khi bạn nhận được các nhà cung cấp sửa đổi / nâng cao ngôn ngữ C để đáp ứng các tính năng phần cứng của họ hoặc được cho là làm cho cuộc sống của bạn dễ dàng hơn (thỏ semi và xmos đến với tâm trí). (xmos là một nền tảng rất hấp dẫn vì nhiều lý do, tôi cho rằng nó tiên tiến, nhưng từ âm thanh của trải nghiệm của bạn, bạn có thể đã sẵn sàng, các công cụ tải xuống miễn phí, giả lập thực sự tốt, quan trọng để học cách nghiên cứu .vcd / dạng sóng của bạn thực thi mã).

chibios là một cái khác để xem xét.

Tạo bộ tải khởi động thành công là một kỹ năng quan trọng. Bộ tải khởi động, hoặc ít nhất là phần đầu muốn trở nên vững chắc, bạn không muốn cung cấp một sản phẩm dễ bị gạch. Một khởi động đơn giản với cách tải lại phần ứng dụng của đèn flash mà không ảnh hưởng đến phần nhập của bộ tải khởi động là chìa khóa.

Các bảng stellaris eval được tải với các thiết bị ngoại vi, mặc dù chúng cung cấp các thư viện rất đáng để học hỏi, vì cách chúng nói với bạn nó hoạt động và cách nó thực sự hoạt động khác nhau và bạn phải kiểm tra mã của chúng và các tài nguyên khác để tìm hiểu.

Là một người hâm mộ avr, nếu vẫn còn ở đó, tôi khuyên bạn nên có một con bướm avr. Tìm hiểu một chút lập trình nối tiếp, hàn trên đầu nối và lập trình lại nó. Một vài thiết bị ngoại vi trên đó để học lập trình.

có thể nhận được một bán dallas trước đây, bây giờ tôi nghĩ, một thiết bị dây. Giống như cảm biến nhiệt độ của họ. Thậm chí còn đau đớn hơn i2c và mdio với bus dữ liệu hai chiều của họ, điều này một dây, là một dây (và mặt đất). Quyền lực, làm chủ nô lệ và nô lệ để làm chủ tất cả trên một sợi dây.

Khi tôi ở nơi bạn đang ở, tôi thấy việc giải mã các giao thức điều khiển từ xa hồng ngoại rất thú vị. Các mô-đun ir reciver rất dễ xuất hiện, đài phát thanh thực sự có một mô-đun tốt. Về cơ bản ngược lại với tiếng đập bit, bạn muốn đo thời gian giữa các thay đổi trạng thái, sử dụng phát hiện thời gian đó và giải mã giao thức. Một máy thu phổ quát là không cần thiết, một giao thức tại một thời điểm là tốt. Tương tự như vậy, có thể sau đó các lệnh bitbang thành ir led, đặc biệt nếu bạn bit bang tần số sóng mang.

Nói chuyện với một thẻ sd thông qua spi có lẽ là một ý tưởng tốt. Chắc chắn tìm hiểu làm thế nào để xóa và lập trình các phần flash i2c và / hoặc spi, bạn sẽ bắt gặp những phần này thường xuyên cho các số sê-ri và địa chỉ mac và những thứ tương tự.

Tôi khuyên bạn nên học các giao thức ethernet cơ bản là tốt. Có thể phân tích cú pháp và tạo các gói arp và udp (từ đầu) (và cả icmp / ping). Khá dễ dàng để tạo một ngăn xếp udp nếu bạn gian lận một chút, không tuân theo các quy tắc arp thực tế, nếu ai đó gửi cho bạn một cái gì đó gửi phản hồi lại cho mac / ip gửi. Hoặc có thể đi xa hơn để xem các gói arp cho những người khác đi mua và theo dõi các địa chỉ mac / ip xung quanh bạn. tcp mất nhiều công sức hơn, có thể làm được, nhưng tốt hơn là chỉ đọc về nó trước hơn là cố gắng thực hiện nó.

Chúc may mắn, và quan trọng nhất, vui chơi.


Nếu bạn không quan tâm đến câu hỏi của tôi, bạn bao nhiêu tuổi "khi bạn đang ở đâu bây giờ?"
NickHalden

Tôi sẽ nói sớm / giữa những năm 20 khi tôi ở thời điểm mà tôi bắt đầu quan tâm đến việc thử vi điều khiển và có một công việc và có thể đủ khả năng. Vào thời điểm đó, pic là một và nó có giá khoảng 150 đô la cho bất kỳ loại thiết lập nào rẻ nhất, và đó chỉ là một lập trình viên zif cho một phần thông qua lỗ, sử dụng bảng proto radio và phải mua bộ tạo dao động, v.v. để bắt đầu. Khối lượng của các bảng phụ $ 50 cộng với việc có internet đã thay đổi hoàn toàn trò chơi. Tôi đã có thể là 15 hoặc hơn nếu những gì có sẵn ngày hôm nay là có sẵn sau đó.
old_timer

Bạn phải loại bỏ phần đó khỏi bảng của bạn, đưa nó vào lập trình viên, lập trình lại nó, sau đó đặt lại phần đó vào bảng của bạn. Không có điều này trong các công cụ mạch.
old_timer

Vâng, đó thực sự là thế giới tôi đã làm việc khá nhiều nhưng với giá rẻ hơn nhiều. Hầu hết thời gian tôi sử dụng arduino như một cách để lập trình, sau đó lấy nó ra và đặt nó vào bất cứ mục tiêu nào tôi muốn. Tôi rất vui vì bạn đã hơn 20 tuổi khi bạn bắt đầu vì tôi không tham gia vào công cụ này cho đến khi tôi vào đại học và nhận ra có một vũ trụ bên ngoài Java trên máy tính để bàn. Tuy nhiên, đó là lỗi của tôi, bạn đã đúng rằng việc bắt đầu sớm ngày hôm nay sẽ dễ dàng hơn rất nhiều.
NickHalden

Đồng thời, mặc dù là một thiếu niên, các máy tính của2020 và ibm hoàn toàn mới và tốn rất nhiều tiền nhưng với một số nguồn cảm hứng tốt mà mọi người tôi đã mua (một, sau đó là cả hai) trong trường hợp một trong những đứa trẻ học được điều gì đó từ nó và Tôi đã làm tương đương với điều này vào thời điểm đó, đã xem qua các hướng dẫn cơ bản và viết chương trình để tìm hiểu từng lệnh. Sau này học dos với trình biên dịch chương trình rồi đến C và cuối cùng sau khi tôi có một công việc thực sự và một số tiền và các kỹ sư khác để nói với tôi về những bộ vi điều khiển này, tôi đã đi theo con đường đó.
old_timer

6

Đó là một câu hỏi lớn. Thật không may, không có cách nào để học phát triển vi điều khiển nhúng, giống như học hầu hết mọi thứ khác. Tôi sẽ cho rằng vì bạn đang ở đây hỏi, bạn không chỉ muốn thực hiện một dự án cụ thể mà muốn thực sự hiểu những gì đang diễn ra để bạn có thể tự mình thực hiện bất kỳ dự án nào sau này. Đó là một khởi đầu tốt.

Không có thay thế cho việc thực hiện một vài dự án trong trình biên dịch chương trình để thực sự hiểu mọi thứ. Một phần công việc của các ngôn ngữ cấp cao là để che giấu một số sự phức tạp, nhưng điều đó cũng che khuất những điều bạn muốn hiểu. Arduino là một lớp khác từ đó. Có thể sẽ ổn nếu ai đó không muốn biết mọi thứ hoạt động như thế nào để hoàn thành công việc, nhưng thật tồi tệ nếu mục tiêu là tìm hiểu chi tiết. Vì vậy, bỏ arduino, quên bạn có một trình biên dịch, cuộn các đoạn của bạn và sẵn sàng để thực sự lặn trong.

Nơi đầu tiên để bắt đầu với bất kỳ vi điều khiển là với biểu dữ liệu của nó. Các dòng vi điều khiển khác nhau có các chi tiết khác nhau, nhưng các khái niệm là như nhau. Chọn một và gắn bó với nó cho đến khi bạn thực hiện một vài dự án và cảm thấy thoải mái với nó. Các PIC TI MSP430, Atmel và Microchip đều là các dòng vi điều khiển chính thống. Tôi là một anh chàng PIC nên tôi sẽ nói về điều đó. Không sai khi đi với một trong những người khác, nhưng tôi nghĩ rằng có sự hỗ trợ cộng đồng dễ tiếp cận hơn cho PIC ngoài kia, và dòng PIC rất rộng nên sẽ dễ dàng đi đến cả hai micrô lớn hơn và nhỏ hơn từ nơi bạn bắt đầu.

Nếu bạn bắt đầu với dòng PIC, tôi khuyên dùng 18F2520. Đây là một bộ vi điều khiển khá có khả năng, đi kèm với một gói 28 pin dễ sử dụng, có bộ nhớ chương trình và RAM khá tốt, và một bộ các thiết bị ngoại vi phổ biến. Lấy một số ít và sử dụng nó để bắt đầu ngay cả đối với các dự án nhỏ có thể được thực hiện với một cái gì đó ít hơn. Vấn đề là phải hiểu rõ về nó. Cuối cùng, bạn sẽ muốn làm một cái gì đó đòi hỏi nhiều hơn PIC có thể làm. Hy vọng rằng vào thời điểm đó, bạn sẽ khá giỏi những thứ cơ bản và có thể dễ dàng thay thế một mô hình khác. Trên thực tế, tất cả các PIC 18F đều giống nhau ngoại trừ số lượng chân, bộ nhớ chương trình, RAM và hỗn hợp ngoại vi. Sau một vài dự án với 18F2520, bạn sẽ không gặp vấn đề gì khi nhảy ngay vào bất kỳ PIC 18 nào.

Nếu bạn kết thúc việc này một cách chuyên nghiệp, cuối cùng bạn sẽ chạy theo một yêu cầu chỉ ra một cái gì đó nhỏ hơn hoặc rẻ hơn. Đó là khi bạn nhìn vào các gia đình 16F hoặc thậm chí là 12F hoặc 10F. Mọi thứ sẽ trông có vẻ quen thuộc, nhưng một vài điều sẽ khó khăn hơn một chút. Điều này sẽ không có vấn đề gì để xử lý nếu bạn bắt đầu với sự hiểu biết vững chắc về 18F. Ngày nay, 16F và các gia đình thấp hơn thực sự chỉ dành cho sản xuất khối lượng hoặc có lẽ khi không gian vật lý và đôi khi sức mạnh là rất quan trọng. Có rất ít lợi thế trong số họ so với 18F cho một người có sở thích.

Đi lên, bạn có thể nhìn vào 24, 30 và 33 gia đình. Về cơ bản tất cả đều giống nhau ngoại trừ một số nếp nhăn nhỏ như điện áp mà chúng chạy ở tốc độ cao nhất và liệu chúng có ALU toán học DSP hay không. Chúng phức tạp hơn để lập trình trong trình biên dịch chương trình, nhưng cũng dễ dàng hơn một cách kỳ lạ. Có nhiều hướng dẫn để ghi nhớ, nhưng do đó cũng dễ dàng hơn để làm rất nhiều thứ. Đây cũng là một điểm tốt để bắt đầu quay lại C nếu đó là nơi bạn muốn đến. Trình biên dịch C cho các phần này thực sự khá tốt, không giống như trình biên dịch C cho PIC 18 trở xuống. Việc kết hợp C và lắp ráp trong cùng một dự án trên các bộ phận này cũng dễ dàng hơn. Đừng quên trình biên dịch hoàn toàn cho những điều này mặc dù. Sẽ vẫn hữu ích khi biết khi nào bạn phải viết bộ tải khởi động, xử lý đa nhiệm thực hiện các hành động không tự nhiên trên ngăn xếp,

Một điều thú vị về dòng Microchip là một lập trình viên / trình gỡ lỗi duy nhất hoạt động trên toàn bộ rất nhiều. Nếu bạn nghiêm túc về việc này một cách chuyên nghiệp, hãy lấy Real Ice. Để tiết kiệm một ít tiền, bạn có thể lấy ICD3, đây chỉ là một Real Ice bị tước nhẹ. Một điều không phải là ICE (tiếp thị ngu ngốc một lần nữa), nhưng nó là một trình gỡ lỗi trong mạch tốt. MPLAB, trình gỡ lỗi và giả lập IDE của họ, cũng hoạt động trên toàn bộ dòng sản phẩm.

Một lần nữa, đối với các chuyên gia hoặc những người muốn trở thành chuyên gia về vấn đề này, hãy đến hội nghị thường niên của Microchip Masters. Vâng, đó là ở Arizona vào mùa hè, nhưng bạn ở đó để tìm hiểu, vì vậy hãy quên đi 115 degF trong bóng râm. (Thật ra tôi thích khám phá Arizona vào mùa hè, vì vậy tôi đi ra ngoài sớm một tuần với chiếc lều nhỏ của mình và đi vòng quanh vùng nội địa. Thật đáng ngạc nhiên khi có rất ít người ra khỏi khu rừng quốc gia rộng lớn chỉ cách Phoenix một quãng ngắn.) một nơi tốt để chọn công cụ phát triển. Họ thường bán chúng với giá 45% tại Masters. (Tôi là đối tác thiết kế Microchip cấp bạch kim, vì vậy tôi nhận được 45% cho họ mọi lúc, đó là lý do tại sao tôi không giảm giá chính xác cho Masters).

Nếu bạn bắt đầu khám phá vi điều khiển bằng cách thực hiện các dự án PIC, hãy xem trang web của tôi nơi tôi có thêm thông tin chi tiết về cách tôi thường cấu trúc các dự án PIC và cung cấp cho bạn một loạt các công cụ miễn phí để thực hiện một số điều thú vị. Nếu bạn hiểu thiết kế phần mềm tốt và sạch sẽ, bạn sẽ nhận được thông báo tại MPASM. Thực hiện một hoặc hai dự án để hiểu những gì nó làm và không, sau đó nhìn vào trình bao bọc của tôi và các công cụ khác cho phép bạn làm được nhiều hơn trong khi tuân thủ các thực tiễn thiết kế phần mềm tốt. Trình biên dịch không phải là một mớ hỗn độn chỉ vì hầu hết là như vậy. Nếu bạn thực sự thích nó, bạn có thể dừng lại ở lớp tôi đang giảng dạy tại Masters vào mùa hè này về chủ đề này.


Này Olin, trước hết, cảm ơn vì đã dành quá nhiều thời gian cho câu trả lời đó. Thứ hai, tôi đã chọn dòng Atmel làm vũ khí lựa chọn của mình vì tôi đã thực hiện 4 hoặc 5 dự án với nó ... xin lỗi = (. Tôi không chắc mình sẽ dành thêm bao nhiêu thời gian nữa Mặc dù vậy, tôi sẽ kiểm tra trang web của bạn và tôi nghĩ rằng các đề xuất của bạn sẽ hữu ích ngay cả khi tôi không đi xuống dòng PIC vào lúc này.
NickHalden

Rất dễ dàng để bỏ hộp cát arduino và viết các ứng dụng cho phần cứng bằng asm hoặc C hoặc bất cứ thứ gì bạn có thể tìm thấy một trình biên dịch cho. Rất nhiều nền tảng tốt khác, launchpad msp430, khám phá dòng giá trị stm32, sam7s.
old_timer

5

Đây là một ý tưởng khác. Triển khai hệ thống tác vụ nền của riêng bạn, cho phép bạn tạo cả tác vụ theo thời gian và tác vụ theo yêu cầu chỉ chạy khi tác vụ được định thời không chạy. Nó không phải là một RTOS thực sự, nhưng hoạt động giống như một lịch trình hợp tác. Chuyển đổi một dự án trước đó để sử dụng hệ thống nhiệm vụ mới.

Loại hệ thống này hoạt động rất tốt trên các sản phẩm chúng tôi từng sử dụng trên 8051. Ban đầu nó được viết bằng cách lắp ráp, nhưng sau đó chúng tôi đã chuyển đổi nó thành C để giúp chuyển nó sang các kiến ​​trúc khác. Nó thực sự rất trơn tru khi nhịp tim của hệ thống này ở mức 5 ms và các tác vụ được tính theo thời gian đã tăng lên 5 ms. Chúng tôi đã có một tệp mà chúng tôi sử dụng để đặt tên cho tất cả các tác vụ của mình (con trỏ hàm) với các giá trị thời gian của chúng và các tác vụ theo yêu cầu. Tập tin đó sau đó được chuyển đổi thành assembly hoặc C tùy thuộc vào cách chúng tôi triển khai nó và biên dịch thành mã.

Nếu bạn làm cho nó hoạt động khá tốt, thì bạn có thể giải quyết việc viết RTOS đơn giản của riêng bạn cho một cái gì đó khó khăn hơn một chút.


Nghe có vẻ khá thú vị! Bất kỳ đề xuất cho các tài nguyên học tập trên lịch trình nhiệm vụ vv?
NickHalden

2
Chương 15, Hạt nhân thời gian thực của "Cẩm nang phần sụn", của Jean Labrosse, ed Jack Ganssle là một nơi tốt để bắt đầu, và phần còn lại của cuốn sách cũng được đề xuất.
Martin

5

Để trực tiếp giải quyết câu hỏi của bạn về "Điều tôi muốn biết":

Tôi đã thấy rằng việc gọi trình biên dịch trực tiếp thông qua dòng lệnh, làm quen với các tùy chọn của nó và sau đó viết Makefiles của riêng bạn để thực hiện tất cả các bản dựng của bạn rất có lợi cho tôi khi tìm hiểu quy trình xây dựng - nghe có vẻ giống như bạn muốn học. Điều này về cơ bản tách chuỗi công cụ khỏi IDE và cho phép bạn tìm hiểu chuỗi công cụ nhiều hơn IDE. Đây là một điều đang diễn ra mà tôi cũng đang cố gắng cải thiện.

Tôi nhận thấy rằng bạn đã sử dụng arduino trong quá khứ, điều này thật tuyệt vì bây giờ tôi có thể khuyên bạn nên sử dụng avr-gcc làm trình biên dịch của bạn kể từ bây giờ. Hãy dùng thử, nó có sẵn trên tất cả các nền tảng (Linux, WinAVR cho windows, Mac) và tài liệu về chuỗi công cụ avr-gcc và avrdude (lập trình viên) rất tuyệt, và sẽ có rất nhiều ví dụ về Makefiles cho bạn học hỏi từ. Một lượng khá lớn thông tin này cũng có thể chuyển sang phần cứng khác, ví dụ như arm-gcc.


Hoàn hảo, đó thực sự có thể là điều đầu tiên tôi thử. Và thậm chí còn hoàn hảo hơn nữa vì ARM gần như chắc chắn sẽ là kiến ​​trúc thứ 2 tôi học được một khi tôi hoàn toàn thoải mái với các máy phát điện
NickHalden

3

Một điều bạn chưa đề cập là truyền thông.

Dường như một lỗ hổng bạn có thể cắm là tìm hiểu các giao thức truyền thông tiêu chuẩn khác nhau được sử dụng trong công nghiệp - những thứ như:

Vân vân.


À, có truyền thông +1 Tôi chắc chắn sẽ đọc qua các liên kết đó, bạn có đề xuất dự án nào buộc tôi phải áp dụng những gì tôi "học" chỉ từ việc đọc chúng không?
NickHalden

Giao diện với bất kỳ thiết bị nào có sẵn xe buýt đó thường là một dự án tốt. Có thể viết một trình điều khiển của một số loại. Có rất nhiều chip cho xe buýt như I2C, SPI, 1wire, v.v. Những cái được đề cập trong câu trả lời là nhiều thiết bị hơn cho xe buýt thiết bị. Tôi có thể ném vào MIDI, điều này có thể thú vị.
XtL

3

Vì vậy, câu hỏi là "Làm thế nào để học, khi mọi công cụ là một hộp đen?"

Tôi đề nghị tìm một thí nghiệm rất cũ, gỡ lỗi với bất kỳ CPU thông thường nào. Một cái gì đó như cỗ máy rộng 2 feet với CPU, LEDS, công tắc và nút "Thực hiện một bước". Tạo thủ công 5-10 lệnh chương trình vòng lặp dài bằng cách sử dụng hướng dẫn nhị phân mã máy từ biểu dữ liệu. Đặt nó vào chip ROM lớn có thể cắm được. Chèn ROM, nhấn bật / đặt lại nguồn và gỡ lỗi từng bước.


2

Bạn hiểu rõ về các thanh ghi, hoạt động và như thế nào trên micro 8 bit? Nó có thể là một ý tưởng tốt để làm một lắp ráp nhỏ. Điều này có lợi ích của việc dạy cho bạn chính xác những gì đang xảy ra. Điều này có thể giúp giải quyết các lỗi kỳ lạ với các ngôn ngữ cao hơn.

AVR có trình biên dịch và trình biên dịch đơn giản. Đó là một nền tảng tốt để có được thức ăn ướt của bạn trên. Ngoài ra còn có một số hướng dẫn tốt cho nền tảng đó.

Điều này sẽ cung cấp cho bạn dòng dưới cùng của những gì vi đang làm. Sau đó, bước tiếp theo về cách trình biên dịch và trình liên kết đưa C / Arduino vào mã máy sẽ dễ nắm bắt hơn.


Tôi đã sử dụng 3 ngôn ngữ lắp ráp khác nhau. Tôi nghĩ rằng tôi ổn trên mặt trận này. Cảm ơn về đầu vào và tôi chắc chắn đồng ý rằng việc học tập đã giúp viết C tốt hơn (hoặc ít nhất là hiểu những gì tôi đang viết)
NickHalden

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.