Làm thế nào để trở thành một nhà phát triển phần mềm nhúng?


22

Tôi muốn một số lời khuyên cho những ai muốn trở thành một nhà phát triển phần mềm nhúng tốt hoặc muốn cải thiện trong lĩnh vực này.

Tôi cần học gì về phần cứng, phần mềm?

Những cuốn sách được khuyến khích nhất? Blog?

Cuối cùng, làm thế nào tôi có thể đi từ một người có sở thích mới bắt đầu đến một chuyên gia xuất sắc?

Câu trả lời:


39

Tất cả các câu trả lời đều tốt cho đến nay, nhưng tôi sẽ ném vào hai xu của mình.

Đây là sự lặp lại của một số mẹo với một twist và một số bổ sung:

  • Tìm hiểu C: Ngôn ngữ cơ bản của phần cứng vẫn còn di động (quá mức độ). Đừng chỉ học nó, mà hãy trở thành một chuyên gia về tất cả các tính năng của nó như dễ bay hơi và tại sao nó lại quan trọng đối với việc viết trình điều khiển thiết bị.
  • Bắt đầu với một bộ phát triển tốt như Arduino, nhưng như đã nói trước khi tìm hiểu các kiến ​​trúc khác một khi bạn đã cảm thấy tốt về nó. May mắn thay, có một số bo mạch tương thích Arduino được xây dựng với các bộ xử lý khác, theo cách đó bạn có thể viết lại thiết kế tương tự trên một uC khác không làm rối tung toàn bộ thiết kế của bạn trong khi cảm nhận về một cái gì đó mới.
  • Trong giai đoạn học tập, vui lòng phát minh lại bánh xe trên trình điều khiển thiết bị hoặc các đoạn mã khác. Đừng bỏ mã tài xế của người khác vào đó. Có giá trị trong việc phát minh lại bánh xe khi bạn học.
  • Thử thách bản thân để viết lại mã của bạn hiệu quả hơn về tốc độ và mức sử dụng bộ nhớ.
  • Làm quen với các kiểu kiến ​​trúc phần mềm hệ thống nhúng khác nhau. Bắt đầu với xử lý vòng lặp điều khiển / vòng nền cơ bản, sau đó chuyển lên bộ lập lịch nền, sau đó là hệ điều hành thời gian thực.
  • Kiểm soát nguồn tốt! Tôi thích Mercurial mình.
  • Thậm chí đăng ký một số trang web lưu trữ kiểm soát nguồn miễn phí như Sourceforge.net hoặc Bitbucket.org để lưu trữ dự án của bạn ngay cả khi bạn là người duy nhất làm việc trên đó. Họ sẽ sao lưu mã của bạn lên, vì vậy bạn không phải lo lắng về sự cố ổ cứng thường xuyên đó phá hủy mọi thứ! Sử dụng một VCS phân tán có ích, bởi vì bạn có thể kiểm tra các thay đổi đối với ổ cứng của mình sau đó tải lên trang chủ khi sẵn sàng.
  • Tìm hiểu công cụ của bạn tốt cho bất kỳ con chip nào bạn đang làm việc! Biết làm thế nào trình biên dịch tạo lắp ráp là cần thiết. Bạn cần có một cảm giác về hiệu quả của mã, bởi vì bạn có thể cần phải viết lại trong lắp ráp. Biết cách sử dụng tệp liên kết và diễn giải đầu ra bản đồ bộ nhớ cũng rất cần thiết! Làm thế nào khác bạn sẽ biết nếu thói quen mà bạn vừa viết là thủ phạm của việc chiếm quá nhiều ROM / Flash!
  • Tìm hiểu các kỹ thuật mới và thử nghiệm với chúng trong thiết kế của bạn!
  • Giả sử không có gì khi gỡ lỗi. Xác minh điều đó!
  • Tìm hiểu cách lập trình phòng thủ để bắt lỗi và xác minh các giả định (như sử dụng khẳng định)
  • Xây dựng thông tin gỡ lỗi vào mã của bạn, nơi bạn có thể xuất ra mức tiêu thụ bộ nhớ hoặc lược tả mã bằng bộ định thời hoặc sử dụng các chân dự phòng trên uC để chuyển đổi và đo độ trễ ngắt trên phạm vi O.

