Làm thế nào để bạn xác định bao nhiêu flash / RAM bạn cần cho một vi điều khiển?


24

Giả sử bạn đang bắt đầu một dự án nhúng với một số chức năng đã biết. Khi bạn chọn một vi điều khiển, làm thế nào để bạn chọn bao nhiêu RAM bạn cần?

Bạn có sử dụng bảng nhà phát triển và mã hóa dự án của bạn trước rồi xem bạn đã sử dụng bao nhiêu bộ nhớ và sau đó chọn một vi điều khiển phù hợp phù hợp với bộ nhớ đó không?

Bạn chỉ cần chọn một vi điều khiển mạnh mẽ cho một nguyên mẫu và sau đó thu nhỏ lại sau khi bạn có một sản phẩm làm việc?

Bạn chỉ cần chọn một cái gì đó mà bạn chắc chắn sẽ đủ và nếu bạn hết dung lượng, chỉ cần nâng cấp lên mật độ bộ nhớ cao hơn nếu không, bạn chỉ cần giữ bộ vi điều khiển hiện có?

Điều gì được coi là thực hành tốt?


Theo tôi, có vẻ như có thể, theo quan điểm lý thuyết thông tin, để ước tính yêu cầu RAM theo một thứ tự cường độ (kiểu suy luận theo chiều hướng), từ đặc tả nhiệm vụ. Hmmm ...
Lyndon White

Nếu bạn sử dụng các thư viện, bạn có thể nghiên cứu dấu chân bộ nhớ của họ. Với mã của riêng bạn, bạn phải đi với kinh nghiệm. So sánh dự án mới với dự án cũ và xác định xem bạn mong đợi nó lớn hơn hay nhỏ hơn.
jwsc

Câu trả lời:


20

Cá nhân cho các dự án sở thích tôi có xu hướng sử dụng vi điều khiển mạnh nhất trong gia đình với dấu chân phù hợp. Sau đó tôi phát triển PCB, viết một số mã và sản xuất một nguyên mẫu.

Điều này có lợi thế là tôi biết số lượng vi điều khiển khá tốt, vì vậy tôi có thể nhanh chóng tạo nguyên mẫu mà không cần phải đọc toàn bộ biểu dữ liệu. Tôi cũng có bảng đột phá và mẫu mã cho họ.

Nếu nó hoạt động và tôi kiếm được nhiều hơn một chút thì tôi sẽ mua bộ vi điều khiển rẻ nhất có các thiết bị ngoại vi phù hợp và đủ bộ nhớ cho bất cứ thứ gì tôi đã mã hóa trước đó. Điều này có thể gây khó chịu nếu các thanh ghi bên trong thay đổi (xảy ra trên PIC) hoặc nếu một trong hai vi điều khiển có thêm các thiết bị ngoại vi cần được vô hiệu hóa để làm cho mã hoạt động.

Tuy nhiên, với mục đích sản xuất, điều này sẽ cho phép bạn loại bỏ một số tiền kha khá từ mỗi đơn vị.


Đối với các dự án cá nhân của tôi, tôi có xu hướng sử dụng một cách tiếp cận tương tự. Đó cũng là phương pháp tương tự của creep vào văn phòng. Nó không sai, nó hoạt động, nhưng có những cách tốt hơn vv .. Đánh giá cao đầu vào!
efox29

Chắc chắn sẽ có những cách tốt hơn trong một môi trường "thực", chúng ta hãy chờ đợi câu trả lời khác!
David

Vắng mặt. Phát triển trong một hộp cát lớn, và cắt giảm sau đó. Thời gian bạn sẽ tiết kiệm sẽ nhiều hơn khoảng 4 đô la bạn chi cho mỗi vi điều khiển để phát triển. Điều này hoạt động cho nhiều hơn những thứ cấp độ sở thích - và trên thực tế thậm chí còn quan trọng hơn. Hình ảnh 12 người đang chờ đợi sự thay đổi sang bộ điều khiển lớn hơn sẽ xảy ra thay vì một !!
Scott Seidman

