마이크로 컨트롤러에 필요한 플래시 / RAM의 양을 어떻게 결정합니까?


24

일부 알려진 기능으로 임베디드 프로젝트를 시작한다고 가정 해 봅시다. 마이크로 컨트롤러를 선택할 때 필요한 RAM 양을 어떻게 선택 합니까?

개발자 보드를 사용하여 프로젝트를 먼저 코딩 한 다음 사용한 메모리 양을 확인한 다음 해당 메모리에 맞는 적절한 마이크로 컨트롤러를 선택합니까?

프로토 타입을 위해 강력한 마이크로 컨트롤러를 선택한 다음 작동중인 제품을 구입 한 후 축소합니까?

충분하다고 확신하는 것을 선택하고 공간이 부족한 경우 더 높은 메모리 밀도로 업그레이드하면 기존 마이크로 컨트롤러를 유지합니까?

좋은 습관으로 간주되는 것은 무엇입니까?


정보 이론적 관점에서 작업 요구 사항에서 RAM 요구 사항을 크기 (차원 적 추론 스타일) 내에서 추정하는 것이 가능해야합니다. 흠 ...
린든 화이트

라이브러리를 사용하면 메모리 풋 프린트를 조사 할 수 있습니다. 자신의 코드로 경험을 쌓아야합니다. 새 프로젝트를 이전 프로젝트와 비교하고 더 크거나 작을 것으로 예상되는지 판별하십시오.
jwsc

답변:


20

취미 프로젝트의 경우 개인적으로 발자국이 올바른 가정에서 가장 강력한 마이크로 컨트롤러를 사용하는 경향이 있습니다. 그런 다음 PCB를 개발하고 코드를 작성하고 프로토 타입을 제작합니다.

이는 적은 수의 마이크로 컨트롤러를 상당히 잘 알고 있다는 장점이 있으므로 전체 데이터 시트를 읽지 않고도 신속하게 프로토 타입을 작성할 수 있습니다. 또한 보드와 코드 템플릿이 있습니다.

그것이 작동하고 소수보다 더 많이 만들고 있다면 올바른 주변 장치와 이전에 코딩 한 모든 것을위한 충분한 메모리가있는 가장 저렴한 마이크로 컨트롤러를 구입하십시오. 내부 레지스터가 변경되거나 (PIC에서 발생할 수 있음) 마이크로 컨트롤러에 코드가 작동하도록 비활성화해야하는 추가 주변 장치가있는 경우 이는 성 가실 수 있습니다.

그러나 생산 목적으로 각 단위에서 상당한 금액을 줄일 수 있습니다.


내 개인 프로젝트의 경우 비슷한 접근법을 사용하는 경향이 있습니다. 저와 같은 방법으로 사무실에 들어갑니다. 그것은 틀리지 않고 작동하지만 더 좋은 방법 등이 있습니다. 입력을 감사하십시오!
efox29

"실제"환경에는 더 나은 방법이있을 것입니다. 다른 답변을 기다리겠습니다!
David

절대적으로. 큰 샌드 박스에서 개발하고 나중에 줄이십시오. 절약 할 시간은 개발하는 데 마이크로 컨트롤러 당 추가로 4 달러를 소비하는 것 이상을 차지합니다. 이것은 취미 수준 이상의 것에서 작동하며 실제로 훨씬 더 중요합니다. 그림 12 사람들이 대신 큰 컨트롤러로 전환하기를 기다리고 있습니다 !!
Scott Seidman

13

물론, 하나의 수제 프로토 타입의 경우, 모든 호환 가능한 마이크로 중 가장 강력한 것으로 시작하여 나중에 축소하는 것이 좋습니다.

그러나 견적을 받으려면 구현할 돈이 있기 전에 고객에게 가격을 알려 주어야합니다 .

따라서 프로그래밍을 시작 하기 전에 어떤 종류의 사양을 작성하는 것이 좋습니다 . 당신은 알고 무엇을 당신이 원하는, 당신은 아래로 작성해야 하는 방법 당신이 그것을 할 것입니다.

이 "방법"에는 다음과 같은 질문에 대답하는 소프트웨어 디자인에 대한 생각도 포함됩니다.

  • 운영 체제가 필요하십니까? 어느 것? 어떤 리소스가 필요합니까?
  • 계층화 된 아키텍처를 원하십니까? RAM이 필요할 수있는 인터페이스가 필요합니다
  • 어떤 라이브러리가 이미 사용 가능하고 유용하고 필요한지, 그리고 필요한 메모리 양은 어느 정도입니까 (적절한 라이브러리 문서는 하나 이상의 참조 빌드를 기반으로 이에 대한 답변을 제공합니다)?
  • 자신의 드라이버와 응용 프로그램을 위해 어떤 구조와 변수를 구현해야합니까?

