你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L011E4Y6的内存操作

[复制链接]
battery609 提问时间:2017-10-20 16:28 /
本帖最后由 battery609 于 2017-10-20 16:36 编辑

见两张调试的图:
能跑到黄箭头这个语句,但这个语句就是跑不过去,调试信息里CRC2的值也能看到了,是正确的,但就是没法赋值给CRC3,这个函数跑在STM32F103上却是好的,相同的编译环境(RVMDK5.23),然后用我注释掉的那个for循环一个个字节搬过去也是OK的,这玩意是不是可以认为这个CPU的RAM控制器有BUG啊。
也有可能是我学差了,忽视了一些细节,毕竟还是个门外汉,希望有高手能解我的疑惑,感激不尽!
QQ图片20171020162216.png
QQ图片20171020162225.png
收藏 1 评论6 发布时间:2017-10-20 16:28

举报

6个回答
battery609 回答时间:2017-10-20 16:41:34
补充:在STM32F103上面并没有直接运行这个程序,只是有类似的操作,F103上面的程序部分如下:
{
        uint8_t i;
        uint32_t temp;
        IRDA_txbuffer[0]=serial;
        IRDA_txbuffer[1]=size;
        for(i=0;i<size;i++)
                IRDA_txbuffer[i+2]=*(data+i);
        temp=crc32((uint32_t*)IRDA_txbuffer,size+2);
        *(uint32_t*)&IRDA_txbuffer[size+2] =temp;
}
battery609 回答时间:2017-10-23 21:07:28
沉得真快,顶贴
无薪税绵 回答时间:2017-11-22 11:33:31
看上去,没有问题。
你看看汇编那里不对。

或者
你可以使用memcpy函数试试。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

battery609 回答时间:2018-7-30 15:27:16
本帖最后由 battery609 于 2018-7-30 15:29 编辑

还是我自己来回答吧,出问题的MCU为STM32L011,不支持内存非对齐访问,所以地址必须是4的整数倍,例程中有地址+2的操作,会直接导致死机。而F103支持非对齐访问,所以就很幸运。平时这个当做兴趣爱好来玩的,门外汉就是门外汉。去年做的小东西又拿出来完善,再次遇到这个问题,硬啃了两天,总算找到原因了。

add:103也不叫非对齐访问,只是支持半字长访问,正好+2满足条件,所以没有问题。
ssssss 回答时间:2018-8-3 18:12:55
battery609 发表于 2018-7-30 15:27
还是我自己来回答吧,出问题的MCU为STM32L011,不支持内存非对齐访问,所以地址必须是4的整数倍,例程中有 ...

这个可以找到依据吗
battery609 回答时间:2018-8-9 10:29:48
wwwheihei 发表于 2018-8-3 18:12
这个可以找到依据吗

在有关M0+内核的内存控制器中能找到相关的内存访问指令。使用memcpy不会出现问题是因为该函数考虑了对齐问题
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版