硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1846|回复: 11
收起左侧

[有问必答] stm8s程序计算变量赋值遇到问题

[复制链接]

36

主题

249

回帖

357

积分

高级会员

积分
357
发表于 2021-7-24 14:17:54 | 显示全部楼层 |阅读模式
在用IAR3.10.1做stm8s903的程序求均方根值时,遇到问题;用stlink的swim仿真查看变量,uint32_t 定义的两个变量watch窗口一直为0,赋值不成功;以为是自己优化问题,降低优化为0,还不成功;以为是局部变量问题,修改为全局变量,还不成功;此时,用了硬汉哥的EK2的例程修改,仿真变量还是0;所以还是得来请教版主;有图片。

仿真图片

仿真图片
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-7-24 14:35:59 | 显示全部楼层
附上8s903测试的源程序

问题源程序.rar

2.8 MB, 下载次数: 0

回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-7-24 14:36:45 | 显示全部楼层
均方根函数,用vs2012测试,没问题的呀;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-7-24 15:21:40 | 显示全部楼层
仅看你发的程序截图,没发现什么问题。

考虑把你封装的函数直接在main里面实现试试

回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-7-24 16:12:38 | 显示全部楼层
eric2013 发表于 2021-7-24 15:21
仅看你发的程序截图,没发现什么问题。

考虑把你封装的函数直接在main里面实现试试

嗯,所以比较疑惑;我直接放到了main里面,计算赋值不行,但是直接赋值个常数却没问题,是IAR版本的问题?
456.png
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-7-24 17:00:30 | 显示全部楼层
用了其他IAR版本2.20.3版本测试,也是这样的结果,所以哩,谁仿真,指点指点呗;
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-7-24 17:02:42 | 显示全部楼层
最简单版的测试源程序,不添加库文件,只有几个头文件和main;仿真测试结果,还是一样。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2021-7-25 09:06:11 | 显示全部楼层
zhengwending 发表于 2021-7-24 17:00
用了其他IAR版本2.20.3版本测试,也是这样的结果,所以哩,谁仿真,指点指点呗;

帮不上了,没用过STM8,没法帮你验证了。
帮你在STM32上运行了下,是没问题的。
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-7-25 10:44:00 | 显示全部楼层
eric2013 发表于 2021-7-25 09:06
帮不上了,没用过STM8,没法帮你验证了。
帮你在STM32上运行了下,是没问题的。

嗯  谢谢版主积极回复;用的是stm8s的片子,版主出过开发板的。已经解决;解决方法是:先把int16的数据 a16  赋值给int32的数据 b32;用b32 = b32 * b32的方式计算就可以了;不能直接用 b32 = a16 * a16的方式;具体原因还未分析,可能跟IAR for stm8的编译器有关系;

结贴;再次感谢版主。
回复

使用道具 举报

334

主题

2035

回帖

3042

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3042
发表于 2021-7-26 10:44:08 | 显示全部楼层
zhengwending 发表于 2021-7-25 10:44
嗯  谢谢版主积极回复;用的是stm8s的片子,版主出过开发板的。已经解决;解决方法是:先把int16的数据 a ...

我感觉可能是还是语法方面的问题。
你的uidata是有符号的数,它们相乘以后还是有符号的数。 似乎不应该强制转换成无符号的再赋值。
建议这么个写法,应该可以:
ultemp=1L*uidata1*uidata1;

fdata=1.0f*uldata;
一般,尽量不要用强制转换,容易有各种问题。
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
 楼主| 发表于 2021-7-27 09:15:37 | 显示全部楼层
caicaptain2 发表于 2021-7-26 10:44
我感觉可能是还是语法方面的问题。
你的uidata是有符号的数,它们相乘以后还是有符号的数。 似乎不应该 ...

嗯 OK  谢谢回复;我看stm8s的库 好多都是强制转换用法; 直接*1.0f或者1 这种是不是更好一点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-8 16:10 , Processed in 0.310918 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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