Dưới đây là một số cuốn sách:

Dưới đây là một số trang web:

  • Gurus nhúng
  • Nhóm Ganssle Jack Ganssle có một số câu chuyện lịch sử tuyệt vời để kể. Đọc các bài viết. Anh ấy có một chút giảng về một số điều mặc dù.
  • Embedded.com Thông tin tốt cho các kỹ thuật và mẹo mới nhất từ ​​Ganssle, Barr và các chuyên gia trong ngành khác.

1
@Adam: Tôi thích cuốn sách đó! Lập trình viên thực dụng! Tôi không thể tin rằng tôi đã quên nó!
Jay Atkinson

1
+1 cho Mercurial. Tôi thích nó, mặc dù tôi có cảm giác rằng sự thành thạo với git sẽ có giá trị hơn. Làm quen với những điều cơ bản với SVN khá quan trọng nếu bạn muốn đóng góp hoặc rút ra từ các dự án khác, vì đó là điều mà nhiều người trong số họ sử dụng.
tyblu

17
  • Hãy nhớ rằng, "Không có viên đạn bạc" , đừng rơi vào cái bẫy tin rằng có một công cụ, phương pháp, ngôn ngữ hoặc hệ thống có thể giải quyết mọi vấn đề
  • Trở thành một chuyên gia về C
    • Tìm hiểu để có được bằng cách không có malloc () và POSIX
  • Đừng bị treo trên một kiến ​​trúc, thật dễ dàng để trở thành một fanboy PIC hoặc AVR hoặc ARM một cách tình cờ
  • Xây dựng công cụ, gỡ lỗi nó, làm cho nó hoạt động. Tập luyện giúp hoàn hảo hơn
  • Tìm hiểu ít nhất một hệ thống kiểm soát nguồn (SVN / git / etc) và sử dụng nó
  • Luôn luôn sẵn sàng để kiểm tra các giả định của bạn. Lỗi thường là ở chỗ bạn đang giả sử làm việc
  • Đừng quá phụ thuộc vào trình gỡ lỗi, chúng khác nhau trên mọi hệ thống và có độ tin cậy khác nhau
  • Suy nghĩ đạm bạc. Khi giải quyết vấn đề, hãy nghĩ về dấu chân mã, dấu chân RAM và chi phí phần cứng

Đối với sách, tôi khuyên bạn nên tìm hiểu lịch sử. Hầu hết các kỹ thuật phần mềm nhúng ngày nay đến từ cạnh chảy máu của năm qua.

Giống như bất cứ điều gì, thực hành hàng ngày.


5
Trong tất cả những điều tôi đã học được, kiểm soát phiên bản (hiện tại tôi đang sử dụng lật đổ) là điều có giá trị nhất đối với năng suất của tôi. Chúng tôi đã có nguồn an toàn của Microsoft khi tôi bắt đầu ở đây, vì vậy tôi đã sử dụng một giải pháp tồi và sau đó là một giải pháp tốt.
Kortuk

Tôi không thể tưởng tượng cuộc sống của tôi mà không có một hệ thống kiểm soát nguồn. Tôi cũng sử dụng SVN. Tôi không biết mọi thứ hoạt động như thế nào trước khi tôi biết SVN.
Daniel Grillo

1
+1 cho "Lỗi thường nằm ở thứ bạn đang giả sử hoạt động"
JustJeff

"Học cách nhận mà không cần malloc" - Tại sao? Để giảm thiểu rủi ro va chạm đống / đống?
rzetterberg

@rzetterberg Nhiều hệ thống nhúng tránh sử dụng phân bổ bộ nhớ động vì nó có thể dẫn đến sự phân mảnh và không xác định
Toby Jaffey

8

Các câu trả lời khác là tuyệt vời, nhưng sự khác biệt lớn nhất giữa một người có sở thích và một chuyên gia nên là một suy nghĩ về chất lượng. Vì vậy, hãy để dự án của bạn đi hết con đường, đừng dừng lại khi bạn hoàn thành 80% với một dự án. Thực hiện theo mọi cách, chứng minh rằng nó đang hoạt động và ghi lại chính xác.

Hãy chắc chắn rằng mã của bạn có thể đọc và duy trì.

Và đừng quên vui vẻ nhé :)


7

