Chinaunix首页 | 论坛 | 博客
  • 博客访问: 962658
  • 博文数量: 109
  • 博客积分: 554
  • 博客等级: 中士
  • 技术积分: 2577
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-04 12:49
文章分类

全部博文(109)

文章存档

2019年(5)

2016年(7)

2015年(9)

2014年(1)

2013年(71)

2012年(16)

分类: 嵌入式

2013-07-13 12:50:37

1. 对于嵌入式底层人员来说

1 word大小跟cpu结构有关
32cpu,1word = 4 bytes
64位cpu,1 word = 8 bytes

Half-Word:32位cpu,半字的长度为16位,与8位/16位处理器体系结构中字的长度一致。
字节(Byte):在8位/16位/32位处理器体系结构中,字节的长度均为8位。

在arm920t datasheet中
Two 16KB caches are implemented, one for instructions, the other for data, both with an 8-word line size.
这里8-word 就是32 bytes,不是16bytes

由于arm920t, 缓冲线为32字节,所以在uboot代码中会看到以下代码,异常处理是32字节对齐,提高读取代码的效率
/*
 * exception handlers
 */
    .align  5
undefined_instruction:
    get_bad_stack
    bad_save_user_regs
    bl    do_undefined_instruction

    .align    5
software_interrupt:
    get_bad_stack
    bad_save_user_regs
    bl    do_software_interrupt

    .align    5
prefetch_abort:
    get_bad_stack
    bad_save_user_regs
    bl    do_prefetch_abort

    .align    5
data_abort:
    get_bad_stack
    bad_save_user_regs
    bl    do_data_abort
2. 对于上层开发人员来说
例如在Visual C++ 6.0中,BYTE与WORD,DWORD本质上都是一种无符号整型,它们在WINDEF.H中被定义,定义如下:

typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef unsigned long       DWORD;

 也就是说BYTE是无符号的char型(char型本质上也是一种1个字节的整型),WORD是无符号short型,DWORD是无符号long型。
 而在Visual C++ 6.0中,char型长度为1字节,short型长度为2字节,int和long型长度都为4字节,因此可以认为BYTE与WORD,DWORD定义的变量分别获得了1字节,2字节,4字节内存。

所以在计算WORD大小时要根据环境决定是2bytes还是4bytes
阅读(10641) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~