MDK+STM32F4xx - 函数局部变量,数组与指针

变量定义如下

    u8 TempMD5[16];// 16Byte,0x200216DB~0x200216F1
    u8 j;   // r5
    u32 sector = 0; // r6 

    u8 buf[5];  // sp 5Byte 0x200216D0~0x200216D7=
    u8 *p;      // r4

    p = buf;    
    *p      = 0x01;
    buf[0]  = 0x02;
    *buf    = 0x03;

    *(p+1) = 0x11;
    buf[1] = 0x12;


    *(p+6) = 0x21;
    buf[6] = 0x22;  //
  • 变量分布
    MDK+STM32F4xx - 函数局部变量,数组与指针_第1张图片
    进入函数后可以看到汇编语句SP移动,但是两个数据加到一块有21(16+5=21)个字节,与24(0x18)不对应。
    然后又查看Memory,buf从0x200216D0开始,而TempMD5是从0x200216DB开始并不是从0x200216D5。这是因为STM32F4系列是32字节对齐,所有buf占用地址为~0x200216D7,实际只用了5个字节。所以定义数组时长度尽量要用4的整位数。
    MDK+STM32F4xx - 函数局部变量,数组与指针_第2张图片
  • 数组与指针
    执行*(p+6) =0x21;语句将p指向的地址偏移6个单位后的字节赋值0x21,但buf[6]=0x22;MDK有告警提示,运行时没有溢出,查看汇编只将0x22赋给r0寄存器,就这一条指令。
    MDK+STM32F4xx - 函数局部变量,数组与指针_第3张图片

你可能感兴趣的:(STM32调试)