Cần trợ giúp trong việc chọn kích thước Flash trong vi điều khiển


9

Tôi cần quyết định khi chọn kích thước Flash và RAM cho một dự án. Bộ điều khiển vi mô tôi thích sử dụng là TI MSP430 series. Bởi vì tiêu thụ điện năng thấp và chi phí dòng dòng giá trị của nó. Tuy nhiên tôi là một người mới hoàn toàn quyết định thu thập yêu cầu. Hầu hết kinh nghiệm lập trình của tôi là trên các hệ thống dựa trên Máy tính để bàn, nơi thường có kích thước chương trình, RAM và tốc độ xử lý không phải là mối quan tâm lớn đối với các tác vụ thuật toán thông thường.

Tôi có những câu hỏi sau:

  1. Có bất kỳ hướng dẫn hoặc thực hành tiêu chuẩn nào liên quan đến việc quyết định kích thước RAM và Flash cho bộ điều khiển vi mô không?
  2. Có bao nhiêu dòng mã (C) chuyển thành số lượng kích thước Flash trên MCU?
  3. Có phải ngôn ngữ lắp ráp là lối thoát duy nhất nếu kích thước Flash cần giữ ở mức tối thiểu?

Liên quan đến việc lựa chọn chung một bộ điều khiển Micro cho một dự án, làm thế nào để các chuyên gia trong lĩnh vực này quyết định về bộ điều khiển vi mô phù hợp nhất cho nhiệm vụ? Những tài nguyên để họ tìm kiếm? Những hướng dẫn để họ làm theo?

Câu trả lời:


7

Câu trả lời cho tất cả các câu hỏi của bạn sẽ phụ thuộc vào những gì bạn muốn làm.

Như bạn đã nói, bạn là người mới, vì vậy tôi khuyên bạn nên sử dụng vi điều khiển lớn nhất và chỉ cần thử thực hiện dự án. Sau này, bạn có thể hình dung được bao nhiêu mã bạn sử dụng và sau đó chia tỷ lệ theo mã được sử dụng.


Đã đồng ý. Bắt đầu với một cái gì đó lớn, và sau đó nếu cần thiết giảm xuống phần nhỏ nhất đáp ứng yêu cầu cuối cùng của bạn.
W5VO

"Lớn nhất" cần phải đủ tiêu chuẩn với "Trong chuỗi bạn đang nhắm mục tiêu". Tìm các thiết bị ngoại vi bạn cần và lớp tốc độ bạn cần, chọn một kiến ​​trúc / gia đình và sau đó phát triển với bộ xử lý lớn nhất trong gia đình đó. Đừng bắt đầu với thứ gì đó có 512kB Flash và 64kB RAM vì đó là bộ vi điều khiển lớn nhất bạn có thể tìm thấy; thu hẹp nó xuống Cortex-M3 so với AVR so với PIC18 so với MSP430 (ví dụ) trước khi bạn bắt đầu lo lắng về kích thước. Tôi nghi ngờ rằng Daniel mong đợi điều này, nhưng chỉ nghĩ rằng nó cần phải được nêu ở đâu đó.
Kevin Vermeer

7

Theo như msp430, nó là một kiến ​​trúc tốt, các công cụ khá tốt hiện có mspgcc và mspgcc4 và llvm cho vấn đề đó. binutils mà không vá. Bạn có thể nhận được một bệ phóng với giá dưới 5 đô la với mức giá đó, hãy mua một ít (cuối cùng bạn sẽ gạch một cái gì đó hoặc rút ngắn nó ra và làm nó tan chảy, có một phụ tùng, đặc biệt ở mức giá này) ...

Tải xuống các công cụ, tất cả đều miễn phí, viết một vài dòng mã, tìm hiểu cách liên kết nó, xem mức độ lớn của nhị phân, cảm nhận về nhúng, dòng mã đến kích thước rom, v.v.

Làm thế nào để làm điều đó làm. Chỉ là về mọi cách bạn có thể tưởng tượng:

Một số công ty ủy thác đi xuống từ trên cao và bạn không thể làm gì khác ngoài việc nghỉ việc. Và bạn có thể không bao giờ biết tại sao nền tảng đó được chọn.

