找回密碼
 立即註冊
樓主: antlu

求助 89s52 記憶體不夠用!!

 火.. [複製鏈接]
發表於 2012-5-1 16:32:34 | 顯示全部樓層
antlu 發表於 2012-5-1 01:31 PM static/image/common/back.gif
YSC大:
     因為 LCM 240128 圖形模式(沒有中文字庫),所以家訓還沒加上前  水平段 [2][40] 垂直 [2][30 ...

將字型存放在24Cxx系列IC裡面,程式驅動2條線就可存取,
這樣就不會占用寶貴的程式記憶空間,也不會用掉太多I/O腳。

以24C256為例,1顆大概30~50元,容量有64K Byte,
可以存放16*16字型2048字。
便宜一點的24C64,1顆10元附近應該買得到,容量8K Byte,
可以存放256字。

或者乾脆將家訓做成影像檔,存放在24C系列IC裡,
讀出直接送到LCD更省事。

回復

使用道具 舉報

 樓主| 發表於 2012-5-1 20:38:14 | 顯示全部樓層
ysc 發表於 2012-5-1 04:32 PM static/image/common/back.gif
將字型存放在24Cxx系列IC裡面,程式驅動2條線就可存取,
這樣就不會占用寶貴的程式記憶空間,也不會用掉 ...

ysc大:
    請幫幫忙啊!!  看了 24C08等 說明與範例,,問題又來了!! 很大條的喔!!
   我不會定址!! 如何把自型存到 24C08 又如何把他拿來使用?
   學  C  到現在 還沒有學過定址法(見笑了!) 因為都是 使用 UNSIGNED CODE XX[12][32]={ {.....},{...},,{..}} 所以也不知道這些變數 存到 西班牙還是 太平洋哪裡...
    哪裡有可以參考的範例...
回復

使用道具 舉報

發表於 2012-5-1 22:22:11 | 顯示全部樓層
antlu 發表於 2012-5-1 08:38 PM static/image/common/back.gif
ysc大:
    請幫幫忙啊!!  看了 24C08等 說明與範例,,問題又來了!! 很大條的喔!!
   我不會定址!! 如何把 ...

存取24CXX系列必須當作外部元件來處理,無法在C裡面宣告,
也就是先用燒錄器或另外的單晶片電路將字型寫入24CXX裡面,
您這例子使用時只是讀出而已,也就是當作字型ROM來使用。

24CXX系列是使用I2C存取時序,就如同單晶片與LCD模組之間
也需要存取時序才能互相溝通,I2C透過兩條線以串聯方式來存
取記憶體,詳細時序請參考各廠(如ATMEL,MICROCHIP...)DATA SHEET。
回復

使用道具 舉報

 樓主| 發表於 2012-5-2 00:03:31 | 顯示全部樓層
unsigned code kk[16][32]= ... 16*32=512 但是卻佔用了 1024 byte 不知道照方面可否減肥?
因為 22*32*2=1408 又要佔去 1.4K的記憶體了!!
回復

使用道具 舉報

發表於 2012-5-2 00:58:54 | 顯示全部樓層
antlu 發表於 2012-5-1 08:38 PM static/image/common/back.gif
ysc大:
    請幫幫忙啊!!  看了 24C08等 說明與範例,,問題又來了!! 很大條的喔!!
   我不會定址!! 如何把 ...

要搞這個還不如去玩595.
回復

使用道具 舉報

 樓主| 發表於 2012-5-2 01:39:28 | 顯示全部樓層
本帖最後由 antlu 於 2012-5-2 01:55 AM 編輯
逃兵 發表於 2012-5-2 12:58 AM static/image/common/back.gif
要搞這個還不如去玩595.


逃兵大;
   晚安!!  我還是先犧牲 大字幕顯示的功能,用家訓來替換!! 這樣應該就夠了!!
  595 的學習 以及 24C08 的使用和定址功能一定要學的啦!! 這樣才可以做紀錄器啊!!

家訓01 [800x600].JPG   希望最終可以有大字幕 以及家訓輪流顯示...
回復

使用道具 舉報

發表於 2012-5-2 08:22:52 | 顯示全部樓層
Megawin 的MPC82G516A 有Code ROM 64K, Data RAM 256 Byte + 1K Byte! 燒錄器好像在NT$500._左右!
另具有 8 Ch ADC, PCA, UART x 2....可參考看看!
回復

使用道具 舉報

 樓主| 發表於 2012-5-2 10:13:05 | 顯示全部樓層
stevencli 發表於 2012-5-2 08:22 AM static/image/common/back.gif
Megawin 的MPC82G516A 有Code ROM 64K, Data RAM 256 Byte + 1K Byte! 燒錄器好像在NT$500._左右!
另具有 8 ...

感謝!! 我找一下相關賣場!!
回復

使用道具 舉報

發表於 2012-5-2 12:16:03 | 顯示全部樓層
antlu 發表於 2012-5-2 12:03 AM static/image/common/back.gif
unsigned code kk[16][32]= ... 16*32=512 但是卻佔用了 1024 byte 不知道照方面可否減肥?
因為 22*32*2=1 ...

unsigned code, 你的編譯器是當成  是 16 bit 所以就 1K

如果你的數組是 8 位而已, 強制定議成 BYTE 或 CHAR, 應該可以少一半

你看看你的編譯器輸出就知道
回復

使用道具 舉報

 樓主| 發表於 2012-5-2 15:12:08 | 顯示全部樓層
xiaolaba 發表於 2012-5-2 12:16 PM static/image/common/back.gif
unsigned code, 你的編譯器是當成  是 16 bit 所以就 1K

如果你的數組是 8 位而已, 強制定議成 BYTE 或  ...

xiaolaba大:
    請教 如何強制宣告呢!! 我試過 unsigned char kk[22][32]={,,,, 她會告訴我 太多數量... 我用unsigned code kk[22][32]= .... 就ok 但是 佔2個byte...
回復

使用道具 舉報

發表於 2012-5-2 15:57:58 | 顯示全部樓層
本帖最後由 xiaolaba 於 2012-5-2 04:02 PM 編輯
antlu 發表於 2012-5-2 03:12 PM static/image/common/back.gif
xiaolaba大:
    請教 如何強制宣告呢!! 我試過 unsigned char kk[22][32]={,,,, 她會告訴我 太多數量... ...


定義在 RAM 還是 ROM 區段 ?

你要看你的編譯器提供的HELP文件比較確切.

一般

stdint.h 提供,
uint8_t = 8 bit, C = char, 範圍 0..255
int8_t = 8 bit unsigned, C = singed char, 範圍 -127 .. +128


還有, 你用哪一家的編譯器, MCU 的 C 語法大部分遵照 ANSI, 但是有些細微的地方, 每家MCU都有自己獨特語法或保留字

回復

使用道具 舉報

 樓主| 發表於 2012-5-2 18:31:54 | 顯示全部樓層
xiaolaba 發表於 2012-5-2 03:57 PM static/image/common/back.gif
定義在 RAM 還是 ROM 區段 ?

你要看你的編譯器提供的HELP文件比較確切.

xiaolaba 大:
   我使用的是 KEIL C51 這是附送的 編譯器, 我因為沒人教 所以一切都自我摸索和網路尋求幫忙的...
回復

使用道具 舉報

發表於 2012-5-2 20:03:16 | 顯示全部樓層
其實直接換棵同系列的ic就能直接解決,也比較快一點
不然這里有幾個盲點,可能也都被忘了
1.如果因程式碼+字型碼結果多出8k程式一些空間,那換成外加記憶體
  那8952本身加上變數及I2C的操作程式碼,最後會不會也超過8K呢
2.如果不想更換較大容量的MCU時,看了一下DATA本身,STC89C52還有內建2K的EEPROM
  都內建2K了,如果字型不會太多,那不就能塞入個64個字,又不用外加記憶體
附上STC系列的MCU內容,參考看看,當然使用MPC82G516也不錯,不過連燒錄的東西都要重來了
STC89 series Selection Table.rar (18.82 KB)
回復

使用道具 舉報

 樓主| 發表於 2012-5-2 22:10:51 | 顯示全部樓層
legion 發表於 2012-5-2 08:03 PM static/image/common/back.gif
其實直接換棵同系列的ic就能直接解決,也比較快一點
不然這里有幾個盲點,可能也都被忘了
1.如果因程式碼+字 ...

LEGION大:
   感謝提供好意見!! 我不知道 STC89C52還有內建2K EEPROM呢!!
回復

使用道具 舉報

發表於 2012-5-2 22:12:57 | 顯示全部樓層
antlu 發表於 2012-5-2 06:31 PM static/image/common/back.gif
xiaolaba 大:
   我使用的是 KEIL C51 這是附送的 編譯器, 我因為沒人教 所以一切都自我摸索和網路尋求幫 ...


keil C...

你試試看, 在 ROM 定義以下字串,

unsigned char code str="ABCD";

用了4byte 還是 2 倍?

中文字編碼也是每字 2byte
回復

使用道具 舉報

 樓主| 發表於 2012-5-3 00:31:59 | 顯示全部樓層
xiaolaba 大:
unsigned char code str="ABCD"; 根本不接受
error c247 non- address/-constant initializer
回復

使用道具 舉報

 樓主| 發表於 2012-5-3 00:39:42 | 顯示全部樓層
antlu 發表於 2012-5-2 10:10 PM static/image/common/back.gif
LEGION大:
   感謝提供好意見!! 我不知道 STC89C52還有內建2K EEPROM呢!!

LEGION大;
    好複雜喔!! 慢慢消化!! EEPROM 功能是蠻複雜的!!
回復

使用道具 舉報

發表於 2012-5-3 15:36:57 | 顯示全部樓層
本帖最後由 xiaolaba 於 2012-5-3 03:56 PM 編輯
antlu 發表於 2012-5-3 12:31 AM static/image/common/back.gif
xiaolaba 大:
unsigned char code str="ABCD"; 根本不接受
error c247 non- address/-constant initialize ...


你的原程序有沒有用 "str" 或其他變量

試試看
unsigned char code my_string="ABCD";


unsigned char my_string="ABCD";

有的編譯器在給常數賦予數值時, 只能在定義段, 不可在程序內


有其他問題的話, 最好看他的 HELP
http://www.keil.com/support/man/docs/c51/c51_intro.htm

如果

unsigned char kk[2][2]={{1,2,3,4}, {6,7,8,9}}

到底用了多找個 BYTE 呢 ?
回復

使用道具 舉報

 樓主| 發表於 2012-5-3 21:08:07 | 顯示全部樓層
xiaolaba 發表於 2012-5-3 03:36 PM static/image/common/back.gif
你的原程序有沒有用 "str" 或其他變量

試試看

xiaolaba大:
     減肥成功了!!  我把原先的 unsigned code kk[23][32]={{....  改成 unsigned char code kk[23][32]={{.... 居然 記憶體大幅下降 應該是原先 2byte 變成1 byte吧!!  感謝!! 由於您提供的 網站是原廠網站,一大堆東西可以看,我的英文能力又有限,短期間需要看的"基礎"文件爆量,因為還有 LEGION大的 內建 EEPROM使用方法(雖然是中文的)理解上還有一段距離...感謝大家的協助!!Orz............
回復

使用道具 舉報

發表於 2012-5-3 22:41:32 | 顯示全部樓層
antlu 發表於 2012-5-3 09:08 PM static/image/common/back.gif
xiaolaba大:
     減肥成功了!!  我把原先的 unsigned code kk[23][32]={{....  改成 unsigned char code ...

恭喜成功囉.

其實很多方法都可減肥的

例如不用 浮點數 等等.
回復

使用道具 舉報

 樓主| 發表於 2012-5-4 00:15:29 | 顯示全部樓層
xiaolaba 發表於 2012-5-3 10:41 PM static/image/common/back.gif
恭喜成功囉.

其實很多方法都可減肥的

xiaolaba 大:
    感謝!!  
回復

使用道具 舉報

發表於 2012-5-4 08:06:52 | 顯示全部樓層
antlu 發表於 2012-5-3 09:08 PM static/image/common/back.gif
xiaolaba大:
     減肥成功了!!  我把原先的 unsigned code kk[23][32]={{....  改成 unsigned char code ...

原來是變數的問題.......這...蠻大的耶!如果一個元素從2bytes降到1byte,等於說降了快1KB的容量了。
蠻好奇的是unsigned code kk[23][32]這樣宣告起來能過?compiler的容錯還可以這樣預設data type。

如果說外掛24XX、25XX的EEPROM、Flash ROM,如果有預留232的腳位,倒是可以做出靠PC去自己異動顯示的字幕,這樣除了彈性增加,也可以免除MCU的ROM空間不足問題。
回復

使用道具 舉報

發表於 2012-5-4 08:55:02 | 顯示全部樓層
antlu 發表於 2012-5-1 12:58 PM static/image/common/back.gif
s10274chen大:
   我已經把 SPRINTF 幹掉了 才有現在的狀況!! 您太客氣了! 我會 REVIEW 程式,看看還有哪 ...

用肉眼看?
compiler 過程不是會產出 lst 檔?
去看那個就知道了吧。
回復

使用道具 舉報

 樓主| 發表於 2012-5-4 19:30:39 | 顯示全部樓層
s10274chen 發表於 2012-5-4 08:06 AM static/image/common/back.gif
原來是變數的問題.......這...蠻大的耶!如果一個元素從2bytes降到1byte,等於說降了快1KB的容量了。
蠻 ...

s10274chen大:
    真的可以喔!! 記憶體5554BYTE, 原先7000多BYTE...
    外掛24XX... 因為從未學過,所以也不會,這算是進階學習吧!! 昨天才知道 C語言的 * 和 & 指標...
回復

使用道具 舉報

 樓主| 發表於 2012-5-4 19:38:02 | 顯示全部樓層
逃兵 發表於 2012-5-4 08:55 AM static/image/common/back.gif
用肉眼看?
compiler 過程不是會產出 lst 檔?
去看那個就知道了吧。

逃兵大:
   我不懂ㄟ  XIAOLABA 大提供的資料我還要慢慢消化!!
   剛學 微處理的時候那時候剛剛有8085 CPU ,所以沒有學過 COMPILER 這玩意! 以前都用查MACHINE CODE 方式,後來有學了一下 BASIC 也沒有所謂的 COMPILER 因為是直譯方式...因此對編譯沒有概念...
回復

使用道具 舉報

發表於 2012-5-5 20:01:37 | 顯示全部樓層
antlu 發表於 2012-5-4 07:38 PM static/image/common/back.gif
逃兵大:
   我不懂ㄟ  XIAOLABA 大提供的資料我還要慢慢消化!!
   剛學 微處理的時候那時候剛剛有8085 C ...

你不是用C寫的嗎?
C...沒有 compiler 吧......
回復

使用道具 舉報

 樓主| 發表於 2012-5-5 20:29:10 | 顯示全部樓層
逃兵 發表於 2012-5-5 08:01 PM static/image/common/back.gif
你不是用C寫的嗎?
C...沒有 compiler 吧......

當時25歲沒有現在56歲有C COMPILER!!
回復

使用道具 舉報

發表於 2012-5-5 20:57:27 | 顯示全部樓層
antlu 發表於 2012-5-5 08:29 PM static/image/common/back.gif
當時25歲沒有現在56歲有C COMPILER!!

不管你是 compiler 還是 assembler, 都會產生 lst 檔。
去看它就是了。
回復

使用道具 舉報

 樓主| 發表於 2012-5-6 23:59:02 | 顯示全部樓層
逃兵 發表於 2012-5-5 08:57 PM static/image/common/back.gif
不管你是 compiler 還是 assembler, 都會產生 lst 檔。
去看它就是了。

逃兵大:
   我一COMPILER 之後產生以下的檔案
  startup  1K obj
  startup  12k Castw Document
ant8051.Map  79K Map檔
ant8051.hex 16K hex
ant8051        27K SRB
ant8051        49K  檔案
ant0718        54k obj
ant0718        55k Castw Document
回復

使用道具 舉報

發表於 2012-5-7 23:46:31 | 顯示全部樓層
antlu 發表於 2012-5-6 11:59 PM static/image/common/back.gif
逃兵大:
   我一COMPILER 之後產生以下的檔案
  startup  1K obj

看來是 .map 檔?
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

手機版|禁閉室|連繫我們|痞酷網電子技術論壇

GMT+8, 2025-6-9 03:16 PM , Processed in 0.054878 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.