2017-09-12 68 views
3

我想寫一個包含大型列表(大約4.8k字節)的程序。代碼在彙編中,但具有更大的數據表(大約5.4k字節)。圖片大會如何

+0

「4k字節的程序空間和256k字節的數據空間」 - 很難。 – Olaf

+0

DW = 5400B 2700行,所以有一些捕獲。有些行不是'DW',或者這個表正在進入數據存儲器,而不是代碼,或者有一些'org'指令重寫較舊的數據,或者它們沒有2700行......檢查生成的二進制和鏈接映射,東西和部分的地址在哪裏。我不擔心在C中重新創建數據結構,但將實際代碼變得很小可能會變得很困難。 – Ped7g

+2

我們不是一個輔導服務。詢問原作者。如果它正在工作,爲什麼要重寫呢? – Olaf

回答

3

查看數據表的內存組織(第3章),您會看到一個字(指令)使用14位而不是您在程序中使用的8位。通過寫入不是8位字,而是14位字,你有75%的存儲空間,這是一件大事。

最難的部分是創建一個能夠將8位字節分割爲14位字的函數。您可以使用帶位域的結構來實現這一點,或者您可以採取簡單的方法,並使用1個字節的8個字的第一位,依此類推。您需要使用特殊說明來讀取單詞的高6位。

最簡單的方法是隻使用14位中的12位,並將第3個字節分成奇數和偶數位。這樣做的好處是你的代碼很容易,通過檢查奇數甚至你知道如何解碼。 使用asm(INSTRUCTION NAME)或microchip提供的c函數可以完成14位讀操作。 (查找關於讀取和寫入閃存的應用筆記作爲例子)。

我不知道你的數據的性質,但也許有可以找到允許壓縮的模式。一些基本的壓縮算法並不像看起來那麼難。

+0

沒問題,我可以問你想存儲的數據的性質嗎?你期望編程的內存變小嗎? –

2

PIC12LF1840器件具有4K程序存儲器字。一個程序存儲器字有14位。以字節爲單位

  • 總程序存儲器是:4096 * 14比特/ 8 = 7168字節

  • 你的表是4800個字節長,所以其餘爲代碼是:7168 - 4800 = 2368個字節或2368 * 8/14 = 1353個程序字。

    所以沒有什麼不可能做!

  • 入住數據表間接程序存儲器尋址,3.6節

  • 使用位尋址從程序存儲器表中提取單個字節, 因爲程序字是14位。