STM32 Flash读写;Flash地址对应的存储内容及方式;
概念:計(jì)算機(jī)中最小的信息單位是bit,也就是一個(gè)二進(jìn)制位,8個(gè)bit組成一個(gè)Byte,也就是1個(gè)字節(jié),
1個(gè)存儲(chǔ)單元存放1個(gè)字節(jié),每個(gè)存儲(chǔ)單元對應(yīng)一個(gè)32位(bit)地址,所以重要的話說三遍:對于32bit的ARM CPU
一個(gè)32位地址指向1個(gè)字節(jié)!!! ?一個(gè)32位地址指向1個(gè)字節(jié)!!! ??一個(gè)32位地址指向1個(gè)字節(jié)!!!
我們常說的flash空間,多少多少K,指的是多少多少K byte
?
假如我們執(zhí)行下面的函數(shù)操作:
?
FlashWriteWord_P(0x1082,&WordVar); /* 向0x1082、0x1083中寫入0xABCD */經(jīng)過編譯,從map文件查看flash內(nèi)容如下:
?
注意,前面的1080是十六進(jìn)制,所以從0x1080到0x1090,共16個(gè)地址跨越,因?yàn)檫€有0x108A....0x108F
從這個(gè)map中,我們能發(fā)現(xiàn)一些問題
(1)驗(yàn)證了一個(gè)32位地址存放的是1個(gè)字節(jié)。
(2)將一個(gè)16位數(shù),也就是2個(gè)字節(jié),存放的順序是低字節(jié)在前,高字節(jié)在后,這個(gè)跟感官上不一樣。
(3)未存放數(shù)據(jù)的閃存單元是0xFF,這個(gè)不是巧合,因?yàn)閒lash說到底,內(nèi)部也是只有1和0兩種狀態(tài),CPU默認(rèn)都是1.
另外,一個(gè)潛規(guī)定,向Flash中寫數(shù)據(jù),起始地址最好是偶數(shù),否則容易出現(xiàn)錯(cuò)誤,所以:
?
從上可以看出,數(shù)據(jù)在flash中存放順序是低在前,高在后,那么讀flash時(shí)呢,答案是,會(huì)再反轉(zhuǎn),高在前,低在后,因?yàn)樽xflash必須一次至少讀16位,不太允許讀8位,所以正好又反過來了。
在編程時(shí),要注意給要分配要存儲(chǔ)的內(nèi)容地址,每個(gè)數(shù)據(jù)對應(yīng)地址,都是偶數(shù),因?yàn)?個(gè)數(shù)據(jù)要占用2個(gè)地址。
?
轉(zhuǎn)載自https://blog.csdn.net/u012351051/article/details/77097559
?
?
總結(jié)
以上是生活随笔為你收集整理的STM32 Flash读写;Flash地址对应的存储内容及方式;的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后3Q大战时代的防护选择
- 下一篇: 【保定SEO】怎么做好SEO关键词优化工