이러한 모든 값을 합하면 대략적인 추정치가됩니다. 얼마나 상세하게 믿을 수 있는지는 분석의 상세도에 따라 다르며 경험에 따라 다릅니다. :-)
최소한 30..50 %의 마진을 추가하는 것이 좋습니다.

제품이 완성되고 약 80..90 %의 RAM을 사용하고 있다면, 적어도 RAM과 관련하여 선택이 올바른지 확인할 수 있습니다.


2
다시 : "80..90 % RAM 사용". 표준 관행은 향후 업그레이드 및 버그 수정을 수용 할 수 있도록 CPU와 메모리 모두에서 최대 50 %의 사용률을 사용하도록하는 것입니다.
덩크

1
@ 덩크 : 비즈니스에 따라 다릅니다. 자동차에서는 SOP의 모든 리소스 (CPU, RAM, 플래시)의 80 %가 일반적으로 사용됩니다. 예를 들어, 저렴한 가전 제품의 경우 훨씬 더 클 수 있습니다. 수명이 2-3 년인 시스템에서 업그레이드 할 가능성은 얼마나됩니까?
마이크

@ 덩크 : 틀릴 수는 있지만 동적 메모리가있는 데스크탑 스타일 소프트웨어와 그에 따른 모든 불확실성에 익숙한 것처럼 들립니다. 임베디드 응용 프로그램의 대부분은 모든 것을 정적으로 할당합니다. 메모리 누수가 없음을 보장했습니다. 그런 다음 정확히 100 %를 사용하고 수정하지 않는 한 영원히 괜찮을 수 있습니다. 물론 작동하는 RAM과 별도의 스택이 있거나 스택이 항상 어떻게 작동하는지 정확히 알고있는 경우에만 작동합니다. 이를 위해 약간의 공간을 남겨 두는 것이 좋지만 10-20 %는 내가 한 일에 대해 쉽게 충분합니다.
AaronD

임베디드 소프트웨어에서 더 큰 문제는 불량 포인터, 버퍼 오버런, 0으로 나누기 등입니다. 일부 MCU는 인터럽트와 비슷한 하드웨어에서 예외를 던질 수 있지만, 내가 사용한 모든 것은 마치 아무 일도 일어나지 않은 것처럼 기뻐할 것입니다. 어떤 종류의 결과가 있을지 모르지만 아마 예상 한 결과가 아니므로이를 확인해야합니다. 산술 오버 / 언더 플로와 같은 일부 항목은 즉시 확인하고 수정하기 쉽습니다. 악의적 인 포인터와 같은 다른 것들은 몇 년 동안 작동했던 기능이 터질 때까지 완전히 눈에 띄지 않을 수 있습니다.
AaronD

3
80 % 목표 또는 50 % 목표를 목표로할지 여부는 고객에 따라 다릅니다. 고정 된 사양과 필요한 버그 수정 만 있으면 80 %가 좋습니다. 신뢰할 수없는 사양, 예상되는 기능 크립 및 충분한 여유 공간으로 인해 더 많은 헤드 룸에 추가 비용을 지불 할 수 있습니다. 우리는 한때 우리가 필요로하는 것보다 2 배 많은 마이크로 컨트롤러를 구매하고 필요한 성능을 제공 할만큼 오버 클럭 할 수있는 것을 선택했습니다. 더 강력한 칩을위한 PCB 재 설계보다 훨씬 저렴했습니다.
Mark Booth

3

내장 시스템을 먼저 코딩 한 다음 하드웨어를 구축 할 수 있다면 가능합니다. 그렇게하면 모든 사람의 삶이 더 쉬워 질 것입니다. 불행히도, 그것은 또한 마감일이 창 밖임을 의미합니다. 일반적으로 하드웨어 부품은 리드 타임이 길기 때문에 소프트웨어를 완성하기 훨씬 전에 하드웨어를 설계해야합니다.

따라서 임베디드 sw 개발자는 일반적으로 프로그램의 메모리 및 CPU 요구를 추정해야합니다. 첫 번째 단계는 하드웨어 담당자가 RAM을 최대한 활용하여 가장 강력한 마이크로 컨트롤러 / CPU를 제공하도록 시도하고 설득해야합니다. 요구 사항 목표가 있기 때문에 거의 작동하지 않지만 가끔씩 운이 좋을 수도 있습니다.