13

Tất nhiên, đối với một nguyên mẫu tự chế duy nhất, có thể là một đề xuất tốt để bắt đầu với mạnh nhất trong tất cả các kính hiển vi tương thích và giảm quy mô sau đó.

Tuy nhiên nếu bạn muốn giành được một báo giá, bạn phải nói với khách hàng của mình một mức giá trước khi bạn có tiền để thực hiện bất cứ điều gì.

Do đó, thực hành tốt là viết ra một số loại đặc tả trước khi bạn bắt đầu lập trình. Bạn biết những gì bạn muốn làm, và bạn nên viết ra cách bạn sẽ làm nó.

"Cách" này cũng bao gồm suy nghĩ về thiết kế phần mềm, trả lời các câu hỏi như:

  • Bạn có cần một hệ điều hành? Cái nào? Nó cần những tài nguyên gì?
  • Bạn có muốn có một kiến ​​trúc lớp? Điều này đòi hỏi các giao diện, có thể tiêu thụ RAM
  • Những thư viện nào đã có sẵn và hữu ích / cần thiết cho mục đích của bạn và chúng cần bao nhiêu bộ nhớ (một tài liệu thư viện tốt trả lời điều này dựa trên ít nhất một bản dựng tham chiếu)?
  • Những cấu trúc và biến nào bạn phải thực hiện cho trình điều khiển của riêng bạn và ứng dụng của bạn?

Tổng hợp tất cả các giá trị đó cung cấp cho bạn một ước tính sơ bộ. Bạn có thể tin tưởng bao xa tùy thuộc vào mức độ phân tích của bạn và nó phụ thuộc vào kinh nghiệm của bạn :-)
Thêm một biên độ ít nhất 30,50% ước tính của bạn chắc chắn là một ý tưởng tốt.

Khi sản phẩm của bạn kết thúc và bạn có khoảng 80,90% RAM đang sử dụng, bạn có thể khá chắc chắn rằng lựa chọn của mình là đúng - ít nhất là liên quan đến RAM.


2
Re: "80,90% RAM đang sử dụng". Thực hành tiêu chuẩn là đảm bảo rằng bạn chỉ sử dụng tối đa 50% mức sử dụng trong cả CPU và bộ nhớ để có thể đáp ứng các bản nâng cấp và sửa lỗi trong tương lai.
Dunk

1
@Dunk: Phụ thuộc vào doanh nghiệp. Trong Ô tô, 80% tất cả các tài nguyên (CPU, RAM, Flash) tại SOP thường được chấp nhận. Ví dụ, trong các thiết bị điện tử tiêu dùng giá rẻ có thể còn nhiều hơn nữa: Khả năng nâng cấp hệ thống trong vòng đời chỉ là 2-3 năm?
mic

@Dunk: Tôi có thể sai, nhưng có vẻ như bạn đã quen với phần mềm kiểu máy tính để bàn với bộ nhớ động và tất cả những điều không chắc chắn đi cùng với điều đó. Phần lớn các ứng dụng nhúng phân bổ mọi thứ tĩnh. Đảm bảo không bị rò rỉ bộ nhớ. Sau đó, bạn có thể sử dụng chính xác 100% và sẽ ổn mãi miễn là bạn không sửa đổi nó. Tất nhiên, điều đó chỉ hoạt động nếu bạn có một ngăn xếp riêng biệt từ RAM làm việc của bạn hoặc nếu bạn biết chính xác cách thức hoạt động của ngăn xếp mọi lúc. Đó là một ý tưởng tốt để dành một số không gian cho điều đó, nhưng 10-20% là đủ dễ dàng cho những gì tôi đã làm.
AaronD

