큰 목록 (약 4.8kbytes)이 포함 된 프로그램을 작성하려고합니다. 코드는 어셈블리에 있지만 더 큰 데이터 테이블 (약 5.4kbytes)이 있습니다.그림 조립 방법
그림 조립 방법
답변
데이터 시트의 메모리 구성 (3 장)을 살펴보면 프로그램에서 익숙한 8 비트 대신 14 비트가 사용된다는 것을 알 수 있습니다. 8 비트가 아니라 14 비트로 작성하면 75 % 더 많은 저장 용량을 얻을 수 있습니다.
어려운 부분은 8 비트 바이트를 14 비트 단어로 나눌 수있는 기능을 만드는 것입니다. 이 작업을 수행하려면 비트 필드와 함께 구조체를 사용하거나 쉬운 방법으로 1 바이트에 8 워드의 첫 번째 비트를 사용할 수 있습니다. 특수 명령어를 사용하여 단어의 상위 6 비트를 읽어야합니다.
가장 쉬운 방법은 14 비트 중 12 비트 만 사용하고 홀수 및 짝수 비트에 3 바이트를 분할하는 것입니다. 이것의 이점은 코드가 쉽고, 이상한지 또는 심지어 디코딩하는 방법을 알기 때문입니다. 14 비트를 읽는 것은 조금 더 까다 롭습니다. 이것은 asm (명령어 이름)이나 마이크로 칩이 제공하는 c 함수를 사용하여 수행 할 수 있습니다. (예를 들어 플래시 메모리를 읽고 쓰는 것에 대한 응용 노트를 찾으십시오).
데이터의 성격을 모르지만 압축을 허용하는 패턴이있을 수 있습니다. 일부 기본 압축 알고리즘은 생각만큼 힘들지 않습니다.
저장하고자하는 데이터의 성질을 물어도 괜찮습니까? 프로그래밍 메모리가 작을 것으로 기대하십니까? –
PIC12LF1840 디바이스에는 4K 개의 프로그램 메모리가 있습니다. 하나의 프로그램 메모리 워드는 14 비트를 갖는다. 바이트
전체 프로그램 메모리는 다음과 같습니다 4096 * 14 비트/= 7168 8 바이트
귀하의 표는 4800 바이트, 그래서 코드의 나머지 부분은 다음과 같습니다 7168-4800 = 2368 바이트 또는 2368 * 8/14 = 1353 프로그램 단어.
아무 것도 할 수없는 일! 프로그램 워드가 14 비트이기 때문에 주소 데이터 시트 간접 프로그램 메모리에
확인, 3.6 절
사용은 프로그램 메모리 테이블에서 을 단일 바이트를 추출하는 주소 비트.
"4kbytes의 프로그램 공간과 256kbyte의 데이터 공간"- 거의 없습니다. – Olaf
2700 줄의 DW = 5400B이므로 일부 잡을 수 있습니다. 어떤 줄이'DW'가 아니거나 그 테이블이 코드가 아닌 데이터 메모리에 들어가거나 오래된 데이터를 다시 쓰는'org' 지시자가 있거나 2700 줄이 없다면 결과 바이너리와 링크 맵을 확인하십시오 , 물건 및 섹션의 주소는 어디입니까? C에서 데이터 구조를 다시 만들지는 않겠지 만 실제 코드를 작게 만드는 것은 어려울 수 있습니다. – Ped7g
우리는 개인지도 서비스가 아닙니다. 원저자에게 질문하십시오. 작동하는 경우 왜 다시 작성해야합니까? – Olaf