搜索
bottom↓
回复: 17

求解msp430f5438a仿真出现的数据丢失的问题

[复制链接]

出0入0汤圆

发表于 2014-9-23 16:39:31 | 显示全部楼层 |阅读模式
本帖最后由 黑巧克力 于 2014-9-23 16:42 编辑

最近在做mpu-6050的数据融合的程序,网上普遍的算法是用四元数转为欧拉角。看了几天的原理之后,把每一步的含义都理解了。但是在仿真的时候出现了问题。

如图一:进行到az = az / norm;时  norm的值是存在的,但是在内存的地址看不懂
然后到了图二:进行到vx=2*(q1q3 - q0q2);  时,norm的值就不存在了。


楼主很是费解啊,想这程序已经有几天,改了不少还是不能解决,有热心的网友能帮我解答下为什么吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2014-9-23 16:52:33 | 显示全部楼层
不理解为什么内存地址会出现R11:R10 这样的形式?

出0入0汤圆

发表于 2014-9-23 17:22:26 | 显示全部楼层
不要太依赖 仿真,尤其是 IAR的。
把它定义成 全局变量,通常能正常调试,完后再改回来。

出0入0汤圆

 楼主| 发表于 2014-9-23 18:12:56 | 显示全部楼层
yigang 发表于 2014-9-23 17:22
不要太依赖 仿真,尤其是 IAR的。
把它定义成 全局变量,通常能正常调试,完后再改回来。 ...

好神奇!! 真的解决问题了!!

既然这样,那就再想请教个问题。之前说过我在做mpu-6050的数据融合程序。如图一angle_x是可以出现数值的,但是执行下一条指令时就卡住了,如图二。

这是为什么呢,我怎么看都觉得没有什么问题啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-9-23 18:30:10 | 显示全部楼层
本帖最后由 yigang 于 2014-9-23 18:34 编辑

ASIN(已知常数)试一下。。。

试着调整一下你的 堆,堆栈。。。因为你连续调用 数学函数, 系统优化时。。。。

出0入0汤圆

 楼主| 发表于 2014-9-23 19:44:28 | 显示全部楼层
yigang 发表于 2014-9-23 18:30
ASIN(已知常数)试一下。。。

试着调整一下你的 堆,堆栈。。。因为你连续调用 数学函数, 系统优化时。。 ...

的确我试了下,asin(常数)时,程序照样不能运行。

然后关于堆栈,之前学微机原理的时候稍微了解了一点堆栈,先进后出,后进先出,但是关于调堆栈还是不太懂

我想这个问题应该是堆栈溢出吧,这个程序的确很庞大,用了很多子程序,然后我再想想什么办法能够防止堆栈溢出

出0入0汤圆

发表于 2014-9-23 20:17:07 | 显示全部楼层
黑巧克力 发表于 2014-9-23 16:52
不理解为什么内存地址会出现R11:R10 这样的形式?

编译器没有给norm分配内存,而是在CPU寄存器R10和R11组合起来作为norm,当编译器认为norm没有用的时候就会清除R10和R11另作它用,自然看不到norm。
如果norm作为全局变量,编译器会分配一块固定的内存给norm,这块内存的地址就是用norm这个符号指示的,任何时候都能够看到。

出0入0汤圆

 楼主| 发表于 2014-9-23 20:35:09 | 显示全部楼层
Benyjuice 发表于 2014-9-23 20:17
编译器没有给norm分配内存,而是在CPU寄存器R10和R11组合起来作为norm,当编译器认为norm没有用的时候就 ...

那么局部变量都会出现这样的情况吗?  用不到的时候就清除掉寄存器的内容

出0入0汤圆

 楼主| 发表于 2014-9-23 21:27:58 | 显示全部楼层
yigang 发表于 2014-9-23 18:30
ASIN(已知常数)试一下。。。

试着调整一下你的 堆,堆栈。。。因为你连续调用 数学函数, 系统优化时。。 ...

试了好久还是不会调整堆栈,希望能够指点迷津

出0入0汤圆

发表于 2014-9-23 21:28:06 | 显示全部楼层
黑巧克力 发表于 2014-9-23 20:35
那么局部变量都会出现这样的情况吗?  用不到的时候就清除掉寄存器的内容 ...

局部变量也可能被编译进内存,如使用static关键字

出0入0汤圆

发表于 2014-9-24 08:22:08 | 显示全部楼层
黑巧克力 发表于 2014-9-23 21:27
试了好久还是不会调整堆栈,希望能够指点迷津

编译器 的设置功能中有选项。

我不知道 你具体使用的是哪个编译器。。。

出0入0汤圆

发表于 2014-9-24 08:40:46 | 显示全部楼层
局部变量就是这样,用过之后就看不到了

出0入0汤圆

 楼主| 发表于 2014-9-24 15:29:58 | 显示全部楼层
yigang 发表于 2014-9-24 08:22
编译器 的设置功能中有选项。

我不知道 你具体使用的是哪个编译器。。。 ...

我用的IAR那个版本是5.5.02

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-9-24 15:32:58 | 显示全部楼层
yigang 发表于 2014-9-24 08:22
编译器 的设置功能中有选项。

我不知道 你具体使用的是哪个编译器。。。 ...

连续调用函数会使得堆栈有问题吗?     这类问题的以后应该如何避免

出0入0汤圆

发表于 2014-9-24 15:56:12 | 显示全部楼层
本帖最后由 yigang 于 2014-9-24 16:00 编辑

其实这类问题没有定则可讲,稍微知道点儿 编译原理 你就能避免一些不该发生的(编译系统不能穷尽)错误。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-9-24 16:03:06 | 显示全部楼层
如图,像这样的表达式,很浪费系统的 堆,堆栈。。。
改成 AV=XXXXXXXX; ASIN(AV),要好一些,这就是所谓的 程序的 “线性”。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-9-24 16:20:33 | 显示全部楼层
yigang 发表于 2014-9-24 16:03
如图,像这样的表达式,很浪费系统的 堆,堆栈。。。
改成 AV=XXXXXXXX; ASIN(AV),要好一些,这就是所谓的  ...

恩 受教了,我前面的模块写的有点乱,等下再试试 这个方法。

PS如图,这就是调整堆栈大小吗?我平时不常用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-9-24 16:25:15 | 显示全部楼层
黑巧克力 发表于 2014-9-24 16:20
恩 受教了,我前面的模块写的有点乱,等下再试试 这个方法。

PS如图,这就是调整堆栈大小吗?我平时不常 ...

是的。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 04:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表