Ngoài điều hiển nhiên, như học C và bắt đầu với một số ban phát triển, bạn sẽ muốn học cách đọc các bảng dữ liệu vi điều khiển .
Các nhà sản xuất thêm ngày càng nhiều tính năng cho vi điều khiển, do đó ngày càng trở nên phức tạp hơn. Bảng dữ liệu không chỉ cung cấp các đặc tính điện (điều này thú vị hơn đối với kỹ sư điện tử so với nhà phát triển phần mềm), mà còn mô tả chi tiết về các thanh ghi, bản đồ bộ nhớ, v.v.
Lần đầu tiên đọc một biểu dữ liệu có thể trông khó xử, nhưng không hiểu chúng có thể gây ra đau đầu nghiêm trọng hơn trong giai đoạn gỡ lỗi.


3

'Nhúng' là một chút của thuật ngữ được tải ..

Trong một số khía cạnh, bất kỳ hệ thống nào dành riêng để chạy một ứng dụng có thể được gọi là hệ thống nhúng, miễn là có một số phần cứng được kiểm soát. Bạn có thể gọi một chiếc PPC.60 400 MHz với 2GB RAM đang chạy một ứng dụng java trên hệ điều hành linux, nếu nó tình cờ kiểm soát một quá trình thông qua các mô đun I / O cục bộ. Mặt khác, một arduino chỉ chạy một loại ứng dụng mạng tối thiểu nào đó sẽ không phải là một hệ thống nhúng. Nhưng có lẽ 'nhúng' làm cho hầu hết mọi người nghĩ về bộ điều khiển dựa trên flash chỉ với vài trăm byte RAM, không có hệ điều hành để nói và rất nhiều thiết bị ngoại vi trên chip.

Điều đó đang được nói, có lẽ hai rào cản lớn nhất mà các lập trình viên không nhúng thường gặp phải khi học các hệ thống nhúng là các thanh ghi I / O và các ngắt.

Các ngắt thực sự có thể dễ dàng hơn trong hai khái niệm đối với các lập trình viên không nhúng, vì các vấn đề chính với các chương trình này, đồng thời và lập trình hướng sự kiện, thường gặp trong các ứng dụng chính. Điều làm gián đoạn một nỗi đau là nhận ra sự nhạy cảm cực độ của một hệ thống đối với chất lượng xử lý ngắt của nó và sự phức tạp của việc xử lý phần cứng để xóa điều kiện ngắt và thiết lập cho điều kiện tiếp theo. Với GUI, bế tắc sẽ giết chết ứng dụng. Với một trình xử lý ngắt, sự bế tắc khiến toàn bộ hệ thống của bạn bị khóa.

Các thiết bị I / O dường như là khu vực gây ra nhiều khó khăn nhất. Đối với những người không quen biết, có thể khá ngạc nhiên khi phát hiện ra rằng việc đọc đăng ký này ở đây có ảnh hưởng đến đăng ký đó . Viết 1 'để xóa bit. Các bit trạng thái tự xóa khi bạn đọc một thanh ghi dữ liệu, v.v ... Có rất nhiều khả năng với phần cứng I / O không có quy tắc chung để xử lý nó, ngoại trừ tìm hiểu cách tìm và giải thích các bảng dữ liệu của thiết bị. Viết trình điều khiển thiết bị cho cổng nối tiếp sẽ dạy cho bạn nhiều về lập trình I / O cấp thấp.

Thực sự không có gì thay thế cho việc học những điều này ngoài việc xắn tay áo lên và lập trình một số ngôn ngữ C và / hoặc lắp ráp thẳng trên kim loại trần. Ngay cả hệ thống nhúng dựa trên java đã nói ở trên cuối cùng cũng cần trình điều khiển thiết bị cho I / O và điều này có nghĩa là cuối cùng xử lý một số C. Kinh nghiệm là giáo viên tốt nhất. Chọn một vi điều khiển, có thể là MSP430, TMS320, AVR, ARM, PIC, 68HC11, bất cứ điều gì, tìm một bộ eval và xây dựng một số hệ thống.


3

