找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

基于51單片機的萬年歷設(shè)計HEX文件太大無法燒錄

查看數(shù): 4969 | 評論數(shù): 35 | 收藏 1
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2024-4-23 08:41

正文摘要:

求各位大佬指點一下,hex文件燒錄不進去顯示太大了不知道怎么辦了最后一步呢求各位大佬!

回復

ID:982617 發(fā)表于 2024-8-7 17:17
面對51單片機設(shè)計萬年歷時遇到的HEX文件過大無法燒錄的問題,可以采取以下幾個策略來優(yōu)化和解決:  1. **代碼優(yōu)化**:    - **刪除不必要的代碼**:檢查并刪除不使用的函數(shù)、代碼段或數(shù)據(jù),特別是那些在運行過程中不被調(diào)用的部分。    - **使用更高效的算法**:對循環(huán)、數(shù)據(jù)處理等部分優(yōu)化算法,減少內(nèi)存和執(zhí)行時間的消耗。    - **變量類型優(yōu)化**:選擇合適的變量類型,例如使用更小的整數(shù)類型(比如使用char或short代替int),在不損失必要精度的情況下減少內(nèi)存占用。  2. **使用更小的編譯器**:    - **選擇更緊湊的編譯器**:不同的編譯器對代碼的優(yōu)化程度不同,選擇專門針對51單片機且優(yōu)化程度高的編譯器可能會減少代碼大小。    - **編譯器選項**:在編譯選項中選擇更緊湊的代碼生成,如減少注釋生成、優(yōu)化庫函數(shù)使用等。  3. **資源管理**:    - **內(nèi)存管理**:合理使用全局變量和靜態(tài)變量,減少動態(tài)分配的內(nèi)存使用。    - **結(jié)構(gòu)和數(shù)組的優(yōu)化**:如果使用了大量數(shù)組和結(jié)構(gòu)體,考慮優(yōu)化其大小,比如使用指針代替數(shù)組,或者將數(shù)組聲明為靜態(tài)局部變量。  4. **代碼重用**:    - **共享庫**:如果代碼中存在重復的函數(shù)或模塊,考慮將其封裝為庫文件,減少重復代碼的大小。  5. **HEX文件編輯**:    - **手動編輯HEX文件**:雖然不太常規(guī),但可以嘗試手動減少HEX文件的大小,例如刪除不必要的數(shù)據(jù)點或使用更緊湊的格式。    - **使用HEX編輯器**:使用專門的HEX文件編輯工具,嘗試調(diào)整和優(yōu)化文件結(jié)構(gòu)。  6. **硬件資源**:    - **考慮使用更高級的單片機**:如果可能,升級至更先進的51單片機型號,它們可能提供更大的內(nèi)存空間或更多的功能,從而可以容納較大的程序。  7. **外部存儲器**:    - **使用SRAM或EEPROM擴展**:如果內(nèi)存不足,考慮使用外部RAM或EEPROM來存儲一些不經(jīng)常訪問的數(shù)據(jù),從而減少程序HEX文件的大小。  8. **重新設(shè)計**:    - **模塊化設(shè)計**:將萬年歷功能分解為多個模塊,只燒錄需要的模塊到單片機,其余模塊可以使用外部存儲或通過其他方式訪問。  9. **驗證和測試**:    - **分階段燒錄**:驗證程序在單片機上的正確性,逐步增加功能模塊,以確保每個階段的程序能夠正確燒錄和運行。  通過上述方法的綜合運用,可以有效減小HEX文件的大小,從而解決無法燒錄的問題。
ID:1116913 發(fā)表于 2024-7-13 17:18
STC89C53RCRC
ID:97023 發(fā)表于 2024-5-21 00:44
heyanrog 發(fā)表于 2024-4-25 17:37
把那些注釋刪了再編譯,文件就小了

注釋又不參與編譯,刪除了也不會影響文件大小。
ID:879809 發(fā)表于 2024-5-20 23:12
五六 發(fā)表于 2024-4-30 19:41
屏幕顯示的只讀數(shù)組用xdata放在eeprom,keil可以設(shè)置程序優(yōu)化等級,拉到最高再次驗證程序。

基礎(chǔ)沒學好,只讀是code空間,xdata是讀寫,樓主的問題是code空間不夠了。
ID:871721 發(fā)表于 2024-5-20 22:10
換成stc12c5a60s2吧,五塊錢60KB,10位ADC,處理速度還比c52快,
ID:1118978 發(fā)表于 2024-4-30 19:41
屏幕顯示的只讀數(shù)組用xdata放在eeprom,keil可以設(shè)置程序優(yōu)化等級,拉到最高再次驗證程序。
ID:1118978 發(fā)表于 2024-4-30 19:41
屏幕顯示的只讀數(shù)組用xdata放在eeprom,keil可以設(shè)置程序優(yōu)化等級,拉到最高再次驗證程序。
ID:1115386 發(fā)表于 2024-4-30 15:15
Hephaestus 發(fā)表于 2024-4-25 19:22
他們都是不看你的代碼不負責任亂說的,你的真正執(zhí)行的代碼非常簡單,RAM完全夠用,不需要加XDATA。你的問 ...

大佬我換了STC89C58RD+可以燒錄進去了但是屏幕顯示有點問題大佬可以給看一看嗎