Đôi khi nhà thầu / khách hàng yêu thích ra lệnh cho nền tảng, đôi khi bạn có thể giáo dục / đàm phán, đôi khi không.

Một số người chỉ có một yêu thích, sợ những điều chưa biết, bất cứ điều gì. Lý do tương tự tại sao một số người chỉ mua một thương hiệu xe hơi, vì bố tôi đã làm và bố ông đã làm trước đó, và đó có thể là toàn bộ lý do.

Một số người tập trung vào các công cụ. Ở đây, một lần nữa bạn có những người trung thành với thương hiệu, giới hạn bản thân trong công ty biên dịch yêu thích của họ và bất kỳ mục tiêu nào họ hỗ trợ, hoặc công cụ nguồn mở yêu thích và những gì hỗ trợ. Yêu thích hệ điều hành nhúng và giới hạn cho các mục tiêu hỗ trợ.

Trong một số trường hợp, đó là về các công cụ nhưng theo một cách khác, theo thời gian, bạn có thể đã đầu tư rất nhiều tiền vào các hợp đồng hỗ trợ hàng năm với một nhà cung cấp (ví dụ như arm hoặc xilinx hoặc motorola) và có thể bạn thích sự hỗ trợ của họ và không muốn thay đổi hoặc ma quỷ bạn biết là tốt hơn ma quỷ bạn không. Hoặc có thể là do 5 dự án đang hoạt động khác trong công ty sử dụng điều này và chúng tôi đã có hợp đồng hỗ trợ và sẽ tiếp tục trả tiền cho năm đó sau năm bạn phải chọn một trong những giải pháp của nhà cung cấp đó.

Đôi khi nó là về tiết kiệm millipennies. Phần này rẻ hơn 1,5% so với phần đó, làm cho nó hoạt động với phần này, không quan tâm đến NRE, hãy nghĩ về việc tiết kiệm sản xuất về số lượng.

Đôi khi nó là về những tiêu cực. Một nhà cung cấp có thể đã lừa công ty của bạn bằng cách này hay cách khác. Không đáp ứng việc cung cấp các bộ phận được quảng cáo gây chậm trễ hoặc hủy sản phẩm của bạn. Lừa đảo và chuyển đổi (phí 50.000 đô la cho phần mềm không bao gồm phí 1200 đô la cho khóa cần thiết để mở khóa giấy phép, đó là một mục chi phí bổ sung. Ồ và đó là cho mỗi người dùng cho giấy phép nổi). Khi bạn ký NDA để xem hướng dẫn tham khảo của lập trình viên hoặc hướng dẫn thiết kế tham chiếu, bạn sẽ thấy kỹ thuật của họ đáng sợ đến mức nào và bạn có thể chọn đưa vào danh sách đen tất cả các sản phẩm của họ suốt đời. Lịch sử quá khứ với sự hỗ trợ công nghệ khủng khiếp. Bất kỳ lý do nào cũng có thể khiến bạn không bao giờ cho phép nhân viên bán hàng của họ ở cửa trước hoặc khiến bạn không bao giờ nhìn vào trang web của họ nữa.

Đôi khi nó liên quan đến hiệu suất, giao diện, v.v ... Trường hợp nói rằng bạn có một giao diện được nối bằng dây và cần kéo lên, thương hiệu vi điều khiển XYZ với giá 3 đô la cho mỗi phần có một bộ chân I / O có thể được sử dụng không yêu cầu phần cứng bên ngoài nào khác, thương hiệu ABC có một phần 3 đô la sẽ yêu cầu một bóng bán dẫn và điện trở bên ngoài để làm cho nó hoạt động ở mức tối thiểu. Ví dụ về msp430 của bạn, nói về tiêu thụ năng lượng, phần A chỉ có thể yêu cầu người dùng sử dụng một pin AAA và chạy trong nhiều tháng, phần B có thể cần hai pin AAA và chạy trong nhiều tuần.