Vấn đề lớn hơn trong phần mềm nhúng là con trỏ giả mạo, lỗi tràn bộ đệm, chia cho số 0 và những thứ tương tự. Một số MCU có thể đưa ra các ngoại lệ trong phần cứng, tương tự như các ngắt, nhưng mọi thứ tôi đã sử dụng sẽ vui vẻ tiếp tục như thể không có gì xảy ra. Sẽ có kết quả của một số loại, nhưng nó có thể không phải là những gì bạn mong đợi, và vì vậy bạn sẽ phải kiểm tra điều đó. Một số thứ, như số học trên / dưới, dễ dàng kiểm tra và sửa chữa ngay lập tức; những thứ khác, như con trỏ lừa đảo, có thể hoàn toàn không được chú ý cho đến khi một chức năng hoạt động trong nhiều năm quyết định nổ tung.
AaronD

3
Việc bạn muốn nhắm mục tiêu 80% hay mục tiêu 50% sẽ phụ thuộc vào khách hàng của bạn. Với thông số kỹ thuật cố định & chỉ sửa lỗi cần thiết, 80% là ổn. Thông số kỹ thuật không đáng tin cậy, creep tính năng dự kiến ​​và biên độ đủ lớn để cho phép nó có thể khiến bạn phải trả thêm tiền để có thêm khoảng không. Chúng tôi cuối cùng đã mua gấp đôi số bộ điều khiển vi mô mà chúng tôi cần và chọn những bộ điều khiển đủ ép xung để cung cấp cho chúng tôi hiệu suất chúng tôi cần, rẻ hơn nhiều so với thiết kế lại PCB cho chip mạnh hơn.
Đánh dấu gian hàng

3

Nếu chỉ có thể mã hóa hệ thống nhúng của bạn trước rồi mới xây dựng phần cứng. Điều đó sẽ làm cho cuộc sống của mọi người dễ dàng hơn. Thật không may, điều đó cũng có nghĩa là thời hạn của bạn đang ở ngoài cửa sổ. Thông thường, phần cứng phải được thiết kế từ lâu trước khi phần mềm được hoàn thành vì các bộ phận phần cứng thường có thời gian sử dụng dài.

Do đó, các nhà phát triển sw nhúng thường sẽ cần ước tính nhu cầu bộ nhớ và CPU của chương trình của họ. Bước đầu tiên của bạn là cố gắng thuyết phục những người làm phần cứng cung cấp cho bạn bộ vi điều khiển / CPU mạnh nhất với nhiều RAM nhất có thể. Điều đó hiếm khi hoạt động bởi vì họ có những mục tiêu yêu cầu của riêng họ, nhưng thỉnh thoảng bạn lại gặp may mắn.

Nếu điều đó không hiệu quả, thì điều tiếp theo bạn sẽ làm là thiết kế phần mềm cấp cao và chia các mô-đun thành chức năng. Sau đó, bạn ước tính các dòng mã cho từng chức năng cho từng mô-đun trong hệ thống. Sau đó, bạn có thể sử dụng một công thức để chuyển đổi các dòng mã thành ước tính bộ nhớ mã của ballpark. Bạn cũng sẽ điều tra bất kỳ yêu cầu bộ nhớ bất thường nào (như mảng lớn) và thêm một số ước tính để phù hợp với điều đó. Sau đó thêm một số phần trăm trên tổng số đó để trang trải mọi thứ bạn bỏ lỡ. Sau đó tăng gấp đôi để đáp ứng yêu cầu sử dụng 50% điển hình.

Vâng, nó cần có thời gian. Vâng, cần phải vượt qua tất cả các vòng vì việc thay đổi phần cứng thực sự khó khăn sau khi nó được xây dựng.


Chúng ta có thể tìm công thức để chuyển đổi dòng mã thành bộ nhớ mã ở đâu?
EasyOhm