그래도 문제가 해결되지 않으면 다음 단계는 고급 소프트웨어 디자인이며 모듈을 기능별로 세분화하는 것입니다. 그런 다음 시스템의 각 모듈에 대한 각 기능에 대한 코드 줄을 추정합니다. 그런 다음 수식을 사용하여 코드 줄을 코드 메모리의 야구장 추정치로 변환 할 수 있습니다. 또한 대형 배열과 같은 비정상적인 메모리 요구 사항을 조사하고이를 수용 할 수있는 추정치를 추가합니다. 그런 다음 놓친 부분을 포괄하기 위해 그 합계에 백분율을 추가하십시오. 그런 다음 일반적인 50 % 활용 요구 사항을 충족시키기 위해 두 배로 늘리십시오.

예, 시간이 걸립니다. 예. 하드웨어를 만든 후에는 하드웨어를 교체하는 것이 매우 어렵 기 때문에 모든 후프를 뛰어 넘을 필요가 있습니다.


코드 줄을 코드 메모리로 변환하는 공식은 어디에서 찾을 수 있습니까?
EasyOhm

사용하는 언어와 컴파일러에 따라 다릅니다. 어셈블러를 사용하는 경우 한 줄은 메모리의 한 단어와 거의 같습니다 (칩의 워드 크기에 관계없이). C를 사용하면 한 줄에 약 3-5 단어가있을 수 있으며 C ++ 또는 훨씬 더 복잡한 것을 사용하면 훨씬 더 많을 수 있습니다. 가장 좋은 방법은 해당 언어로 작성된 몇 가지 프로그램을 컴파일하고 코드 라인과 코드 메모리를 비교하여 평균을 얻는 것입니다.
Dakkaron

2

일반적으로 마이크로 컨트롤러 공급 업체는 일반적인 응용 분야에 적합한 다양한 메모리를 장치에 넣습니다. 따라서 작은 풋 프린트 장치에 몇 개의 I / O 핀과 하나의 SPI 만 있으면 500kByte의 Flash와 64kByte의 RAM이 포함 된 제품을 찾지 못할 것입니다. SoC 패키지에 가까운 더 큰 장치의 경우 이미지 처리와 같은 심각한 수의 크 런칭을 계획하지 않는 한 가장 작은 장치라도 거의 충분히 클 수 있습니다.

전문적인 환경에서 올바른 마이크로 컨트롤러를 선택하는 데있어 핵심은 이력 데이터를 사용하는 것입니다. 개발 한 다른 프로젝트를 기록하고 각 기능을 구현하는 데 필요한 메모리 및 기타 실리콘 리소스를 알고 있어야합니다. 제품이 무엇을해야하는지 알기 때문에 좋은 기능 목록이 있으며 마이크로 컨트롤러가 제공해야하는 리소스를 빠르고 정확하게 계산할 수 있습니다. 시스템에 대한 최소한의 정보를 사용할 수있을 때 프로젝트를 시작할 때 개발 된 선행 설계 사양에서 리소스 요구 사항을 추측하는 것은 최상의시기에 신뢰할 수 없으며 종합적인 지식을 갖춘 숙련 된 엔지니어 만 자신의 머릿속에있는 과거 데이터의 데이터베이스는이 방법을 사용하는 데 어떤 종류의 성공을 거두게 될 것입니다.

많은 회사들이 마이크로 컨트롤러를 호스팅하는 일반 플랫폼 보드와 함께 소형 기능 보드 (예 : RS-485 보드, ADC 보드 등)의 '라이브러리'를 구축하는 소프트웨어 및 전자 설계에 대한 '애자일'접근 방식을 채택했습니다. 개발자 키트 및 플러그인을 사용하는 것과 유사한 방식으로 그런 다음 기능에 필요한 보드 세트를 선택하고 연결하여 제품을 신속하게 (시간 이내에) 프로토 타입 할 수 있습니다. 이 소프트웨어는 라이브러리 모듈과 유사하게 조립되며 신속하게 이식 및 테스트 할 수 있습니다. 코드의 하드웨어 특정 부분의 크기가 알려지면 일반적으로이를 포함 할 가장 작은 부분을 선택하는 것으로 충분합니다. 장치의 기능이 빅 데이터 또는 매우 복잡한 알고리즘을 포함하는 위에서 언급 한 예외는 예외입니다. 이 방법은 정확한

(애자일 접근 방식의 또 다른 장점은 소프트웨어와 전자 개발을 병렬로 수행 할 수 있다는 것입니다. elctronics 설계는 기능 보드 세트를 통합하고 관련 EMC 및 기타 어려운 작업을 동시에 수행하는 작업입니다. 응용 프로그램 소프트웨어는 protoype 어셈블리에서 개발되고 있지만 일부 포팅 및 통합은 여전히 ​​필요하지만 작동하는 소프트웨어와 전자 장치를 모두 사용할 수있을 때 수행됩니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.