Viết phần mềm nhúng với phần cứng


8

Hãy xem xét rằng nhóm phần cứng sẽ mất 2 tháng để phát triển một số phần cứng, nhưng đến lúc đó tôi sẽ cần phải có phần mềm sẵn sàng.

Câu hỏi của tôi là làm thế nào tôi có thể viết phần mềm và kiểm tra nó mà không cần phần cứng?

Có tiêu chuẩn / s nào được tuân theo không? Bạn làm nó như thế nào?


Tùy thuộc vào mức độ phức tạp của phần cứng, bạn có thể thử một trình giả lập. Điều đó hoàn toàn khả thi nếu nó chỉ là một bộ điều khiển vi mô với các thiết bị ngoại vi đơn giản. Hơn thế nữa và bạn không gặp may mắn trên con đường đó.
Cột

6
Cố gắng tìm các bảng phát triển cho micro và bất kỳ thiết bị ngoại vi nào khác mà bạn đang sử dụng và cố gắng kết nối tất cả chúng theo cách gần giống với thiết kế của nhóm phần cứng của bạn. Nó sẽ lớn và xấu xí, nhưng bạn sẽ có thể đặt cùng một hệ thống đó là đủ gần để thật - ít nhất là như xa như firmware của bạn có thể nói ...
brhans

Tệ nhất, nếu bạn không thể mô phỏng phần cứng đúng cách, hãy có cách vô hiệu hóa nó. Chỉ vài tuần trước tôi muốn thử nghiệm giao tiếp mạng với một chương trình khác, chỉ để thấy rằng nó sẽ exit()cố gắng để mmap các địa chỉ được mã hóa cứng trong / dev / mem.
isanae

1
Trong nhiều trường hợp, thực sự tốt hơn là sử dụng một trình giả lập để phát triển phần mềm nhúng - dễ gỡ lỗi hơn nhiều. Vấn đề, tất nhiên, là bạn cần một trình giả lập phong nha. Đôi khi có một cái chung có thể được điều chỉnh, đôi khi một thực tập sinh thông minh có thể viết một cái trong một điên cuồng mã hóa bằng caffeine.
Licks nóng 7/2/2016

Câu trả lời:


34

Không có phần cứng trong giai đoạn đầu phát triển phần sụn xảy ra. Các chiến lược phổ biến để giải quyết vấn đề này là:

  1. Dành thời gian lên phía trước kiến ​​trúc hệ thống một cách cẩn thận trước khi bạn viết bất kỳ mã nào. Tất nhiên bạn vẫn nên làm điều này, nhưng trong trường hợp này nó thậm chí còn quan trọng hơn bình thường. Dễ dàng gỡ lỗi phần mềm hơn là một mớ hỗn độn dựa trên mì ống.

  2. Mô đun hóa đúng mọi thứ, giảm thiểu các giao diện giữa các mô-đun. Điều này sẽ giúp chứa lỗi cho các mô-đun riêng lẻ và cho phép kiểm tra các mô-đun riêng lẻ dễ dàng hơn.

  3. Viết mã từ dưới lên, trình điều khiển chạm vào phần cứng đi trước, logic ứng dụng cấp cao cuối cùng. Điều này cho phép phát hiện ra những bất tiện do kiến ​​trúc áp đặt từ sớm. Đừng ngại thay đổi kiến ​​trúc khi thực tế phần cứng được đưa ra ánh sáng, nhưng hãy đảm bảo tất cả các tài liệu được cập nhật tương ứng.

  4. Mô phỏng. Hầu hết các công ty vi điều khiển cung cấp phần mềm giả lập phần mềm vi điều khiển của họ. Chúng chỉ có thể đi rất xa, nhưng vẫn có thể rất hữu ích. Mô phỏng các đầu vào và đo các đầu ra của phần cứng có thể khó khăn, nhưng kiểm tra logic mức cao hơn theo cách này không quá khó.

    Đây là nơi thiết kế mô-đun giúp một lần nữa. Nếu bạn không thể mô phỏng hợp lý một số tương tác phần cứng cấp thấp, bạn sử dụng một phiên bản khác của mô-đun chạm vào phần cứng đó nhưng chuyển các hành động mô phỏng của chính nó lên các cấp cao hơn. Các cấp trên sẽ không biết điều này đang xảy ra. Bạn sẽ không kiểm tra mô-đun cấp thấp theo cách này, nhưng hầu hết mọi thứ khác.

