打印

定义一个字节数组,能不能使得数组半字对齐?

[复制链接]
3344|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hwk612167|  楼主 | 2012-11-8 11:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2012-11-8 11:44 | 只看该作者
这个取决于编译器,MCU内核,8位机总是对齐的

使用特权

评论回复
板凳
airwill| | 2012-11-8 11:54 | 只看该作者
不知道有啥意义.
不如就定义 unsigned short arr[10];
8位数据当16位写入没有问题, 读出也可以强制转换的处理

使用特权

评论回复
地板
hwk612167|  楼主 | 2012-11-8 11:55 | 只看该作者
我现在的MCU是16位,小端格式
试过定义:unsigned char arr[10];
              unsigned char arr[11];
都是从奇数地址开始,并不对齐。如果我想对齐,没有办法么?只能定义成unsigned short型数组?

使用特权

评论回复
5
ayb_ice| | 2012-11-8 13:36 | 只看该作者
我现在的MCU是16位,小端格式
试过定义:unsigned char arr[10];
              unsigned char arr[11];
都是从奇数地址开始,并不对齐。如果我想对齐,没有办法么?只能定义成unsigned short型数组? ...
hwk612167 发表于 2012-11-8 11:55


可以用共用体解决问题

使用特权

评论回复
6
airwill| | 2012-11-9 09:13 | 只看该作者
要个对齐问题, 我想编译器应该有这方面的控制命令. 不知道是什么编译器?
另外可能也就是个碰巧问题, 调整一下变量位置关系, 我想也能碰巧成偶地址的.

使用特权

评论回复
7
qqlvjh| | 2012-11-9 10:37 | 只看该作者
_align(2)

使用特权

评论回复
8
hwk612167|  楼主 | 2012-11-9 17:08 | 只看该作者
IAR碰巧可不行啊,要强制必须 6# airwill

使用特权

评论回复
9
john_lee| | 2012-11-9 20:41 | 只看该作者
有一个简单的办法,只是使用上稍嫌麻烦:把你希望对齐的宽度(一般是16位或32位),用一个哑元数据表示,并把这个数据与你希望对齐的数据本身,组成一个联合(union)。
例如你希望把字节数组对齐到16位:
union {
    uint16_t __dummy;    // 这个哑元数据可以使编译器让整个 union 对齐到16位,
    uint8_t arr[10];          // 从而保证了 arr 也是对齐的。
} aligned_arr;
访问数据时,要注意 arr 数组是联合变量 aligned_arr 的成员。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:前进 前进 前进

20

主题

511

帖子

3

粉丝