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

[复制链接]
3544|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的,能不能说说要设置什么吗?
 楼主| xiaolanghahaha 发表于 2013-7-2 10:44 | 显示全部楼层
IJK 发表于 2013-7-2 10:34
看看相应生成的汇编啦,一般跟编译器的关系大点。

不太理解汇编语言,等下我贴出来汇编的代码,帮我看看行不?
 楼主| xiaolanghahaha 发表于 2013-7-2 10:47 | 显示全部楼层
  1. function.c:798                                temp =  (u8)(angle_abmt_ignit);
  2. 0xa8a2 <.ParameterTrans+96> 0x96            LDW   X,SP                LDW   X,SP
  3. 0xa8a3 <.ParameterTrans+97> 0x1C000E        ADDW  X,#0x000e           ADDW  X,#0x000e
  4. 0xa8a6 <.arameterTrans+100> 0xCDDED4        CALL  0xded4              CALL  c_ltor
  5. 0xa8a9 <.arameterTrans+103> 0xCDDBD0        CALL  0xdbd0              CALL  c_ftol
  6. 0xa8ac <.arameterTrans+106> 0xB603          LD    A,0x03              LD    A,0x03
  7. 0xa8ae <.arameterTrans+108> 0x6B0D          LD    (0x0d,SP),A         LD    (0x0d,SP),A
这个是该语句的汇编代码,帮我看看呗。。。表示不懂
IJK 发表于 2013-7-2 12:24 | 显示全部楼层
CALL  c_ltor
应该是调用了float的函数库
sun1238898 发表于 2013-7-2 14:33 | 显示全部楼层
你到设置里面看,有一个float选项,将其选中,然后看下,是否可以。
 楼主| xiaolanghahaha 发表于 2013-7-2 15:03 | 显示全部楼层
sun1238898 发表于 2013-7-2 14:33
你到设置里面看,有一个float选项,将其选中,然后看下,是否可以。

没找到float选项呀,我编译环境用的是stvd+cosmic
sun1238898 发表于 2013-7-2 15:17 | 显示全部楼层
恩,你到project-settings里面找linker,然后确认下,里面有一个float选项,你选中,试试。
 楼主| xiaolanghahaha 发表于 2013-7-2 15:26 | 显示全部楼层
sun1238898 发表于 2013-7-2 15:17
恩,你到project-settings里面找linker,然后确认下,里面有一个float选项,你选中,试试。 ...

嗯,谢谢啦,找到了,不过这个问题刚刚已经解决了,也没有用你说的方法,等下我把我自己找到的原因和解决方法开个新帖子给大家分享一下经验,感觉是一个比较实用的经验吧
sun1238898 发表于 2013-7-2 15:31 | 显示全部楼层
恩,好的,那一定要分享下,顺便告知一下我,
 楼主| xiaolanghahaha 发表于 2013-7-2 15:48 | 显示全部楼层
sun1238898 发表于 2013-7-2 15:31
恩,好的,那一定要分享下,顺便告知一下我,

写好了,已经@你了
getmore 发表于 2013-7-2 15:57 | 显示全部楼层
要说就贴出来啊,大家都想知道你是怎么解决的啊!
 楼主| xiaolanghahaha 发表于 2013-7-2 16:02 | 显示全部楼层
getmore 发表于 2013-7-2 15:57
要说就贴出来啊,大家都想知道你是怎么解决的啊!

我已经开了一个新帖给大家分享经验了,详情请看https://bbs.21ic.com/icview-578266-1-1.html
 楼主| xiaolanghahaha 发表于 2013-7-2 16:02 | 显示全部楼层
trumpxp 发表于 2013-7-2 19:33 | 显示全部楼层
帮楼主   顶一个    再看看别人的意见   应该问题不是很大   楼主
爱的力量 发表于 2013-7-2 23:29 | 显示全部楼层
 楼主| xiaolanghahaha 发表于 2013-7-3 10:04 | 显示全部楼层
trumpxp 发表于 2013-7-2 19:33
帮楼主   顶一个    再看看别人的意见   应该问题不是很大   楼主

谢谢,已经解决啦  
https://bbs.21ic.com/icview-578266-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

44

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部