$50to$nhưng bạn cần hàn cho pro mini. Tôi không phải là một người hâm mộ của gia đình PIC nhưng bạn có thể muốn lấy một cái gì đó như một bài học lịch sử, tương tự với 8051, cả hai gia đình vẫn phổ biến và được sử dụng, chỉ là không hiệu quả và đã được các kiến ​​trúc khác truyền lại. Hoàn toàn học ARM và ngón tay cái, có thể là MIPS (là pic-32, không bị nhầm lẫn với kiến ​​trúc PIC gốc cũ hơn). ARMmite Pro là một bo mạch ARM cấp tốt, mặc dù Stellaris cũng có thể như vậy.

Những gì bạn muốn tìm hiểu ở đây là trình biên dịch cho các nền tảng khác nhau. C. C và tương tác lắp ráp. Các công cụ khác nhau GCC và không GCC. Làm thế nào để đọc một tài liệu tham khảo / lập trình viên (và nhận ra rằng tất cả chúng đều có một số lỗi hoặc có thể gây hiểu lầm, không bao giờ tin tưởng chúng, phần cứng chiến thắng các tài liệu) và cách đọc hoặc sử dụng sơ đồ. Đây không phải là sơ đồ phức tạp thông thường. Một số bảng tốt cho việc can thiệp vào các dự án có nghĩa là chúng không có rác trên bảng, chỉ cần truy cập trực tiếp vào các chân I / O. Nhưng đó không phải là tốt nhất cho việc học. Một cái gì đó giống như một StellarisHội đồng quản trị gây đau khổ cho các dự án có rất nhiều nội dung thú vị trên tàu để học nhúng và học cách mượn / sử dụng trình điều khiển hoặc tự viết từ datasheets. Bướm Atmel AVR cũng là một bảng tốt nếu vẫn còn, có thể cần hàn trên cổng nối tiếp của riêng bạn để lập trình nó hoặc chỉ kẹt một số dây trong các lỗ. Những gì nó mang lại cho bạn là một vài thiết bị ngoại vi bạn có thể học lập trình.

Ngay cả khi bạn kết thúc công việc nhúng liên quan đến việc viết ứng dụng bằng cách sử dụng các lệnh gọi SDK hoặc API trên linux hoặc RTOS (không bao giờ chạm vào phần cứng hoặc đọc dữ liệu), kiến ​​thức trên vẫn sẽ đưa bạn đi trước phần còn lại.


3

Bài viết này (tự động dịch từ tiếng Bồ Đào Nha sang tiếng Anh) có một cái nhìn tổng quan về phát triển sự nghiệp với tư cách là nhà phát triển phần mềm nhúng. Lưu ý: Bản gốc ở đây .

Nó bắt đầu bằng cách phác thảo các lĩnh vực kiến ​​thức bạn phải phát triển:

  1. Kiến thức: Bạn phải biết lý thuyết liên quan đến các hệ thống nhúng. Điều này có nghĩa là phần cứng và phần mềm. Không thể là nhà phát triển có thẩm quyền của phần mềm nhúng mà không cần biết kiến ​​trúc phần cứng đang hoạt động.

  2. Kỹ năng: Bạn cần có được kinh nghiệm trong khu vực. Cần thực hành. Bạn có thể trang trí tất cả các bản ghi nhớ của trình biên dịch PIC, nhưng sẽ không có ích gì nếu bạn không thể lái một đèn LED với kiến ​​thức này.

  3. Thái độ: Trên tất cả, bạn cần có thái độ sẽ khiến bạn phát triển trong lĩnh vực này. Đó là một rất năng động với những thay đổi và phát triển thường xuyên. Bạn cần phải luôn luôn có động lực (a) tự học, thích học hỏi, "điều chỉnh" và hiểu cách mọi thứ hoạt động. Nếu không có thái độ như vậy sẽ cung cấp cho bạn sớm. Bởi vì khu vực này bạn cần phải rất, rất kiên trì.

Sau đó, nó đưa ra các mẹo sau để làm chủ các lĩnh vực này (và phát triển chúng với văn bản hơn nữa, đây chỉ là các tiêu đề):

  1. Những gì bạn cần để học phần cứng (ít nhất)
  2. Những gì bạn cần để học phần mềm (ít nhất)
  3. Ngoài ra, nghiên cứu hệ điều hành
  4. Bạn cần được đào tạo
  5. Đừng dừng lại, tiếp tục học hỏi và phát triển mạng lưới của bạn!