Trường hợp hiếm nhất trong tất cả là thực sự làm kỹ thuật, khảo sát tất cả các nhà cung cấp, làm toán tiêu thụ năng lượng, giá trên mỗi đơn vị toán sản phẩm của bạn, mức độ lớn của một rom chúng ta cần và tần số để chạy chip, keo logic, trên và trên. Thông thường, ai đó (sếp / khách hàng / kỹ sư cao cấp) mất nhiều năm kinh nghiệm và bắn từ hông (thường sử dụng một hoặc nhiều điều trên) để chọn con đường (thường là một con đường tốt giúp tiết kiệm hàng tấn thời gian trong lịch trình và đô la) và kỹ thuật được thực hiện một lần để tinh chỉnh nền tảng đã chọn.

Đề nghị cá nhân của tôi là phải linh hoạt. Hầu hết các thương hiệu / gia đình vi điều khiển dưới một số hình thức hoặc thời trang có thể có trên một bảng eval với giá dưới 50 đô la. Sparkfun, olimex hoặc trực tiếp từ nhà cung cấp (ti cho msp430 hoặc stellaris, v.v.). Hãy thử một hoặc nhiều cái, cảm nhận về điểm chung và điểm khác biệt, công cụ, trình tải, mức độ khó để mở khóa, v.v. Bạn ít nhất nhận được hai điều từ điều này, một là khi bạn bị ép xuống một con đường từ trên cao hoặc khách hàng bạn có thể bắt đầu chạy, thứ hai là khi đến lượt bạn chọn nền tảng, bạn được giáo dục tốt hơn về những gì đang và không ở ngoài đó và có thể chọn nền tảng (từ được tải) đúng dựa trên vấn đề được giải quyết.

Ngay cả khi bạn không hoặc không thể ra ngoài và chi số tiền đó cho phần cứng, hầu hết đều có các công cụ mà bạn có thể tải xuống (miễn phí), trong trường hợp như microchip, giờ đây bạn có thể có trình biên dịch C (trước đây là Hi-tech) nhưng phải đăng ký (từ bỏ địa chỉ email của bạn). gcc thích nó hoặc ghét nó sẽ có trong tương lai của bạn, máy tính để bàn hoặc nhúng, làm bẩn tay bạn và học cách sử dụng nó như một trình biên dịch chéo. Hãy thử llvm quá, nó sẽ xuất hiện trong một thời gian và cung cấp cho gcc một số cạnh tranh nghiêm trọng. Dù sao thì viết hoặc tìm một số trình giả lập, mame có nhiều, gdb có một số, v.v. Tôi đã viết một cái gọi là ngón tay cái ở github, chỉ chế độ ngón tay cái ARM, tương tự như cortex-m3 trừ tôi không hỗ trợ ngón tay cái 2 (vẫn có thể tìm hiểu khá nhiều và có các chương trình chạy trên cả hai trước khi bạn chuyển sang chỉ phần cứng). Tôi đã đánh cắp một trình giả lập msp430 nhưng hơi bị đình trệ về điều đó. Bộ hướng dẫn nhỏ đến mức phần lớn công việc là một buổi tối hoặc có lẽ là một dự án thứ bảy. Tương tự với PIC, một buổi chiều dài và bạn có một trình mô phỏng tập lệnh để thực hành nhúng. Nếu không có gì khác, bạn chỉ có thể viết các chương trình biên dịch và liên kết để cảm nhận về cách thực hiện điều đó và mức độ lớn của các chương trình, làm thế nào để điều chỉnh các chương trình để tạo mã chặt chẽ hơn, v.v.

Theo như C vs lắp ráp, một số bộ hướng dẫn là C thân thiện và một số thì không. Một số trình biên dịch là trung bình và một số thực sự xấu và chỉ một số trình biên dịch thực sự tốt (và thường tốn vài nghìn đô la một lần hoặc mỗi năm để sử dụng). Như với hiệu suất ở bất cứ đâu nếu bạn muốn thực sự thúc đẩy nó, một hỗn hợp ngôn ngữ cấp cao (chỉ cần nói C) và trình biên dịch có thể được yêu cầu. Vì vậy, kỹ năng không phải là viết toàn bộ ứng dụng trong trình biên dịch chương trình, kỹ năng là xác định mã nào khiến bạn không đáp ứng thời gian / hiệu suất và sau đó biết cách giải quyết thông qua C, tùy chọn trình biên dịch, chọn trình biên dịch phù hợp hoặc trình biên dịch viết.