ID:237218 發(fā)表于 2024-4-26 11:27
換stc12,有引腳兼容的64KBflash型號,另外可以檢查看看程序優(yōu)化等級是否為最高
ID:203661 發(fā)表于 2024-4-26 10:15
沒辦法,程序那么大,唯有換芯
ID:961114 發(fā)表于 2024-4-26 09:39
你咋不用帶RTC的芯片呢  現(xiàn)在都是標配了,九毛九的STC8H2K08U也有RTC
ID:43600 發(fā)表于 2024-4-25 23:35
你的 character.h 實在有夠大。
簡化顯示在12864的畫面,89c52 應該就擠的下去。
ID:883242 發(fā)表于 2024-4-25 19:22
wuqing12345 發(fā)表于 2024-4-24 23:34
大佬可以幫忙指導修改一下嘛 我試了半天變量加Xdata不成功拜托了

他們都是不看你的代碼不負責任亂說的,你的真正執(zhí)行的代碼非常簡單,RAM完全夠用,不需要加XDATA。你的問題是漢字點陣字庫占用了太多flash,只要找flash大的型號就行了。
ID:344848 發(fā)表于 2024-4-25 18:27
wuqing12345 發(fā)表于 2024-4-23 11:31
我看有人說變量加xdata不知道什么意思

xdata 常用于單片機內(nèi)存片外擴展,這需要更改電路,直接換一個存儲內(nèi)存大一點的芯片即可。
ID:11804 發(fā)表于 2024-4-25 17:37
把那些注釋刪了再編譯,文件就小了
ID:458247 發(fā)表于 2024-4-25 08:42
wuqing12345 發(fā)表于 2024-4-24 23:34
大佬可以幫忙指導修改一下嘛 我試了半天變量加Xdata不成功拜托了

加xdata不行的,加了占用flash空間反而更大了。xdata一般是data空間不夠用了再用
ID:1115386 發(fā)表于 2024-4-24 23:34
npn 發(fā)表于 2024-4-23 15:53
程序里若有code的只讀數(shù)組可以放進EEPROM里 (是否能優(yōu)化具體看程序)

大佬可以幫忙指導修改一下嘛 我試了半天變量加Xdata不成功拜托了
ID:1115386 發(fā)表于 2024-4-24 20:54
rayin 發(fā)表于 2024-4-24 08:05
可以換STC12C5A60 的型號, 有60K的flash空間. 做萬年歷夠用了.

大佬這個可以直接用不用動代碼嘛
ID:883242 發(fā)表于 2024-4-24 19:22
大漠落日 發(fā)表于 2024-4-24 18:12
換芯片吧,要不簡化程序,把萬年改成若干年的,縮小編譯后的大小

你還是親自看看他那個程序到底大在哪里,不要憑空想象。
ID:195496 發(fā)表于 2024-4-24 18:12
換芯片吧,要不簡化程序,把萬年改成若干年的,縮小編譯后的大小
ID:517951 發(fā)表于 2024-4-24 08:05
可以換STC12C5A60 的型號, 有60K的flash空間. 做萬年歷夠用了.
ID:41656 發(fā)表于 2024-4-23 18:59
你單片機內(nèi)部ROM不夠 換16K FLASH的或者更大的
ID:883242 發(fā)表于 2024-4-23 17:21
wuqing12345 發(fā)表于 2024-4-23 16:24
大佬可以麻煩您幫我看一看程序嗎,我改不出來里面有很多只讀數(shù)組。拜托大佬了

你的代碼非常簡單,什么51都能用,大是大在漢字點陣字庫上面了,只要你一定要顯示漢字就無解。
ID:192020 發(fā)表于 2024-4-23 16:52
wuqing12345 發(fā)表于 2024-4-23 16:26
大佬這個型號可以不用動代碼直接使用嗎

不清楚,沒用過53。估計是可以的,手冊把51、52、53寫在一起了。實際情況還是得看看手冊行不行
ID:1115386 發(fā)表于 2024-4-23 16:26

大佬這個型號可以不用動代碼直接使用嗎
ID:1115386 發(fā)表于 2024-4-23 16:24
npn 發(fā)表于 2024-4-23 15:53
程序里若有code的只讀數(shù)組可以放進EEPROM里 (是否能優(yōu)化具體看程序)

大佬可以麻煩您幫我看一看程序嗎,我改不出來里面有很多只讀數(shù)組。拜托大佬了
ID:140489 發(fā)表于 2024-4-23 15:58
wuqing12345 發(fā)表于 2024-4-23 11:34
大佬如果要換單片機可以給推薦一下不,內(nèi)存夠的不用動代碼的有沒有啊拜托了

自己選吧

51hei截圖_20240423155714.png (560.04 KB, 下載次數(shù): 66)

51hei截圖_20240423155714.png
ID:57657 發(fā)表于 2024-4-23 15:53
程序里若有code的只讀數(shù)組可以放進EEPROM里 (是否能優(yōu)化具體看程序)
ID:192020 發(fā)表于 2024-4-23 11:49
STC89C53RC
ID:1115386 發(fā)表于 2024-4-23 11:34
dj3365191 發(fā)表于 2024-4-23 10:56
STC89C52RC的存儲只有8K,要換單片機了

大佬如果要換單片機可以給推薦一下不,內(nèi)存夠的不用動代碼的有沒有啊拜托了
ID:1115386 發(fā)表于 2024-4-23 11:31
dj3365191 發(fā)表于 2024-4-23 10:56
STC89C52RC的存儲只有8K,要換單片機了

我看有人說變量加xdata不知道什么意思
ID:1064915 發(fā)表于 2024-4-23 11:22
試了一下,可以燒錄,仿真存成低版本,打不開
ID:143767 發(fā)表于 2024-4-23 10:56
STC89C52RC的存儲只有8K,要換單片機了
ID:277550 發(fā)表于 2024-4-23 10:47
換大內(nèi)存的單片機,或縮減程序
ID:619259 發(fā)表于 2024-4-23 10:19
89C52RC只有8K,換芯片吧

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表