自学内容网 自学内容网

在stm32中C语言编写的程序中,一个整形数据是怎么存储的,高位在前还是低位在前

目录

举个例子

如何验证

小结


在 STM32(基于 ARM Cortex-M 架构)的系统中,默认是小端(Little Endian) 存储方式。也就是说,对于一个整型(例如 32 位 int),它的最低有效字节(LSB)会存储在内存的低地址处,而最高有效字节(MSB)会存储在内存的高地址处。


举个例子

假设有一个 32 位的 int data = 0x12345678;

  • 在小端模式下,内存中的存放顺序从低地址到高地址依次是:

    低地址 -> 0x78
             0x56
             0x34
    高地址 -> 0x12
    
  • 如果是大端模式,则会相反(不过 STM32 默认不使用大端模式):

    低地址 -> 0x12
             0x34
             0x56
    高地址 -> 0x78
    

如何验证

可以在代码中进行类似下面的操作,同时下面的代码也可以验证8位的指针指向32位指针的时候,8位指针指向的是32位数据的最低位

#include <stdio.h>
#include <stdint.h>

int main(void)
{
    uint32_t data = 0x12345678;
    uint8_t *p = (uint8_t *)&data;

    printf("Address of data = %p\n", (void *)&data);
    printf("Byte 0 = 0x%02X\n", p[0]);
    printf("Byte 1 = 0x%02X\n", p[1]);
    printf("Byte 2 = 0x%02X\n", p[2]);
    printf("Byte 3 = 0x%02X\n", p[3]);

    while (1);
    return 0;
}
  • 在 STM32(小端模式)下,得到的输出通常为:

    Byte 0 = 0x78
    Byte 1 = 0x56
    Byte 2 = 0x34
    Byte 3 = 0x12
    

由此可以看出,最低有效字节 0x78 存储在最低地址处。


小结

  • STM32 默认使用小端序
  • 在内存中,“低地址处存放低有效字节、高地址处存放高有效字节”。

原文地址:https://blog.csdn.net/FCZlll/article/details/145258351

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!