1
Cảm ơn các liên kết! Bản dịch của Google dường như chỉ ra rằng nó phù hợp hoàn hảo cho câu hỏi này. Tuy nhiên, chúng tôi muốn (1) văn bản bằng tiếng Anh (chúng tôi là cộng đồng nói tiếng Anh , mặc dù nhiều người trong chúng tôi ít nhất là song ngữ) - Chỉ dịch tự động nếu bạn phải (2) câu trả lời bao gồm một bản tóm tắt của bài viết trong trường hợp liên kết bị chết. Tôi đã chỉnh sửa bài đăng của bạn để tuân thủ các nguyên tắc này và cung cấp cho bạn thông báo về nó!
Kevin Vermeer

2

Hãy suy nghĩ kỹ trước khi bạn trở thành một kỹ sư phần mềm nhúng. Tôi đã có những giai đoạn trong sự nghiệp của tôi. Tôi đã phát triển phần mềm trong 5 năm đầu tiên, hơn là chuyển sang bán hàng / tiếp thị, thực hiện điều đó trong 15 năm, quản lý một doanh nghiệp 100 + M $ và bây giờ tôi trở lại với phần mềm.

Khi tôi trở lại phần mềm sau 15 năm, tôi nhớ tại sao tôi lại rời đi ngay từ đầu. Thật khó Nó cần sự tập trung, vài trăm dòng mã chạm vào nhau và tất cả các bạn cần giữ nó trong bộ nhớ. Nhúng đặc biệt khó.

Bạn cũng cần hiểu chính mình. Nếu bạn nói chung là một chàng trai thông minh, tỉ mỉ và kiên nhẫn, bạn sẽ trở thành một kỹ sư tuyệt vời. Nếu bạn đang thiếu bất kỳ một trong những người bạn sẽ ở mức trung bình tốt nhất. Nghĩ về điều đó. Nếu bạn cực kỳ thông minh và không kiên nhẫn, sẽ không đáng bao nhiêu vì dù bạn có thông minh đến đâu, kỹ thuật giỏi vẫn cần sự kiên nhẫn và chú ý đến chi tiết.

Bạn cũng cần phải thoải mái nhìn vào giờ mã mà không nói chuyện. Tôi quan sát rằng những người có kỹ năng xã hội tốt thấy điều này không thể chịu đựng được.

Nếu tất cả những điều này kiểm tra, hơn là đọc tất cả những cuốn sách tuyệt vời đó, hãy làm bài tập và bạn sẽ trở thành một kỹ sư tuyệt vời .. Chúc may mắn


1

Mọi người khác nói những điều tuyệt vời. Vì vậy, tôi sẽ cho bạn lời khuyên chung: đọc đọc đọc đọc đọc đọc đọc!

Đọc mọi bài viết trên http://embeddedgurus.com Nếu bạn không hiểu điều gì đó, hãy nghiên cứu nó. Nếu trong phần giải thích về những điều bạn tìm thấy điều gì đó bạn không hiểu, hãy đọc thêm. Tôi sắp hướng đến một vị trí phần mềm nhúng và kinh nghiệm của tôi là một số ít các dự án chuyên nghiệp trong vài năm qua và rất nhiều việc đọc. Kinh nghiệm cho phép bạn thử mọi thứ, nhưng đọc cho bạn biết liệu những điều bạn đã thử đã được thực hiện trước đó, có thể tốt hơn bạn có thể. Nó giới thiệu cho bạn các khái niệm mà bạn có thể làm việc trong mọi trường hợp.

Chỉ đọc thôi!


0

Trở thành một chuyên gia về C Hiểu thời gian và truyền thông nối tiếp. Bạn nên làm bẩn tay với nó. Hiểu các giao thức RF, điều chỉnh chúng theo yêu cầu của bạn. Đừng chỉ mù quáng thử kết hợp mã trong khi gỡ lỗi. Mã làm chính xác những gì bạn bảo nó làm. Đọc hướng dẫn sử dụng và bảng dữ liệu và sau đó thực hiện thay đổi nếu có gì đó không hoạt động. Tất cả những gì đã nói và làm, cách thực sự duy nhất để trở thành một chuyên gia là thực hành. Tiếp tục xây dựng các ứng dụng. Chẳng mấy chốc, nó sẽ trở thành bản chất thứ hai.

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.