打印

深受盗版KEIL编译器之苦! 大家有没有同感? 此问题找到原因

[复制链接]
楼主: Ryanhsiung
手机看帖
扫描二维码
随时随地手机跟帖
41
如果是正版的商业软件,你没有向别人分发拷贝的权利,除非你把自己机器上的删除。

使用特权

评论回复
42
john_light| | 2012-1-10 17:20 | 只看该作者
注意C语言中数据类型的自动转换

使用特权

评论回复
43
Ryanhsiung|  楼主 | 2012-1-10 18:10 | 只看该作者
突然有个疑问
对于32位机
uint8_t Slave_RecBuff[2] = 0xAA;
那~Slave_RecBuff[2] = 0x55
还是0xFFFFFF55呢
sytu_chyq 发表于 2012-1-10 17:14

应该不会吧

使用特权

评论回复
44
cjseng| | 2012-1-10 18:15 | 只看该作者
原来不是51啊!

你试一下这样呢:
if( (Slave_RecBuff[1] &0xff)  ==  ((~Slave_RecBuff[2])&0xff) )

  //看看能不能进的来

使用特权

评论回复
45
李富贵| | 2012-1-10 19:35 | 只看该作者
4.22a 优化0级,确实是Keil的bug。

使用特权

评论回复
46
李富贵| | 2012-1-10 19:48 | 只看该作者
IAR更狠,优化等级为None直接不编译if括号内的程序。

使用特权

评论回复
47
mxh0506| | 2012-1-10 20:27 | 只看该作者
优化的问题最头疼. 小程序还好查, 程序越大越麻烦, 想定位错误都很难.

使用特权

评论回复
48
李富贵| | 2012-1-10 20:32 | 只看该作者
应该不会吧
Ryanhsiung 发表于 2012-1-10 18:10

什么不会,33楼的就是正确答案,你怎么一点debug的能力和水平都没有,你这么多积分都是怎么来的?

使用特权

评论回复
49
banyai| | 2012-1-11 09:25 | 只看该作者
这个不是编译器盗不盗版的问题,是整型提升,8位数据在做~时,会自动提升成整型,ARM上是32位,前面全是FF,所以两个数不相等了,做一次赋值运算,又会把整型强制转成8位,所以不会出错。

使用特权

评论回复
50
Ryanhsiung|  楼主 | 2012-1-11 11:03 | 只看该作者
41# 李富贵   答案确实是33L所说,我已经验证过了。

确实是0XFFFFFFFAA.jpg (12.59 KB )

确实是0XFFFFFFFAA.jpg

使用特权

评论回复
51
Ryanhsiung|  楼主 | 2012-1-11 11:04 | 只看该作者
这个不是编译器盗不盗版的问题,是整型提升,8位数据在做~时,会自动提升成整型,ARM上是32位,前面全是FF,所以两个数不相等了,做一次赋值运算,又会把整型强制转成8位,所以不会出错。 ...
banyai 发表于 2012-1-11 09:25


那这应该算是为编译器的BUG。

使用特权

评论回复
52
Ryanhsiung|  楼主 | 2012-1-11 11:05 | 只看该作者
本帖最后由 Ryanhsiung 于 2012-1-11 11:11 编辑
什么不会,33楼的就是正确答案,你怎么一点debug的能力和水平都没有,你这么多积分都是怎么来的?
李富贵 发表于 2012-1-10 20:32


你也不看看我的签名,我大多东西都不精,我也在努力的学习中

使用特权

评论回复
53
banyai| | 2012-1-11 11:10 | 只看该作者
不是编译器的BUG,是C的规定。算术,关系,位等运算都会涉及到整型提升,只有逻辑和移位运算不会。

使用特权

评论回复
54
Ryanhsiung|  楼主 | 2012-1-11 11:11 | 只看该作者
不是编译器的BUG,是C的规定。算术,关系,位等运算都会涉及到整型提升,只有逻辑和移位运算不会。
banyai 发表于 2012-1-11 11:10

哦,学习

使用特权

评论回复
55
Ryanhsiung|  楼主 | 2012-1-11 11:22 | 只看该作者
本帖最后由 Ryanhsiung 于 2012-1-11 11:26 编辑
什么不会,33楼的就是正确答案,你怎么一点debug的能力和水平都没有,你这么多积分都是怎么来的?
李富贵 发表于 2012-1-10 20:32


学的太多了,不能每样都精,
  先前
    能够CAD,设计普通的结构件,
    能够编写变通控制类PLC程序(5000行梯形图,掌握部分传感器、气动、液压知识)。
    以上两个是我先前做自动化的工作,有两个项目经验。(现在忘的差不多了)
现在:
    能够使用VC编写一些小程序
    能够使用DELPHI编写一些小程序
   这个主要是编写串口助手,用于调试下位机
   
    单片机 STC AVR PIC16 18 24 DSP33 STM8 STM32 NUC都应用过(现实N款产品)。
    IDE:KEIL、 MPLAB、ICCAVR、AVRSTUDIO、IAR
    还有相应的编译器:KEIL C51 、PIC 相应C编译器 、汇编编译器、等等
   
    你说你能全部搞精么????

使用特权

评论回复
56
兰天白云| | 2012-1-11 11:37 | 只看该作者
其实,没必要学这么多单片机,几款就够

使用特权

评论回复
57
joinj| | 2012-1-11 13:13 | 只看该作者
我也有过类似经历,同样的程序,用keil3  和 keil4 编译,结果天壤之别·····

使用特权

评论回复
58
Ryanhsiung|  楼主 | 2012-1-11 13:41 | 只看该作者
其实,没必要学这么多单片机,几款就够
兰天白云 发表于 2012-1-11 11:37

我也不想,但是公司新产品,旧产品用的都不一样

使用特权

评论回复
59
兰天白云| | 2012-1-11 15:41 | 只看该作者
在使用KEIL过程中,遇到很多编译器的问题,如下,最新发现的一个问题:
if(Slave_RecBuff[1] == (~Slave_RecBuff[2]))

  // 一直进不来  优化等级最低



Slave_RecBuff[2] =~Slave_RecBuff[2];
if(Slave_Rec ...
Ryanhsiung 发表于 2012-1-8 17:33


准确的讲应该有3种情况
1、如果满足条件后要执行的语句没有意义,则在优化时会被忽略(楼主不优化,当然不属于这种情况)
2、如果定义了变量是1字节的,那么肯定会执行

3、如果是整型,如图

x1=0x55(实际=0x0055)
x2=0xaa(实际=0x00aa)
~x2=0xff55
所以不会相等

产生这种问题只能是LZ自己的问题,怪不得KEIL

使用特权

评论回复
60
i55| | 2012-1-11 16:40 | 只看该作者
准确的讲应该有3种情况
1、如果满足条件后要执行的语句没有意义,则在优化时会被忽略(楼主不优化,当然不属于这种情况)
2、如果定义了变量是1字节的,那么肯定会执行
92500
3、如果是整型,如图
92501
x1=0x55( ...
兰天白云 发表于 2012-1-11 15:41

你水平还不如楼猪呢。
楼猪用的是stdint定义的uint8_t,也就是你的unsigned char。
而且他的单片机是m0,int类型是32位的,unsigned int=uint32_t

使用特权

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

本版积分规则