Nói tóm lại, hãy sử dụng các thực hành mong muốn phần mềm tốt, tất nhiên bạn nên làm bằng mọi cách.


Muốn thêm: lấy bảng dev (vâng, nhiều, vì có thể bạn sẽ giết ít nhất một ...) trong ASAP và đưa các trình điều khiển cấp thấp vào vị trí. Đơn vị kiểm tra càng nhiều mã của bạn càng tốt. Có, bạn có thể đơn vị mã chạm phần cứng. Không, bạn không thể mô phỏng hoàn toàn phần cứng, nhưng bạn có thể nhận được 90% chức năng chính xác ngay cả trước khi flash lần đầu tiên. Tôi đã làm tất cả những điều trên trong một dự án gần đây và chúng tôi có 99% chức năng tại chỗ và hoạt động khi phần cứng thực sự xuất hiện. Thật tuyệt vời.
CHendrix

13

Không có cái nhìn sâu sắc về những gì bạn đang phát triển, hoặc nhóm vi điều khiển mà phần cứng của bạn cuối cùng sẽ dựa vào, hầu hết các gia đình vi điều khiển đều có sẵn các hệ thống phát triển chi phí thấp có bộ ngoại vi chung, có thể cho phép bạn mô phỏng ít nhất một số phần cứng mục tiêu cuối cùng của bạn.


1
Đã đồng ý. Tôi sẽ từ nó mạnh mẽ hơn. Trong tình huống như thế này khi phần mềm phải được hoàn thành cùng lúc với phần cứng, tôi sẽ chỉ sử dụng một vi điều khiển có bảng phát triển hoặc đánh giá phù hợp.
Steve G

Ngay cả khi bạn đã có cái nhìn sâu sắc về những gì OP đang phát triển, hầu hết các gia đình vi điều khiển vẫn có sẵn các trình giả lập.
Olin Lathrop

Tôi sử dụng cả hai phương pháp. Tuy nhiên, tôi cũng để mắt đến các thiết bị kiểm tra dây chuyền sản xuất cần thiết. Bạn có thể kết hợp với các kỹ sư sản xuất và thiết kế phần cứng để kiểm tra trình điều khiển của bạn, sau đó có thể tạo thành một phần của thử nghiệm sản xuất. Nếu may mắn của bạn, họ thậm chí có thể xây dựng phần cứng cho một bảng phát triển / nguyên mẫu để họ cũng đi trước quá trình. Tất cả đều thuộc về cách bạn đưa ra yêu cầu trợ giúp ...
Spoon

Đây là câu trả lời tốt nhất cho câu hỏi này, vì tôi luôn có một bảng dev để lập trình các chức năng cốt lõi trước khi thử nó trên pcb.
lucas92

2

Tùy thuộc vào mức độ phụ thuộc vào phần cứng của ứng dụng, bạn có thể bắt đầu triển khai dự án trên một máy tính tiêu chuẩn (Windows, Linux ...). Hầu hết các truy cập ngoại vi nên được trừu tượng hóa, vì vậy nó không phải là vấn đề lớn để thực hiện một số chức năng giả, sẽ được thay thế sau này. Nếu không thể mô phỏng một số hành vi, ít nhất bạn có thể thực hiện một bản mô phỏng hệ thống (API ...), vì vậy việc triển khai thực tế sẽ diễn ra nhanh hơn và rõ ràng hơn, ngay khi phần cứng đã sẵn sàng.

Tất nhiên có nhiều thứ không thể mô phỏng, như hành vi thời gian thực hoặc trình điều khiển phần cứng phức tạp. Mặt khác, một ADC điều khiển ngắt có thể dễ dàng được mô phỏng bằng cách sử dụng một luồng đọc các giá trị từ một tệp hoặc một cổng mạng.

