嵌入式中小端模式为 低字节存储在低地址,高字节存储在高地址。大端模式为低字节存储在高地址,高字节存储在低地址。
如何判断一个系统为大端模式还是小端模式? 小端模式的数据如何转换为大端模式的数据?
#include<iostream>
#include<iomanip>
using namespace std;
bool IsLittleEndian()//判断是否是小端模式。是小端则返回true
{
typedef union
{
int a;
char b;
}Type;
Type test;
test.a=1;
return test.b==1;
}
bool IsLittleEndian2()
{
int a=1;
return *((char*)(&a))==1;
}
int LittleEndianToBigEndian(int number)//小端转大端
{
int temp=0;
char *p=(char*)&number;
temp=((*p)<<24)+(*(p+1)<<16)+(*(p+2)<<8)+*(p+3);
return temp;
}
int LittleEndianToBigEndian2(int number)
{
return (number&0x000000ff)<<24|(number&0x0000ff00)<<16|(number&0x00ff0000)<<8|(number&0xff000000);
}
int main()
{
if(IsLittleEndian()&&IsLittleEndian2())
{
cout<<"系统是小端模式"<<endl;
}
int number=0x11223344;
cout<<"小端格式的number:"<<hex<<number<<endl;
cout<<"转换成为大端格式:"<<endl;
cout<<hex<<LittleEndianToBigEndian(number)<<endl;
cout<<hex<<LittleEndianToBigEndian(number)<<endl;
return 0;
}
哈弗结构和冯诺依曼结构
哈佛结构是一种存储器结构。使用哈弗结构的处理器有AVR ARM9 ARM10 ARM cortex m3 等
哈佛结构是一种将程序指令存储和数据存储分开的存储器结构,数据总线和地址总线分开 数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度
哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和储存的,执行时可以预先读取下一条指令
以下转自:http://blog.sina.com.cn/s/blog_a44094ea01016s09.html
哈佛结构
(英语:Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。
与冯.诺曼结构处理器比较,哈佛结构处理器有两个明显的特点:
1、使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;
2、使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,而这两条总线之间毫无关联。