打印
[STM8]

发现了一个惊天bug。。。不知道是编译器还是单片机本身的

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

这到底是怎么一回事????就简单一句最基本的强制类型转换,就会导致程序跑飞???是编译器的原因,还是单片机本身内核bug??
沙发
sun1238898| | 2013-7-2 10:33 | 只看该作者
应该是temp =(u8)  (temp2);这句话在编译器当中出现的问题。这不是什么bug,应该是设置的问题。

使用特权

评论回复
板凳
IJK| | 2013-7-2 10:34 | 只看该作者
看看相应生成的汇编啦,一般跟编译器的关系大点。

使用特权

评论回复
地板
xiaolanghahaha|  楼主 | 2013-7-2 10:43 | 只看该作者
sun1238898 发表于 2013-7-2 10:33
应该是temp =(u8)  (temp2);这句话在编译器当中出现的问题。这不是什么bug,应该是设置的问题。 ...

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

使用特权

评论回复
5
xiaolanghahaha|  楼主 | 2013-7-2 10:44 | 只看该作者
IJK 发表于 2013-7-2 10:34
看看相应生成的汇编啦,一般跟编译器的关系大点。

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

使用特权

评论回复
6
xiaolanghahaha|  楼主 | 2013-7-2 10:47 | 只看该作者
function.c:798                                temp =  (u8)(angle_abmt_ignit); 
0xa8a2 <.ParameterTrans+96> 0x96            LDW   X,SP                LDW   X,SP
0xa8a3 <.ParameterTrans+97> 0x1C000E        ADDW  X,#0x000e           ADDW  X,#0x000e
0xa8a6 <.arameterTrans+100> 0xCDDED4        CALL  0xded4              CALL  c_ltor
0xa8a9 <.arameterTrans+103> 0xCDDBD0        CALL  0xdbd0              CALL  c_ftol
0xa8ac <.arameterTrans+106> 0xB603          LD    A,0x03              LD    A,0x03
0xa8ae <.arameterTrans+108> 0x6B0D          LD    (0x0d,SP),A         LD    (0x0d,SP),A
这个是该语句的汇编代码,帮我看看呗。。。表示不懂

使用特权

评论回复
7
IJK| | 2013-7-2 12:24 | 只看该作者
CALL  c_ltor
应该是调用了float的函数库

使用特权

评论回复
8
sun1238898| | 2013-7-2 14:33 | 只看该作者
你到设置里面看,有一个float选项,将其选中,然后看下,是否可以。

使用特权

评论回复
9
xiaolanghahaha|  楼主 | 2013-7-2 15:03 | 只看该作者
sun1238898 发表于 2013-7-2 14:33
你到设置里面看,有一个float选项,将其选中,然后看下,是否可以。

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

使用特权

评论回复
10
sun1238898| | 2013-7-2 15:17 | 只看该作者
恩,你到project-settings里面找linker,然后确认下,里面有一个float选项,你选中,试试。

使用特权

评论回复
11
xiaolanghahaha|  楼主 | 2013-7-2 15:26 | 只看该作者
sun1238898 发表于 2013-7-2 15:17
恩,你到project-settings里面找linker,然后确认下,里面有一个float选项,你选中,试试。 ...

嗯,谢谢啦,找到了,不过这个问题刚刚已经解决了,也没有用你说的方法,等下我把我自己找到的原因和解决方法开个新帖子给大家分享一下经验,感觉是一个比较实用的经验吧

使用特权

评论回复
12
sun1238898| | 2013-7-2 15:31 | 只看该作者
恩,好的,那一定要分享下,顺便告知一下我,

使用特权

评论回复
13
xiaolanghahaha|  楼主 | 2013-7-2 15:48 | 只看该作者
sun1238898 发表于 2013-7-2 15:31
恩,好的,那一定要分享下,顺便告知一下我,

写好了,已经@你了

使用特权

评论回复
14
getmore| | 2013-7-2 15:57 | 只看该作者
要说就贴出来啊,大家都想知道你是怎么解决的啊!

使用特权

评论回复
15
xiaolanghahaha|  楼主 | 2013-7-2 16:02 | 只看该作者
getmore 发表于 2013-7-2 15:57
要说就贴出来啊,大家都想知道你是怎么解决的啊!

我已经开了一个新帖给大家分享经验了,详情请看https://bbs.21ic.com/icview-578266-1-1.html

使用特权

评论回复
16
xiaolanghahaha|  楼主 | 2013-7-2 16:02 | 只看该作者

使用特权

评论回复
17
trumpxp| | 2013-7-2 19:33 | 只看该作者
帮楼主   顶一个    再看看别人的意见   应该问题不是很大   楼主

使用特权

评论回复
18
爱的力量| | 2013-7-2 23:29 | 只看该作者

使用特权

评论回复
19
xiaolanghahaha|  楼主 | 2013-7-3 10:04 | 只看该作者
trumpxp 发表于 2013-7-2 19:33
帮楼主   顶一个    再看看别人的意见   应该问题不是很大   楼主

谢谢,已经解决啦  
https://bbs.21ic.com/icview-578266-1-1.html

使用特权

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

本版积分规则

4

主题

44

帖子

1

粉丝