首页 > 编程知识 正文

arm大小端设置,ubuntu查看cpu主频

时间:2023-05-06 13:44:02 阅读:168774 作者:902

第一部分:检测ARM或其他单片机

一.概念和细节

不同系统的计算机普遍采用的字节存储机制有两种:大字节序和小字节序。

首先回顾两个关键字,MSB和LSB :

msb:mostsignificantbit-----最高有效位

LSB : leastsignificantbit----最低有效位

大端模式(

big-endian:MSB存储在最低地址。

例如,2字节数0x1234作为big-endian存在于开始地址0x00002000。

|数据|

|0x12 |

|0x34 |

在Big-Endian中,bit序列中的序列号组织如下: 例如,对于2字节数0x8B8A )。

bit | 0 1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 15

------ms B----- LSB

val|10010111|100101010010|

请参见------------------------------------------------------- -

=0x8 B 8 A

小端序模式(little-endian ) )。

little-endian:LSB存储在最低地址。

例如,双字节数0x1234作为little-endian存在于开始地址0x00002000处。

|数据|

|0x34 |

|0x12 |

在Little-Endian中,bit序列中的序列号组织与Big-Endian正好相反,如下所示: 例如,对于2字节数0x8B8A )。

位|15141312111098|76543210

------ms B----- LSB

val|10010111|100101010010|

请参见---------------------------------------------------------

=0x8 B 8 A

二.序列为大字节序时的存储:

以unsigned int value=0x12345678为例,分别看两种字节序的存储情况。 值可以用unsignedchar buf[4]表示。

Big-Endian:的低地址中存储高位,如下所示。

高地址

----------------

buf[3](0x78 )--下位

buf[2](0x56 )。

buf[1](0x34 )。

buf[0](0x12 )--高位

----------------

行地址

Little-Endian:的子地址存储以下地址:

高地址

----------------

buf[3](0x12 )--高位

buf[2](0x34 )。

buf[1](0x56 )。

buf[0](0x78 )--下位

----------------

行地址

三.大端序转换方法:

将Big-Endian转换为Little-Endian时,将出现以下内容:

#definebigtolittle16(a ) () ) ) a )0xff00 )8) |

() (uint16 ) ) a )0x00ff )8) )

#definebigtolittle32(a ) ) () () () (uint32 ) a )0xff000000 ) 24 ) |

() ) uint32 ) a )0x00ff0000 )8) |

() ) uint32 ) a )0x0000ff00 )8) |

() ) uint32 ) a )0x000000ff ) 24 ) )

四、大端序小端序的检测方法:(序列或缀合物(推荐) ) ) ) ) ) ) ) ) ) )四、大端序

如何确定处理器是大结局还是生命结局?

联盟uniON的存储顺序是所有成员从低地址开始存储,利用该特性可以容易地使CPU以Little-endian模式读写存储器。

int checkCPUendian (

{

union

{

unsigned int a;

unsigned char b;

(c );

c.a=1;

return(c.b==1);

}

/*返回1 : little-endian,返回0: big-endian * /

第二部分检测linux系统的大小端

/* ex8-1.c */

#包含

#包含

#包含

int main () )

{

union

{

短输入;

charc[sizeof(short ) ]

(UN;

struct utsnameuts;

un.inum=0x0102;

if(uname ) uts (0) )。

{

打印(couldnotgethostinformation. n );

返回- 1;

}

printf(%s-%s-%s:(n ),uts.machine,uts.sysname,uts.release );

短时间(if )!=2)

{

打印(sizeof short=% dn ),sizeof(short );

返回0;

}

if(UN.c[0]==1UN.c[1]==2) ) ) ) ) ) )。

打印(big _ endian. n );

ELSEif(UN.c[0]==2UN.c[1]==1) )

打印(little _ endian. n );

else

printf(unknown.n );

返回0;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。