痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
12
返回列表 發新帖
樓主: 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, 下載次數: 11)
 樓主| 發表於 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, 2024-12-24 09:19 AM , Processed in 0.082564 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.