Tất nhiên tất cả điều này phụ thuộc nhiều vào các yếu tố khác nhau:

  • Bạn có thể sử dụng cùng một toolchain tương tự trên bộ điều khiển và pc (ví dụ gcc) không?
  • Làm thế nào phụ thuộc phần cứng là hệ thống?
  • Bạn có kinh nghiệm với lập trình pc như thế nào?

Tôi, với một người đang thiết kế khá nhiều mô-đun phần sụn trên máy tính trước.


Tương tự ở đây. Một số khác biệt giữa trình biên dịch (nội tại, từ khóa đặc biệt, HĐH nguồn đóng và ngăn xếp mạng không tương thích hoàn toàn với BSD) và lỗi (với C ++) buộc sử dụng nhiều tệp và bộ tiền xử lý cụ thể của tệp, nhưng bản thân mã có thể gần như giống nhau giữa DSP và PC. Đối với phiên bản PC, tôi có thể sử dụng kiểm tra lỗi thời gian chạy mạnh và nặng (CodeGuard) và khả năng gỡ lỗi của nó có thể được khớp trên các nền tảng nhúng. Phần thưởng bổ sung là tôi có thể có thêm vài thiết bị ảo cho bất kỳ thử nghiệm tải và mạng nào.
TMSZ

Với sự sẵn có của Raspberry Pi và BeagleBone, môi trường phát triển của bạn có thể dễ dàng trở thành môi trường thời gian chạy của bạn - không có vấn đề gì với toolchain, v.v. Ngoài ra, bạn có thể sử dụng valgrind / helgrind, gdb, v.v.
jhfrontz 8/2/2016

1

Cố gắng để có được một giả lập cho chip của bạn. Bạn nên mô phỏng tất cả các đầu vào dự kiến ​​và một số đầu vào bất ngờ cũng có. Modularize / trừu tượng như xa như bạn có thể và viết bài kiểm tra đơn vị. Nếu bạn có thể, những bài kiểm tra đó có thể trở thành một phần của mã thực tế của bạn và chúng biến thành một tính năng (bảng tự kiểm tra).

Nếu bạn không thể có được một trình giả lập, hãy trừu tượng hết mức có thể thông qua HAL (lớp trừu tượng phần cứng). Tất cả các trình điều khiển có được đằng sau nó. Cố gắng trừu tượng tất cả các hội đồng cụ thể nền tảng đằng sau một số lệnh gọi hàm C và nghĩ về những điều đó như các trình điều khiển. Viết phần còn lại dưới dạng mã C / C ++ di động và tạo HAL mỏng cho x86 và chạy nó trên máy của bạn với tất cả các trường hợp thử nghiệm.

Bằng cách đó, khi bạn nhận được phần cứng, bạn sẽ chỉ phải gỡ lỗi HAL. Nó càng mỏng, bạn sẽ gỡ lỗi nhanh hơn và mọi thứ hoạt động. Hãy nhớ rằng nếu bạn sử dụng lắp ráp dành riêng cho nền tảng để hoạt động nhanh hơn, bạn MUỐN RẤT NHIỀU để có được các bài kiểm tra chính xác bit .


Độ chính xác bit đặc biệt quan trọng nếu sử dụng DSP điểm cố định.
Ronan Paixão

Nó có thể hoặc không thể áp dụng cho một trường hợp cụ thể, nhưng nói chung độ chính xác bit có giá của nó. QEMU gần đây (2 năm trước) đã quyết định triển khai FPU chính xác bit, và nó đoán điều gì đã xảy ra với hiệu suất ?
Dmitry Grigoryev

Độ chính xác của bit không quan trọng lắm khi sử dụng FPU. Nó là cực kỳ quan trọng nếu sử dụng điểm cố định, mặc dù. Đặc biệt bởi vì phần mềm cố định điểm cần kiểm tra thêm ở mọi nơi.
Ronan Paixão

