打印
[工具和软件]

IAR环境下更改ARM大小端存储模式

[复制链接]
2252|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Vitality1|  楼主 | 2015-3-20 10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

关于ARM的大小端问题我本来早就想着说一说来着,结果前段时间一直在写DIY调试器的那点事就一直拖到现在,心想如果再不写出来2.5把我熏忘了就不好办了,哈哈。大小端这个概念对于我们这些搞嵌入式的人来说应该不陌生,只不过我们平时很多情况下不用考虑它罢了,可能也因此造成一些已经跨入嵌入式行业好多年的人只知道个概念却不知道其具体的含义。下面我们就细说说,当作普及知识了,呵呵:

    在计算机系统中,我们是一般是以字节为单位存储数据的,每个地址单元都对应着一个字节,一个字节为8bit。在C语言中,可能会有各个类型的变量,8位、16位、32位或者64位,那么对这些变量的存储则必然存在着一个多字节安排的问题,由此就导致了大端存储模式和小端存储模式。通常我们对大端和小端的定义为:

(1)大端,Big-Endian,即高位字节排放在内存的低地址端,低位字节排放在内存的高地址端;

(2)小端,Little-Endian,即低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

上面说的是概念,如果对应到实际CPU上来说,我们常用的X86架构是小端模式(Intel靠它统治了PC行业,心里响起那熟悉的旋律,灯。。。等灯等灯,哈哈),KEIL C51、PowerPC等则为大端模式(也是Intel最开始开发出来的架构,后来卖给各个半导体厂商了,要不说Intel真是NB),而我们现在常用的ARM处理器则既可以工作在大端模式下也可以工作在小端模式下,默认是工作在小端模式下的,那么我们怎么选择呢,这里我就以IAR环境下为例简单说说更改ARM大小端存储模式的方法:


相关帖子

沙发
Vitality1|  楼主 | 2015-3-20 10:47 | 只看该作者

首先打开IAR环境,新建一个ARM工程,然后右键工程选择“options”,进入到“General Options”选项卡,我们以ARM Cortex-M4核为例,选择目标芯片内核为Cortex-M4,存储模式先选择默认的小端模式,如下图:


使用特权

评论回复
板凳
Vitality1|  楼主 | 2015-3-20 10:47 | 只看该作者

然后选择Debugger为“simulator”即模拟模式,接着在主程序里编写代码如下:

unsigned short int a ;//定义16位变量

int main()
{
  a=0x0001;
  while(1)
  {
  }
  return 0;
}


使用特权

评论回复
地板
Vitality1|  楼主 | 2015-3-20 10:47 | 只看该作者

然后我们再回到开始,选择大端模式即 ,然后重新编译下载调试,运行之后查看变量a的地址,观察如下:

从上面两图可以清楚直观的看到ARM关于变量的大小端存储方式,是不是很有意思,呵呵,其实大小端不同是个很麻烦的事,在许多代码的跨平台移植上就需要考虑到这个问题


使用特权

评论回复
5
FSL_TICS_ZJJ| | 2015-4-10 14:42 | 只看该作者
非常感谢你关于Kinetis的经验分享 !

使用特权

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

本版积分规则

81

主题

421

帖子

9

粉丝