打印
[STM8]

指针跑飞

[复制链接]
1231|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangzsa|  楼主 | 2014-10-31 10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写了一个stm8208的CAN通讯程序,一次性传输了大量数据,一点问题没有。
后来,我在主程序中加了这么一句话:
temp =(u8)  (temp2);
其中,temp定义的是u8类型,而temp2定义的是float类型,仅仅是这么一个强制类型转换。。。
就会发现,can通讯传输数据的过程中,就会出现指针跑飞的现象,屏蔽这一句话,完全没有问题了。
沙发
wangzsa|  楼主 | 2014-10-31 10:02 | 只看该作者
can通讯是通过中断来实现的,而且经测试,强制类型转换的结果也是正确的

使用特权

评论回复
板凳
langgq| | 2014-10-31 10:04 | 只看该作者
是编译器的原因,还是单片机本身内核bug??

使用特权

评论回复
地板
wangzsa|  楼主 | 2014-10-31 10:04 | 只看该作者
我也不知道啊

使用特权

评论回复
5
zhuww| | 2014-10-31 10:06 | 只看该作者
应该是temp =(u8)  (temp2);这句话在编译器当中出现的问题。这不是什么bug,应该是设置的问题。

使用特权

评论回复
6
zhanglli| | 2014-10-31 10:16 | 只看该作者
看看相应生成的汇编啦,一般跟编译器的关系大点。

使用特权

评论回复
7
wangzsa|  楼主 | 2014-10-31 10:18 | 只看该作者

表示汇编语言拙计呀,不太懂,一开始就是学c的,能不能说说要设置什么吗?

使用特权

评论回复
8
wangzsa|  楼主 | 2014-10-31 10:18 | 只看该作者
zhanglli 发表于 2014-10-31 10:16
看看相应生成的汇编啦,一般跟编译器的关系大点。


不太理解汇编语言,等下我贴出来汇编的代码,帮我看看行不?

使用特权

评论回复
9
wangzsa|  楼主 | 2014-10-31 10:19 | 只看该作者

01.function.c:798                                temp =  (u8)(angle_abmt_ignit);

02.0xa8a2 <.ParameterTrans+96> 0x96            LDW   X,SP                LDW   X,SP

03.0xa8a3 <.ParameterTrans+97> 0x1C000E        ADDW  X,#0x000e           ADDW  X,#0x000e

04.0xa8a6 <.arameterTrans+100> 0xCDDED4        CALL  0xded4              CALL  c_ltor

05.0xa8a9 <.arameterTrans+103> 0xCDDBD0        CALL  0xdbd0              CALL  c_ftol

06.0xa8ac <.arameterTrans+106> 0xB603          LD    A,0x03              LD    A,0x03

07.0xa8ae <.arameterTrans+108> 0x6B0D          LD    (0x0d,SP),A         LD    (0x0d,SP),A
这个是该语句的汇编代码,帮我看看呗。。。表示不懂

使用特权

评论回复
10
lium| | 2014-10-31 10:19 | 只看该作者
CALL  c_ltor
应该是调用了float的函数库

使用特权

评论回复
11
guoyt| | 2014-10-31 10:21 | 只看该作者
你到设置里面看,有一个float选项,将其选中,然后看下,是否可以。

使用特权

评论回复
12
wangzsa|  楼主 | 2014-10-31 10:21 | 只看该作者

没找到float选项呀,我编译环境用的是stvd+cosmic

使用特权

评论回复
13
hanwe| | 2014-10-31 10:22 | 只看该作者
恩,你到project-settings里面找linker,然后确认下,里面有一个float选项,你选中,试试。

使用特权

评论回复
14
wangzsa|  楼主 | 2014-10-31 10:23 | 只看该作者
好,我试试,谢谢了啊

使用特权

评论回复
15
zh113214| | 2014-11-5 20:48 | 只看该作者
表示看不懂呀

使用特权

评论回复
16
xlsbz| | 2014-11-6 15:01 | 只看该作者
langgq 发表于 2014-10-31 10:04
是编译器的原因,还是单片机本身内核bug??

这两个原因肯定不是。相比而言 你代码问题可能性大

使用特权

评论回复
17
xlsbz| | 2014-11-6 15:02 | 只看该作者
float没用过啊  不清楚

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

914

主题

9040

帖子

5

粉丝