Đó là kết quả của thực hành mã hóa kém. Mọi người đã học cách đề phòng khi sử dụng a == bso sánh với phao, nhưng họ vẫn vô thức sử dụng chúng với số điểm cố định.
Dmitry Grigoryev

Trong khi thực hành mã hóa kém là một vấn đề, có nhiều vấn đề khác, đặc biệt là ở các trường hợp cạnh. Các dòng chảy đến với tâm trí một cách nhanh chóng, cũng như mất độ chính xác , làm tròn , bão hòachiều rộng so với dịch chuyển bit . Với tất cả điều đó, thật dễ dàng để bỏ qua một số mất chính xác trong các trường hợp thử nghiệm phổ biến. Vấn đề là khi ứng dụng của bạn đạt đến các trường hợp nhỏ hơn và các lỗi chuyển từ phân số sang các bit nguyên, điều này xảy ra nếu phạm vi bị tính toán sai. Chỉ cần kiểm tra trang tính năng Thiết kế điểm cố định của MATLAB để xem những gì khác có thể sai trong nháy mắt.
Ronan Paixão

1

Câu hỏi của bạn hơi rộng. Phần cứng (CTNH) có thể có nghĩa là phát triển ASIC / FPGA tùy chỉnh đầy đủ, DSP được lập trình trình biên dịch hoặc "chỉ" một hệ thống nhúng thông thường dựa trên bộ vi xử lý / bộ vi điều khiển / SoC, vv (tất nhiên SoC cũng có thể chứa DSP mà bạn có thể muốn lập trình ....). Đối với số lượng bán cao, làm cho nó một ASIC không phải là hiếm.

Nhưng đối với một dự án 2 tháng, tôi hy vọng nó sẽ dựa trên một số vi điều khiển:

Trong mọi trường hợp, bạn nên nhấn mạnh nhóm phần cứng cung cấp cho bạn một nguyên mẫu mà bạn có thể bắt đầu kiểm tra mã của mình trước thời hạn tuyệt đối - điều này có thể bao gồm một ban phát triển chung, như một số người đã đề cập, nhưng theo tôi đó là công việc cung cấp đúng cho bạn và cũng có khả năng một số thiết bị ngoại vi bắt buộc / tương tự để thử nghiệm.

Mô phỏng cũng có thể ở một mức độ nào đó, nhưng bạn vẫn có thể cần mô tả một số cảm biến / dữ liệu trong thế giới thực mà bạn có thể nhận được. Ở đây nhóm phần cứng cũng cần ít nhất là hỗ trợ bạn.

Ngoài ra, thiết kế phần mềm có thể được thực hiện và tất cả các mô-đun cấp cao có thể được triển khai và kiểm tra đơn vị mà không cần phần cứng thực sự. Lý tưởng nhất là bạn cũng sẽ xác định API cùng với nhóm phần cứng và họ sẽ cung cấp cho bạn các hàm cấp thấp nhất, do đó, bất kỳ thay đổi nào họ thực hiện ở phía phần cứng ở đó (ví dụ: chỉ cần xác định lại chân mà họ sử dụng), sẽ không luôn luôn quan trọng với bạn

Trong mọi trường hợp, giao tiếp là chìa khóa.


0

Có, Bạn có thể Phát triển mã của mình cho bảng mục tiêu trước khi lên bảng để chúng được xử lý.

Làm sao ?

Đầu tiên bạn phải biết mục tiêu chính của hệ thống đó. Vì vậy, từ điều này, bạn có thể chọn bộ điều khiển một cách thích hợp từ nguồn có sẵn rộng lớn như digikey, mouser.

Và chọn giả lập như Proteus. Điều này sẽ mô phỏng bộ xử lý / bộ điều khiển chính xác bây giờ bạn có thể bắt đầu mã hóa. Nhưng bạn không thể mong đợi sự chính xác như trong phần cứng.


Tại sao downvote? Tôi có thể biết những gì là sai với câu trả lời này?
Photon001
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.