a.out来自于Unix C编译程序默认的可执行文件名。ELF格式已经被Linux系统作为标准的格式采用。当使用gcc时,gcc会完成预处理、编译、汇编和连接。GCC支持数种调试和剖析选项。gcc提供了一个很多其他C编译器里没有的特性,在gcc里能使-g和-O连用。......
2023-11-19
很多时候我们要处理的数据,除了整数和字符串,还有浮点数即小数。下面我们就来探究一下ARM核浮点数据。
1.浮点数据类型存储格式
在ARM体系中,浮点数是按照IEEE标准存储的。该标准定义了32位浮点和64位双精度浮点二进制小数。浮点二进制小数三部分组成:符号位、指数位和尾数位三部分组成。具体存储格式如表2.1所示。
表2.1 浮点数存储格式
2.浮点数据类型表示方法
对于将某个实数表示为计算机浮点数,首先要将其正规化,也就是表示为形如:
±1.bbbb…×2p
的样子。其中b是0或1,而p二进制数表示的指数位。这样,假设想表示为单精度的浮点数,那么第一位符号位用0表示正,用1表示负,在将指数p加上移码表示为8位的二进制数,在接下来的23位填充位数b部分。由于正规化表示时,最左边部分总是1,所以我们只需表示23位的尾数即可。
上述中有一个词:移码(exponential bias)。因为指数p有正有负,那么在8位的指数位中我们就要拿出第一位来指示符号,这样显然会造成不必要的浪费。给指数加上移码,就能保证结果总是一个非负数,也就可以将8个指数位都利用起来。对于有M个指数位的精度,其移码为:2M-1-1。
这样就得到上面两种精度的移码,见表2.2。
表2.2 两种精度浮点数移码(www.chuimin.cn)
以双精度的为例。双精度的指数位有11位。这样可以表示的数是从000 0000 0000到111 1111 1111,也就是指数加移码所表示的范围从0到2047,那么,减去移码1023,则可以表示的指数是-1023到1024。但是注意,-1023和1024作为他用(具体见IEEE754标准)。所以实际上能表示数的指数是从-1022到1023。
【例】2.4.1:求3.14的单精度浮点数表示。
解:①将3.14转成二进制。
整数部分3的二进制是11b,而小数部分0.14的二进制是:0.0010001111010111000010[10001111.....]b(方括号中表示小数点后第23位及之后)。
②将3.14二进制数正规化表示。
3.14的二进制代码就是:11.0010001111010111000010[10001111....]×20,那么用正规化表示就是:1.10010001111010111000010[10001111....]×21。方括号表示的就是小数点后第24位了,由于单精度浮点数尾数只有23位,所以需要舍入:由于第24位为1,且之后不全为0,所以需要向第23位进1完成上舍入:1.10010001111010111000011×21。
③移码。
其指数是1,需要加上移码127,即128,也就是(000 1000 0000)b。它又是正数,所以符号为0。综上所述,3.14的单精度浮点数表示为:
0 000-1000-0000 1001-0001-1110-1011-1000-011
十六进制代码为:0x4048F5C3
有关ARM嵌入式系统原理与应用的文章
a.out来自于Unix C编译程序默认的可执行文件名。ELF格式已经被Linux系统作为标准的格式采用。当使用gcc时,gcc会完成预处理、编译、汇编和连接。GCC支持数种调试和剖析选项。gcc提供了一个很多其他C编译器里没有的特性,在gcc里能使-g和-O连用。......
2023-11-19
在Linux系统中,文件系统可以根据需要随时装载。mount-text3/dev/hdal/mnt表示把刚才格式化好的IDE硬盘第一个分区挂载到/mnt目录下,并且指定了分区的文件系统类型是ext3。mount命令通过-t参数指定挂载文件系统的类型,还可以使用-o参数指定与文件系统相关的选项,例如数据的处理方式等。为了保证文件系统的完整性,在关闭文件系统之前,所有挂载的文件系统都必须卸载。umount/mnt表示把挂载在/mnt目录下的文件系统卸载。......
2023-11-19
以上规定说明了RS-232C标准对逻辑电平的定义。EIA-RS-232C与TTL转换:EIA RS-232C是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。......
2023-11-19
嵌入式系统的发展大致经历了嵌入式微控制器、嵌入式微处理器和嵌入式数字信号处理器、嵌入式片上系统和以Internet为标志的嵌入式系统等阶段。嵌入式系统的出现最初是基于单片机的,这一阶段的嵌入式系统硬件是单片机,软件停留在无操作系统阶段,采用汇编语言实现系统的功能。第四阶段是以Internet为标志的嵌入式系统。......
2023-11-19
上面介绍了字符设备驱动程序的重要的数据结构,那么如何设计一个字符设备驱动程序的数据结构?字符设备驱动程序的初始化流程一般可以用如下的过程来表示:定义相关的设备文件结构体[如file_operation()中的相关成员函数的定义]。向内核申请主设备号。内核提供了三个函数来注册一组字符设备编号,这三个函数分别是:alloc_chrdev_region()、register_chrdev_region()和register_chrdev()。所以在一般的字符设备驱动程序中,不会看到对cdev的操作。这里举出字符设备驱动程序的常见的两种编程架构。......
2023-11-19
Linux统按照文件中数据的特点对文件划分不同的类别,称做文件类型。Linux系统提供了一个file命令用来查看文件的类型,执行file<文件名>即可得到指定文件的类型。目录的第一项是目录本身,以“.”作为目录本身的名称。......
2023-11-19
按照惯例,所有的Makefile变量都应该是大写。如果变量的值发生变化,就只需要在一个地方修改,从而简化了Makefile的维护。现在利用变量把前面的Makefile重写一遍:除用户自定义的变量外,make还允许使用环境变量、自动变量和预定义变量。需要注意的是,如果用户在Makefile中定义了同名的变量,用户自定义变量将覆盖同名的环境变量。此外,Makefile中还有一些预定义变量和自动变量,但是看起来并不像自定义变量那样直观。......
2023-11-19
数据处理指令的使用原则:●所有操作数都是32位,可以是寄存器或立即数。后缀S表示指令的操作是否影响标志位。例如:3.ADD指令ADD{cond}{S}
2023-11-19
相关推荐