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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值