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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2568|回復: 0
打印 上一主題 下一主題
收起左側

ARM數據對齊 ----- ADS1.2編譯

[復制鏈接]
跳轉到指定樓層
樓主
ID:186388 發表于 2017-4-8 11:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、問題來源
且看下面一段代碼:
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;
我們來看看在ADS1.2編譯后,執行的結果如下:
v32 = 0x12785634
v16 = 0x1234
不管數據模式是大端結構,還是小端結構,結果都不對。
二、分析原因
默認情況下,ADS編譯器使用的是數據類型的自然邊界對其方式。數據的自然對其方式是指:如果該數據類型是n個字節的,那么該數據類型就按n字節對齊。例如:
    1.、Usigned char 是1字節的,那么數據就按1字節對齊。
定義兩個變量如下: usigned char  a08,b08;
如果a08所在的地址為,0x80000002,則b08所在的地址為0x80000003,兩個變量是連續分配的。
    2、Usigned short 是2字節的,那么數據就按2字節對齊。
              定義兩個變量如下: usigned char   a08;
                           Usigned short  a16;
            如果a08所在的地址為0x80000002,那么a16所在的地址為0x80000004,a16不會分配到0x80000003,默認情況下,編譯器為usigned short類型的變量分配到2的倍數的地址處。
    2、usigned long 是4字節的,那么數據就按4字節對齊。
              定義兩個變量如下: usigned char   a08;
                           Usigned long   a32
            如果a08所在的地址為0x80000005,那么a16所在的地址為0x80000008,a32不會分配到0x80000006,默認情況下,編譯器為usigned long類型的變量分配到4的倍數的地址處。
三、解決辦法
  如果我們想要讓編譯器不使用自然邊界對齊,讓任何類型的變量都緊接著上一變量的地址進行分配,可以使用__packed關鍵字。
四、使用__packed的注意事項
1、__packed 對局部變量無效。
2、聲明為__packed 的變量,必須使用__packed 的指針變量來指向其地址。
   如:
      __packed  u16  u16a;
      __packed  u16  *pu16;
      pu16 = (u16 *)&u16a;
3、聲明為__packed 的結構
      聲明為__packed 的結構僅僅
4、聲明為__packed 的結構變量
五、后記
以上內容未經測試,由ADS編譯器手冊及相關資料理解總結所得。
不建議使用__packed 來節省數據大小,因為這需要付出減低執行效率和浪費代碼空間的代價。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区二区三区在线 | 人人爽人人草 | 午夜爱爱毛片xxxx视频免费看 | 久久精品国产一区二区三区 | 国产电影一区二区 | 99精品观看 | 久久久国| 国产在线观看一区二区三区 | 久久久久久久久久久久久91 | www.国产精品| 国产在线观看一区二区三区 | 精品99久久久久久 | 在线成人免费视频 | 久久久久国产一区二区三区四区 | 天堂中文在线观看 | 日本一区二区高清视频 | 一级中国毛片 | 亚洲成人免费视频 | 视频一区二区中文字幕 | 二区av| 亚洲人成人一区二区在线观看 | 久久99国产精品久久99果冻传媒 | 毛片国产 | 欧美日韩一二三区 | 在线看91 | 日韩精品在线看 | 国产999精品久久久 午夜天堂精品久久久久 | 日本精品一区二区三区在线观看视频 | 亚洲国产一区二区三区四区 | 国产日本精品视频 | 毛片av免费看 | 亚洲国产欧美一区二区三区久久 | 亚洲精品一区中文字幕乱码 | 国产乱码精品1区2区3区 | 麻豆changesxxx国产 | 国产精品久久久久久久久免费相片 | 亚洲国产精品视频一区 | 四季久久免费一区二区三区四区 | 成人精品视频在线观看 | 免费观看黄a一级视频 | 亚洲美女av网站 |