久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

MSP430中內存分配不連續的問題

作者:佚名   來源:學會珍惜LW的博客   點擊數:  更新時間:2014年08月28日   【字體:

      今天發現了一個挺奇怪的問題,就是在430的RAM中,想給連續的內存地址分配一個char型和一個int型變量時,兩個變量之間的地址會跳一個。具體情況看下圖。

 



           從上圖可以看到,第一根紅線表面一個unsigned char型變量的值為108,地址為0x472A,占一個字節;緊接著下一個為unsigned char型變量,其值為2,地址為0x472C,占兩個字節。那0x472B這個地址哪兒去了呢?我們可以看到,在存一個char型變量,后面接一個int型變量時,中間會有一個地址被跳過去;

        類似的情況還出現在char型變量后面存一個long int型變量時,但是int型變量和long int型變量連續存,或者單獨的char型變量連續存,以及單獨的int或long int連續存時,均不存在這個問題。

        這個挺奇怪的……這對于SD卡參數的解析會有很大影響?赡苁歉幾g器有關,這里我用的是CCS V5.4。等找到解決方案之后,再在后文補上。

 

**********************************************************************************************************

         晚上請教了znFAT群里的“少數派”大哥之后,獲得了問題的答案,很開心~這里與大家分享一下。

       出現這個問題的原因是結構體的對齊問題。簡單地說,就是char型變量的地址是任意的;但是int型變量由于要占2個字節,為了提高CPU的訪問速度,所以其首地址必須要為偶數;long int型占4個字節,其首地址必須要為4的倍數。

       關于這個問題再具體的講解,我摘錄了david0421的博文“單片機結構體內存的分配 ”中的一段話,他博文的原始地址在http://bibber.blog.sohu.com/230549556.html。

博文如下:

什么是字節對齊
     一個變量占用 n 個字節,則該變量的起始地址必須能夠被 n 整除,即: 存放起始地址 % n = 0, 對于結構體而言,這個 n 取其成員種的數據類型占空間的值最大的那個。
為什么要字節對齊
    內存空間是按照字節來劃分的,從理論上說對內存空間的訪問可以從任何地址開始,但是在實際上不同架構的CPU為了提高訪問內存的速度,就規定了對于某些類型的數據只能從特定的起始位置開始訪問。這樣就決定了各種數據類型只能按照相應的規則在內存空間中存放,而不能一個接一個的順序排列。

    舉個例子,比如有些平臺訪問內存地址都從偶數地址開始,對于一個int型(假設32位系統),如果從偶數地址開始的地方存放,這樣一個讀周期就可以讀出這個int數據,但是如果從奇數地址開始的地址存放,就需要兩個讀周期,并對兩次讀出的結果的高低字節進行拼湊才能得到這個int數據,這樣明顯降低了讀取的效率。

          根據這個原理,我利用CCS在MSP430F6638上做了一個簡單的測試。

        首先定義了兩個char型變量和一個int型變量,其內存分配如下如所示。我們可以看到,此時int型變量的首地址為偶數,內存分配是連續的。



           然后我只定義一個char型變量和一個int型變量,其內存分配如下圖所示,我們可以看到,不連續了。因為int型變量的首地址必須問偶數,所以跳了一個字節。



           感謝“少數派”大哥的點撥~

關閉窗口
主站蜘蛛池模板: 日韩有码一区二区三区 | 国产欧美一区二区三区久久手机版 | 欧美激情国产精品 | 91色视频在线观看 | 成人国产精品入口免费视频 | 黄a在线观看 | 亚洲国产精品成人综合久久久 | 欧美一级黄色片免费观看 | 亚洲高清在线 | 日本久久久一区二区三区 | 日本黄色大片免费看 | 国产一级片 | 欧美亚洲激情 | 日韩一区二区在线视频 | 亚洲精品www久久久 www.蜜桃av | 日本天堂一区二区 | 久久99精品久久久久久国产越南 | 97av视频在线 | 国产欧美一区二区三区久久 | 久久久久久国产精品久久 | 91精品国产综合久久久动漫日韩 | 免费在线色 | 亚洲国产精久久久久久久 | 男女激情网站免费 | 成人免费视频7777777 | 91久久国产综合久久91精品网站 | 99亚洲精品| 99久久婷婷国产综合精品电影 | 欧美性生活网 | 欧美八区 | 人人人艹| 精品国产成人 | 黄网站在线观看 | 亚洲精品国产成人 | 99亚洲精品 | 国产精品精品视频一区二区三区 | 久久精品91久久久久久再现 | 婷婷99| 国产亚洲成av人片在线观看桃 | 欧美一级久久 | 国产精品18久久久久久久 |