熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2024-7-22 22:25
正文摘要:我用15W408AS, 規(guī)格書上說明是8K flash, 但我的hex文件15K了,燒錄正常,這個(gè)是怎么回事,哪位幫忙普及一下知識(shí)。謝謝。 |
在單片機(jī)上燒錄程序時(shí),程序大小通常受限于芯片內(nèi)部的閃存(Flash)容量。通常情況下,如果程序大小超過芯片的Flash容量,是不能正常燒錄的,因?yàn)榇鎯?chǔ)空間不夠。然而,在你提到的情況中,使用15W408AS芯片(假設(shè)是一種8K Flash容量的單片機(jī))卻能正常燒錄一個(gè)15K的hex文件,這可能有以下幾個(gè)原因: 1. 不同的存儲(chǔ)單位 Flash容量與hex文件大小的單位不同:Flash的容量通常以字節(jié)(Bytes)為單位,而hex文件的大小可能包括更多的信息,不僅僅是純代碼數(shù)據(jù)。hex文件中包含了程序的二進(jìn)制代碼(機(jī)器碼),但也可能包含其他信息,如校驗(yàn)和、地址等,這些額外的信息并不會(huì)被燒錄到芯片中,只是在燒錄過程中用于驗(yàn)證和定位。 2. 壓縮和優(yōu)化 編譯器優(yōu)化:編譯器在生成hex文件時(shí)可能會(huì)進(jìn)行優(yōu)化,將程序代碼壓縮到更小的尺寸。因此,hex文件的大小不一定直接反映程序在Flash中的占用空間。 3. 程序空間與數(shù)據(jù)空間的區(qū)分 Flash與其他存儲(chǔ)器:某些單片機(jī)具有不同類型的存儲(chǔ)空間,如代碼存儲(chǔ)區(qū)(Flash)和數(shù)據(jù)存儲(chǔ)區(qū)(如RAM、EEPROM)。hex文件的某些部分可能屬于數(shù)據(jù)區(qū),而不占用代碼存儲(chǔ)區(qū)的空間。 |
samxon 發(fā)表于 2024-7-23 11:25 ![]() ![]() 如果代碼長度超過了單片機(jī)的程序空間,下載器會(huì)有提示的 |
samxon 發(fā)表于 2024-7-23 11:25 硬盤格式化時(shí)簇大小為4kb,文件4kb以內(nèi)占4kb,超過4kb且8kb以內(nèi)占8kb,大于8kb小于等于12kb的占12kb,以此類推... |
hex文件是文本格式,每行有命令、地址、數(shù)據(jù)、校驗(yàn)等。。。。。實(shí)際的二進(jìn)制數(shù)據(jù)和bin文件一致的。 |
某程序編譯后編譯器提示19字節(jié),編譯器會(huì)將bin編碼成hex格式為90字節(jié)。 單片機(jī)燒錄軟件打開hex格式后,首先將hex解碼成bin數(shù)據(jù),解碼出的19字節(jié)才是被寫入單片機(jī)的數(shù)據(jù)。 |
這個(gè)要看在Keil編譯后的提示,里面會(huì)有code的大小 新版本的下載不知道,幾年前的某個(gè)版本code超過了,會(huì)有提示,但還是可以下載的,只是沒法運(yùn)行而已,燒錄是成功的 程序大小是看code長度,不是看HEX這個(gè)文件本身的大小 |
進(jìn)入STC-ISP, 點(diǎn)打開程序文件裝入HEX文件, 右大框下面有代碼長度就是實(shí)際占用空間, 不好理解就點(diǎn)保存數(shù)據(jù), 輸入文件名后會(huì)以BIN方式保存, 這個(gè)文件大小就是實(shí)際占用空間大小. HEX會(huì)是實(shí)際空間的2點(diǎn)多倍 |
如果超過了,在燒錄程序時(shí)會(huì)有提示 |
hex大小不等于程序大小 |
要看編譯后的code是多大,hex文件雖然有15K,但是code有可能只有7K多。 |
hex文件大小有15K,但燒寫進(jìn)單片機(jī)的卻不會(huì)有那么大,因?yàn)閔ex格式的文件里面有地址、驗(yàn)證碼等,如果是bin格式的就一樣大了。想了解更多可以搜索hex、bin的文件格式。至于能夠燒寫進(jìn)去,要么是設(shè)定的問題,要么是軟件的問題,沒有進(jìn)行報(bào)錯(cuò)(確實(shí)超過的情況下),這時(shí)候燒寫,是后面的覆蓋前面的內(nèi)容,程序運(yùn)行就不正常了。 |
8K空間確能燒進(jìn)去15K hex, 能不能正常跑程序,是個(gè)問題. |
最終寫入的文件是BIN的,如果是hex文件,會(huì)大好多。 |
Powered by 單片機(jī)教程網(wǎng)