2017-09-12 6 views
3

큰 목록 (약 4.8kbytes)이 포함 된 프로그램을 작성하려고합니다. 코드는 어셈블리에 있지만 더 큰 데이터 테이블 (약 5.4kbytes)이 있습니다.그림 조립 방법

+0

"4kbytes의 프로그램 공간과 256kbyte의 데이터 공간"- 거의 없습니다. – Olaf

+0

2700 줄의 DW = 5400B이므로 일부 잡을 수 있습니다. 어떤 줄이'DW'가 아니거나 그 테이블이 코드가 아닌 데이터 메모리에 들어가거나 오래된 데이터를 다시 쓰는'org' 지시자가 있거나 2700 줄이 없다면 결과 바이너리와 링크 맵을 확인하십시오 , 물건 및 섹션의 주소는 어디입니까? C에서 데이터 구조를 다시 만들지는 않겠지 만 실제 코드를 작게 만드는 것은 어려울 수 있습니다. – Ped7g

+2

우리는 개인지도 서비스가 아닙니다. 원저자에게 질문하십시오. 작동하는 경우 왜 다시 작성해야합니까? – Olaf

답변

3

데이터 시트의 메모리 구성 (3 장)을 살펴보면 프로그램에서 익숙한 8 비트 대신 14 비트가 사용된다는 것을 알 수 있습니다. 8 비트가 아니라 14 비트로 작성하면 75 % 더 많은 저장 용량을 얻을 수 있습니다.

어려운 부분은 8 비트 바이트를 14 비트 단어로 나눌 수있는 기능을 만드는 것입니다. 이 작업을 수행하려면 비트 필드와 함께 구조체를 사용하거나 쉬운 방법으로 1 바이트에 8 워드의 첫 번째 비트를 사용할 수 있습니다. 특수 명령어를 사용하여 단어의 상위 6 비트를 읽어야합니다.

가장 쉬운 방법은 14 비트 중 12 비트 만 사용하고 홀수 및 짝수 비트에 3 바이트를 분할하는 것입니다. 이것의 이점은 코드가 쉽고, 이상한지 또는 심지어 디코딩하는 방법을 알기 때문입니다. 14 비트를 읽는 것은 조금 더 까다 롭습니다. 이것은 asm (명령어 이름)이나 마이크로 칩이 제공하는 c 함수를 사용하여 수행 할 수 있습니다. (예를 들어 플래시 메모리를 읽고 쓰는 것에 대한 응용 노트를 찾으십시오).

데이터의 성격을 모르지만 압축을 허용하는 패턴이있을 수 있습니다. 일부 기본 압축 알고리즘은 생각만큼 힘들지 않습니다.

+0

저장하고자하는 데이터의 성질을 물어도 괜찮습니까? 프로그래밍 메모리가 작을 것으로 기대하십니까? –

2

PIC12LF1840 디바이스에는 4K 개의 프로그램 메모리가 있습니다. 하나의 프로그램 메모리 워드는 14 비트를 갖는다. 바이트

  • 전체 프로그램 메모리는 다음과 같습니다 4096 * 14 비트/= 7168 8 바이트

  • 귀하의 표는 4800 바이트, 그래서 코드의 나머지 부분은 다음과 같습니다 7168-4800 = 2368 바이트 또는 2368 * 8/14 = 1353 프로그램 단어.

    아무 것도 할 수없는 일! 프로그램 워드가 14 비트이기 때문에 주소 데이터 시트 간접 프로그램 메모리에

  • 확인, 3.6 절

  • 사용은 프로그램 메모리 테이블에서 을 단일 바이트를 추출하는 주소 비트.