Tôi khuyên bạn nên biết trình biên dịch cho tất cả các nền tảng bạn chọn sử dụng, nếu không có kiến ​​thức nào khác về nó như được nhúng, tôi khuyên bạn nên tháo rời thường xuyên (trong khi tìm ra vấn đề về hiệu suất của bạn). Nhiều nền tảng mà một số trình biên dịch được yêu cầu hoặc mong muốn cho mã khởi động.

Nếu bạn muốn tiết kiệm 10-20% giá mỗi đơn vị và muốn mua bộ vi điều khiển hoặc bộ tạo dao động rẻ hơn / chậm hơn, hoặc phần flash 32Kb thay vì phần flash 64KB và có thể trang trải chi phí phát triển với khối lượng bán hàng, và có lẽ một danh sách dài những thứ khác mà bạn rất có thể chọn để viết toàn bộ trong trình biên dịch, nhanh, công suất thấp, chi phí thấp, khách hàng hài lòng.

Tùy thuộc vào nền tảng của bạn cho đến nay, có lẽ bạn không nên lo lắng về việc viết trong tất cả các trình biên dịch và có thể về các khía cạnh kỹ thuật điện của nhúng với vi điều khiển, đọc sơ đồ, biết những gì bộ sưu tập mở, trạng thái tri, đẩy kéo, pwm, adc, dac, và một danh sách dài các điều khoản khác và làm thế nào để sử dụng chúng. bit banging i2c, spi, mdio, dallas một dây, v.v ... Sử dụng một phạm vi như một trình gỡ lỗi phần mềm. Mặc dù phạm vi có thể làm nổi bật mọi thứ cho bạn ngày hôm nay (một mục chi phí bổ sung), bạn sẽ có thể đánh mắt i2c và spi và một số giao thức khác mà không cần các điểm nổi bật.

Tôi cũng khuyên rằng đối với mỗi nền tảng bạn chơi cùng, hãy thoát khỏi hộp cát của ai đó (ví dụ như môi trường lập trình / ide Arduino). Viết mã khởi động đưa bộ xử lý từ thiết lập lại vào chương trình chính () của bạn, làm hết sức có thể để hiểu cách tải / lập trình đèn flash đến điểm có thể liên quan đến việc ghi trình tải của riêng bạn mặc dù các giá đỡ là ở đó Đó là tất cả về giáo dục cá nhân, bạn càng biết nhiều hơn và có thể rút ra khỏi túi sau của mình và sử dụng càng nhiều quyền kiểm soát đối với sự nghiệp của bạn và càng có nhiều số 0 ở cuối số trong bảng lương của bạn.

Dù bạn làm gì, KHÔNG, hãy cố gắng học x86 như trình biên dịch đầu tiên của bạn trên máy tính để bàn, chọn khá nhiều thứ khác và biên dịch chéo và mô phỏng, ARM, THUMB, MSP430, PIC, AVR, thậm chí 6502, 8051. x86 là một hướng dẫn khủng khiếp thiết lập và kết quả là đã được biến đổi và định hình theo nhiều cách, vi mã hóa, không mã hóa, đa lõi, trên và trên. Giữ các ngôn ngữ x86 đến cấp cao và hệ điều hành cồng kềnh. Sử dụng nó cho trình soạn thảo văn bản và trình biên dịch của bạn và nhắm mục tiêu một cái gì đó khác.

Xin lỗi vì câu trả lời dài ... hy vọng nó hữu ích.


hmmm, nếu câu hỏi là làm thế nào để thuận chọn kích thước của đèn flash. đôi khi viết một số mã giống với giải pháp, biên dịch và xem nó lớn như thế nào. Nếu một rtos sẽ được sử dụng, lấy một số mẫu và kích thước chúng và thêm một yếu tố mờ nhạt cho mã bạn sẽ thêm. Rất nhiều trong số đó phải làm với kinh nghiệm cá nhân khi ước tính. Thường thì bạn có thể chọn ước tính sau đó tăng gấp đôi chỉ trong trường hợp và sếp của bạn có thể tăng gấp đôi ước tính của bạn để anh ấy / cô ấy không gặp rắc rối và cứ thế. Và điều đó có thể giúp ích vì một khi được thực hiện, bạn có thể chuyển sang phần nhỏ hơn và trở thành anh hùng với khoản tiết kiệm.
old_timer

