国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 3105|回復(fù): 0
打印 上一主題 下一主題

ARM數(shù)據(jù)對(duì)齊 ----- ADS1.2編譯

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2017-4-8 11:50:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一、問(wèn)題來(lái)源
且看下面一段代碼:
char    buff[8] = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xab, 0xbc, 0xcd};
int      v32, *p32;
short   v16, *p16;
p32 = (int*)&( buff[1] );  
p16 = (short*)&( buff[1] );
v32 = *p32;
v16 = *p16;
我們來(lái)看看在ADS1.2編譯后,執(zhí)行的結(jié)果如下:
v32 = 0x12785634
v16 = 0x1234
不管數(shù)據(jù)模式是大端結(jié)構(gòu),還是小端結(jié)構(gòu),結(jié)果都不對(duì)。
二、分析原因
默認(rèn)情況下,ADS編譯器使用的是數(shù)據(jù)類型的自然邊界對(duì)其方式。數(shù)據(jù)的自然對(duì)其方式是指:如果該數(shù)據(jù)類型是n個(gè)字節(jié)的,那么該數(shù)據(jù)類型就按n字節(jié)對(duì)齊。例如:
    1.、Usigned char 是1字節(jié)的,那么數(shù)據(jù)就按1字節(jié)對(duì)齊。
定義兩個(gè)變量如下: usigned char  a08,b08;
如果a08所在的地址為,0x80000002,則b08所在的地址為0x80000003,兩個(gè)變量是連續(xù)分配的。
    2、Usigned short 是2字節(jié)的,那么數(shù)據(jù)就按2字節(jié)對(duì)齊。
              定義兩個(gè)變量如下: usigned char   a08;
                           Usigned short  a16;
            如果a08所在的地址為0x80000002,那么a16所在的地址為0x80000004,a16不會(huì)分配到0x80000003,默認(rèn)情況下,編譯器為usigned short類型的變量分配到2的倍數(shù)的地址處。
    2、usigned long 是4字節(jié)的,那么數(shù)據(jù)就按4字節(jié)對(duì)齊。
              定義兩個(gè)變量如下: usigned char   a08;
                           Usigned long   a32
            如果a08所在的地址為0x80000005,那么a16所在的地址為0x80000008,a32不會(huì)分配到0x80000006,默認(rèn)情況下,編譯器為usigned long類型的變量分配到4的倍數(shù)的地址處。
三、解決辦法
  如果我們想要讓編譯器不使用自然邊界對(duì)齊,讓任何類型的變量都緊接著上一變量的地址進(jìn)行分配,可以使用__packed關(guān)鍵字。
四、使用__packed的注意事項(xiàng)
1、__packed 對(duì)局部變量無(wú)效。
2、聲明為_(kāi)_packed 的變量,必須使用__packed 的指針變量來(lái)指向其地址。
   如:
      __packed  u16  u16a;
      __packed  u16  *pu16;
      pu16 = (u16 *)&u16a;
3、聲明為_(kāi)_packed 的結(jié)構(gòu)
      聲明為_(kāi)_packed 的結(jié)構(gòu)僅僅
4、聲明為_(kāi)_packed 的結(jié)構(gòu)變量
五、后記
以上內(nèi)容未經(jīng)測(cè)試,由ADS編譯器手冊(cè)及相關(guān)資料理解總結(jié)所得。
不建議使用__packed 來(lái)節(jié)省數(shù)據(jù)大小,因?yàn)檫@需要付出減低執(zhí)行效率和浪費(fèi)代碼空間的代價(jià)。
更多交流可以加Q啊2685896890

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区高清在线观看 | 小青楼福利视频 | 久久精品视频免费播放 | 最新亚洲精品国自产在线 | 国产区精品福利在线社区 | 九色免费视频 | 久久精品国产只有精品66 | 老司机福利精品视频 | 露脸国产精品自产在线播 | 国产精品自拍视频 | 欧美影院在线观看完整版 mp4 | 国产成人精品男人的天堂538 | 日本高清在线播放一区二区三区 | 欧美日本免费 | 亚洲成人黄色网 | 日本最新免费不卡二区在线 | 日韩经典一区 | 在线观看香蕉免费啪在线观看 | 美女伊人| 9966国产精品视频 | 在线免费看黄的网站 | 国产福利在线免费观看 | 在线观看精品自拍视频 | 亚洲黄色激情网 | 在线欧美视频免费观看国产 | 国内精品免费网站牛牛 | 精品视频一区二区三三区四区 | 亚洲人成片在线观看 | 亚洲wwwwww| 落跑甜心电视剧全集免费观看在线 | 青青青爽国产在线视频 | 成人日韩 | 青青国产成人精品视频 | 色综合久久98天天综合 | 美女如厕视频 | 麻豆精选传媒4区2021 | 亚洲第一免费视频 | 国产一级成人毛片 | 欧美成人午夜视频免看 | 欧美大片天天免费看视频 | 日韩视频在线播放 |