Điều đó phụ thuộc vào ngôn ngữ và trình biên dịch bạn sử dụng. Nếu bạn sử dụng Trình biên dịch, một dòng gần bằng một từ bộ nhớ (bất kể kích thước từ của chip của bạn là bao nhiêu). Nếu bạn sử dụng C, nó có thể là khoảng 3-5 từ một dòng và nếu bạn sử dụng C ++ hoặc một cái gì đó thậm chí phức tạp hơn thì nó vẫn có thể nhiều hơn nữa. Điều tốt nhất để làm là biên dịch một vài chương trình được viết bằng ngôn ngữ đó và so sánh các dòng mã với bộ nhớ mã để lấy trung bình.
Dakkaron

2

Nói chung, các nhà cung cấp vi điều khiển đặt một loạt bộ nhớ trong các thiết bị của họ phù hợp với các ứng dụng thông thường. Vì vậy, nếu bạn chỉ cần một vài chân I / O và một SPI trong một thiết bị dấu chân nhỏ, bạn sẽ không thể tìm thấy bất cứ thứ gì xuất hiện với 500 kBytes Flash và 64 kBytes RAM. Với các thiết bị lớn hơn, gần với các gói SoC hơn, thậm chí nhỏ nhất gần như chắc chắn đủ lớn trừ khi bạn dự định thực hiện một số thao tác số nghiêm trọng như xử lý hình ảnh.

Trong một môi trường chuyên nghiệp, chìa khóa để chọn vi điều khiển phù hợp là sử dụng dữ liệu lịch sử. Bạn sẽ có một bản ghi về các dự án khác mà bạn đã phát triển và biết bộ nhớ và các tài nguyên silicon khác được yêu cầu để thực hiện từng tính năng. Bạn sẽ biết sản phẩm dự kiến ​​sẽ làm gì và do đó có một danh sách tính năng tốt và có thể tính toán nhanh chóng và chính xác các tài nguyên mà vi điều khiển sẽ cần cung cấp. Cố gắng đoán các yêu cầu tài nguyên từ một đặc tả thiết kế phía trước (được phát triển khi bắt đầu dự án khi có ít thông tin nhất về hệ thống) là không đáng tin cậy vào thời điểm tốt nhất và chỉ những kỹ sư rất có kinh nghiệm, đã xây dựng một cách toàn diện cơ sở dữ liệu của dữ liệu lịch sử trong đầu của họ, sẽ có bất kỳ loại thành công nào trong việc sử dụng phương pháp này.

Nhiều công ty đã áp dụng cách tiếp cận 'Agile' cho cả phần mềm và thiết kế điện tử, bao gồm xây dựng một 'thư viện' các bảng tính năng nhỏ (ví dụ: bảng RS-485, bảng ADC, v.v.) cùng với các bảng nền tảng chung chứa máy vi điều khiển , theo cách tương tự với việc sử dụng bộ phát triển và trình cắm. Một sản phẩm sau đó có thể được tạo mẫu nhanh chóng (trong vài giờ) bằng cách chọn và kết nối bộ bảng cần thiết cho các tính năng. Phần mềm được lắp ráp tương tự từ các mô-đun thư viện và có thể được chuyển và kiểm tra nhanh chóng. Một khi kích thước của phần cụ thể của phần cứng của mã được biết, thường là đủ để chọn phần nhỏ nhất sẽ chứa phần đó. Ngoại lệ là một đề cập ở trên, nơi chức năng của thiết bị liên quan đến dữ liệu lớn hoặc các thuật toán rất phức tạp. Phương pháp này cung cấp chính xác,

(Một ưu điểm khác của cách tiếp cận Agile là nó cho phép phát triển phần mềm và điện tử song song, với thiết kế điện tử là một bài tập trong việc tích hợp bộ bảng tính năng và thực hiện EMC liên quan và các công cụ khó khăn khác cùng lúc với phần mềm ứng dụng đang được phát triển trên các hội đồng protoype. Một số phần chuyển và tích hợp vẫn cần thiết, nhưng nó được thực hiện khi cả phần mềm và thiết bị điện tử đều khả dụng.)

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.