历史上的今天
今天是:2025年05月06日(星期二)
2018年05月06日 | stm32数据存储
2018-05-06 来源:eefocus
大端模式:数据高字节保存在内存低地址,数据低字节保存在内存高地址;
小端模式:数据高字节保存在内存高地址,数据低字节保存在内存低地址;
stm32默认小端存储,如下图:
volatile float f = -0.1;
volatile float *p = &f;
volatile uint32_t i = 0xaabbccdd;
volatile uint32_t *p2 = &i;
volatile int32_t i2 = -5;
volatile int32_t *p3 = &i2;
| 变量名 | 地址 | 值 |
| f | 0x20000000 | 0xBDCCCCCD |
| p | 0x20000004 | 0x20000000 |
| i | 0x20000008 | 0xAABBCCDD |
| p2 | 0x2000000B | 0x20000008 |
看0x20000000地址存储的值,0xBDCCCCCD的存储顺序为CD CC CC BD,变量i的值的地址0x20000008存DD,之后一次存放CC BB AA。
计算机编码概念:参http://share.onlinesjtu.com/mod/tab/view.php?id=173点击打开链接
原码:符号位为0表示正数,为1表示负数,数值部分用二进制数的绝对值表示的方法称为原码表示法,通常用[X]原表示X的原码。
反码:正数的反码与原码相同,负数的反码是符号位不变,数值位逐位取反。
补码:把某数X加上模数K,称为以K为模的X的补码。[X]补=K+X(计算机中的加法器是以2n为模的有模器件,单字节有符号数据的模式2^8,即256)。
求补码的方法:
正数的补码的最高位为符号“0”,数值部分为该数本身;负数的补码的最高位为符号“1”,数值部分为用模减去该数的绝对值。
正数的补码与其原码相同;负数的补码是符号位不变,数值位逐位取反(即求其反码),然后在最低位加1。
移码:通常来说在计算机科学中,移码就是将补码的符号位取反,如下:
-120D = -1111000B(真值) 原码:11111000 反码:10000111 补码:10001000 移码:00001000 这样的移码也可以叫做偏移值为128的移码,也是标准移码(偏移值为2k-1,k为数据位数),即10000000B+(-1111000B)=10000000B+(10001000B)=00001000B。这样移码就可以表示为原数的补码加上偏移值。在IEEE 754浮点数表示中移码是非标准的,它的偏移值为2k-1-1,也就是说对于单精度浮点数的偏移值为127(双精度为1023)。参:https://zh.wikipedia.org/wiki/%E7%A7%BB%E7%A0%81维基百科
STM32的整型数据以补码形式存储,如上图:-5在内存中的存储值为0xFFFFFFFB,
-5: 原码:0x80000005 1000,0000,0000,0000,0000,0000,0000,0101(B)
反码:0xFFFFFFFA 1111,1111,1111,1111,1111,1111,1111,1010(B)
补码:0xFFFFFFFB 1111,1111,1111,1111,1111,1111,1111,1011(B)
浮点型数据存储:
STM32采用IEEE二进制浮点数算术标准(IEEE 754)参:https://zh.wikipedia.org/wiki/IEEE_754
IEEE标准从逻辑上采用一个三元组{S, E, M}来表示一个数N,它规定基数为2,符号位S用0和1分别表示正和负,尾数M用原码表示,阶码E用移码表示。根据浮点数的规格化方法,尾数域的最高有效位总是1,由此,该标准约定这一位不予存储,而是认为隐藏在小数点的左边,因此,尾数域所表示的值是1.M(实际存储的是M),这样可使尾数的表示范围比实际存储多一位。为了表示指数的正负,阶码E通常采用移码方式来表示,将数据的指数e 加上一个固定的偏移量后作为该数的阶码,这样做既可避免出现正负指数,又可保持数据的原有大小顺序,便于进行比较操作。(不使用标准移码原因,猜测是使用标准的偏移量2^(k-1)得到的最小数是1,最大数变成了0,数域为[-(2^(k-1)-1),2^(k-1)])参:http://share.onlinesjtu.com/mod/tab/view.php?id=176
-0.1 -> -0.00011001100110011001101 -> -1.1001100110011001101*2^(-4)(注意:是-0.00011001100110011001101,而不是-0.00011001100110011001100,因为不能完全表示为2进制,进一法表示,即-0.0001100110011001100110011....进一表示为-0.00011001100110011001101)
S:1;
E:127+(-4)=123 -> 0111,1011(B)
M:1.M=1.1001100110011001101 -> M为1001100110011001101
所以内存上存储为:1,0111,1011,1001,1001,1001,1001,1001,101
上一篇:关于STM32的变量定义
史海拾趣
|
请教 一个职业规划问题: \"闻道有先后,术业有专攻\",书虫也是慕名而来.目的只有一个,请斑竹赐教. 目前我在公司负责LED的驱动的电源一块,听别人说的,开关电源是头头,于是,苦命研究此类电源,不想各类此电源还真纷繁复 ...… 查看全部问答> |
|
一直在用51,最近上网买器件顺便买了一个STM32F103VB的迷你开发板和一个JLink,不知道这个东西从何学起,哪个老师能指点一下这个芯片怎么从零开始学习?(用Keil MDK) 多谢回复,谢谢!… 查看全部问答> |
|
二手开发板,IC呆料免费交易平台www.dz-dailiao.cn,www.电子呆料.cn 二手开发板,IC呆料免费交易平台www.dz-dailiao.cn,www.电子呆料.cn… 查看全部问答> |
|
快捷方式的运用:如果要在CE平台的桌面上显示一个程序的快捷方式,实现步骤为: 1、创建一个快捷方式。在开发机上用记事本一类的文字编辑软件写入字符格式为:长度#路径。其中长度为路径的字符个数。 例如“16#\\windows\\abc.exe”,注 ...… 查看全部问答> |
|
问一个MAX16823的输入电流和效率的问题。(MAXIM公司的请进) 在LED驱动里选择了MAX16823这个芯片。不过我在其供电电流和效率上遇到了一些问题。我把从官网上下载的PDF看了好几遍,又在官网上的搜索页里看了,都没发现提及MAX16823的效率以及输入电流与输出电流的信息。之所以特别提出来问,是因为,这个MAX168 ...… 查看全部问答> |
|
lm3s8962上的RT-Thread连载——简单的HTTP服务器 本来是打算从内核开始写起,到网络,文件系统,GUI等一系列连载,发现自己写东西的速度太慢,按这样的速度也不知道什么时候才能写到网络,而LM3S8962的精华部分在于网络,所以干脆先从网络部分的内容开始,后面间隔的插入内核等部分的内容。先预告 ...… 查看全部问答> |
|
意法半导体(ST)为STR91x的用户提供免费的TCP/IP协议栈 STMicroelectronics Delivers Free TCP/IP Stack for STR91x DesignersLow-footprint, vendor-supported stack accelerates Ethernet-based development using networ ...… 查看全部问答> |
|
最近买了一块芯片为MSP430F5438的LSD-STBD-A001-A2 ( 430F5实验平台 )。本人不会英语看不懂资料,请教各位老师,MSP430F5438与MSP430F169、MSP430F4XX、MSP430F14X等芯片相比,各项性能功能都超越了吗?先谢谢各位了!… 查看全部问答> |




