A1、目前嵌入式ARM数据处理操作几乎是32位的,局部变量最好用32位的数据类定义!
2013-03-30 20:33
323 查看
函数示例:用来计算一个包含64个字的数据包的校验和。
int checksum(int * data)
{
char i;
int sum = 0;
for( i = 0; i < 64;i ++)
{
sum += data[i];
}
return sum;
}
似乎声明i为char类型是没有什么问题的,甚至可能会觉得一个char类型的数据比int类型的数据占用更小的寄存器空间或者更小的ARM堆栈空间。其实对ARM来说,这两个设想都是错误的。ARM寄存器至少是32位的。而且,为了正确执行i++,编译器必须解决i=255时的问题!对char数据类型来说,255加1产生的结果是0。
在i和64比较前,编译器增加了额外的AND指令来保证i的范围为0到255。
int checksum(int * data)
{
char i;
int sum = 0;
for( i = 0; i < 64;i ++)
{
sum += data[i];
}
return sum;
}
似乎声明i为char类型是没有什么问题的,甚至可能会觉得一个char类型的数据比int类型的数据占用更小的寄存器空间或者更小的ARM堆栈空间。其实对ARM来说,这两个设想都是错误的。ARM寄存器至少是32位的。而且,为了正确执行i++,编译器必须解决i=255时的问题!对char数据类型来说,255加1产生的结果是0。
在i和64比较前,编译器增加了额外的AND指令来保证i的范围为0到255。
相关文章推荐
- 【嵌入式Linux+ARM】GPIO操作
- 32位ARM寄存器是如何只传递8位、16位数据的——由uboot nand 操作想到的
- 嵌入式 ARM中CP的操作指令MCR/MRC详解
- 基于ARM的Linux嵌入式系统如何操作GPIO口
- ARM嵌入式入门最好的文章
- ARM嵌入式的定义和开发工具介绍
- 32位arm的写存操作,没有内存对齐的赋值
- Servlet是多线程的,最好定义局部变量,不要定义全局变量
- 目前来说比较.net下最好的bdb操作封装(附单元测试)
- 32位ARM嵌入式处理器的调试技术
- 【嵌入式Linux+ARM】GPIO操作
- 【嵌入式Linux+ARM】存储控制器(操作SDRAM)
- ARM嵌入式入门最好的文章
- 【嵌入式Linux+ARM】GPIO操作
- c#中定义数组--字符串及数组操作
- 解决win7 64位上VC6.0 操作Mysql(32位)中文乱码的方法
- mysql 存储过程中变量的定义与赋值操作
- 02 ARM存储控制器 SDRAM操作 实验
- 【ARM-Linux开发】嵌入式操作系统上的小型数据库移植SQLite
- 嵌入式学习|ARM|Linux|wince|ucos|经典资料与实例分析 完整版