PIC16f877a 微控制器是否遵循小端字节排序系统?

Dua*_*lva 1 c microcontroller endianness pic xc8

我已经在 XC8 编译器上编译了这个简单的代码,并将十六进制文件加载到 Picsimlab - 具有 PIC16f877a 微控制器的模拟器板(板 4)。

    unsigned int x = 1;
    char *ptr = (char *) &x;

    if (*ptr == 1)
    {

        clcd_print("little Endian", LINE1(0));
    }
    else
    {
        clcd_print("big Endian", LINE1(0));
    } 
Run Code Online (Sandbox Code Playgroud)

输出:小端

那么我们可以推论Xc8编译器遵循小端字节序系统来编程PIC16f877a吗?
这是否也意味着 PIC16f877a 使用小端字节序系统将变量存储到其数据存储器中?

您能否提供指向有关字节排序系统的文档的链接,然后是 PIC16f877a 和 XC8 编译器?

Mik*_*ike 6

查看XC8编译器的用户指南。在第 5.4.2 章中,您可以阅读有关整数变量的字节序:

所有整数值都以小端格式表示,最低有效字节 (LSB) 位于低地址

Little endian 是所有 xc 编译器的默认值且仅使用端序。

PIC16 系列是 8 位控制器,因此控制器本身不必关心字节序。

  • 虽然 PIC16 确实不关心字节序,但有些寄存器逻辑上比 8 位宽,并且它们以小字节序格式排列,如 TMR1H:TMR1L。 (2认同)
  • @Mike你的说法是“PIC16系列是一个8位控制器,因此控制器本身不必关心字节顺序”如果控制器不关心字节顺序,它如何处理整数(2字节)。 (2认同)
  • @Babajan 它使用两个 8 位指令来访问它们。控制器不关心字节顺序,因为它一次访问 8 位。然后,编译器可以生成将低地址字节解释为具有最高或最低有效位的指令,编译器可以操纵是否使用哪种字节顺序解释数据。 (2认同)