1
Mặc dù nó dài nhưng tôi thấy câu trả lời này rất hay
Sarrk 14/03/2015

3

Cách tốt nhất để xác định các yêu cầu flash / RAM cho dự án của bạn là xây dựng một nguyên mẫu và đo lường nó.

Thực hiện các thuật toán cốt lõi trên PC và tính toán kích thước của mã đối tượng và mức sử dụng RAM. Điều này sẽ cung cấp cho bạn một con số ballpark để làm việc với.

Đừng quên thêm nhiều hơn vào ngân sách của bạn nếu bạn đang dựa vào các tính năng của hệ điều hành, chẳng hạn như quản lý stdio hoặc bộ nhớ.

Không có cách nào trực tiếp để so sánh Dòng mã với kích thước mã được biên dịch. Nhưng, bạn có thể so sánh các kiến ​​trúc bộ xử lý về mật độ mã.


3

Tôi nghĩ cách tốt nhất để có được "cảm giác" về yêu cầu của bạn là gì, trong trường hợp này về mặt bộ nhớ là lấy một số mẫu của MCU, lập trình nó và xem có bao nhiêu bộ nhớ đang được sử dụng. Trong thực tế, nó sẽ phụ thuộc vào trình biên dịch được sử dụng. Nếu đây là lần đầu tiên bạn lập trình MCU, đừng bận tâm quá nhiều đến thông số kỹ thuật. Chỉ cần chọn một bộ nhớ có nhiều bộ nhớ, nhiều thiết bị ngoại vi, vv Bằng cách đó bạn có thể học được rất nhiều chỉ từ một MCU. Khi bạn thực hiện dự án đầu tiên của mình với MCU đó, bạn sẽ có một khái niệm tốt hơn về bộ nhớ mà bạn cần cho các dự án tiếp theo.

MCU thích hợp nhất cho một nhiệm vụ? Bạn cần bao nhiêu kênh ADC? Thế còn DAC? Điều gì quan trọng hơn trong ứng dụng của bạn: hiệu suất hoặc công suất thấp? Đó có phải là loại câu hỏi bạn phải trả lời khi chọn một MCU cụ thể.


3

Chọn một vi điều khiển có bộ ngoại vi mà bạn cần. Có lẽ sẽ có một họ micros có ngoại vi giống nhau / tương tự nhưng lượng RAM và Flash khác nhau. Bắt đầu với chip có RAM / Flash lớn nhất. Khi bạn có một nguyên mẫu hoạt động, bạn có thể thả xuống một micro rẻ hơn nếu chương trình của bạn phù hợp.


0

Các chuyên gia thực sự không chọn một bộ vi điều khiển riêng rẽ, họ điều hành một dự án để kiếm lợi nhuận tối đa. Tùy thuộc vào tiêu chí dự án có thể khiến vi điều khiển được chọn mà dường như quá đắt, nhưng lại phù hợp với chuyên môn, công cụ, thư viện sẵn có, v.v. Đừng đưa ra quyết định riêng biệt, hãy ghi nhớ bức tranh lớn , đặc biệt là tổng (chi phí phát triển + chi phí sản xuất)!

Hầu hết các nhà sản xuất vi điều khiển cung cấp nhiều loại chip, với kích thước flash là một trong những thông số khác nhau giữa các chip khác nhau. Lựa chọn 'an toàn' ban đầu là chọn chip có kích thước flash lớn nhất, do đó bạn có thể thu nhỏ lại nếu ứng dụng vừa với chip nhỏ hơn. Nhưng các ứng dụng có xu hướng phát triển để phù hợp với tất cả các kích thước có sẵn (và nhiều hơn nữa).

Kích thước flash IME không còn là một yếu tố chi phí lớn, thậm chí số lượng chân ít hơn một yếu tố, kích thước RAM dường như là trình điều khiển chi phí lớn nhất.

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.