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

[复制链接]
16050|92
john_light 发表于 2012-1-10 17:18 | 显示全部楼层
如果是正版的商业软件,你没有向别人分发拷贝的权利,除非你把自己机器上的删除。
john_light 发表于 2012-1-10 17:20 | 显示全部楼层
注意C语言中数据类型的自动转换
 楼主| 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

应该不会吧
cjseng 发表于 2012-1-10 18:15 | 显示全部楼层
原来不是51啊!

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

  //看看能不能进的来
李富贵 发表于 2012-1-10 19:35 | 显示全部楼层
4.22a 优化0级,确实是Keil的bug。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
李富贵 发表于 2012-1-10 19:48 | 显示全部楼层
IAR更狠,优化等级为None直接不编译if括号内的程序。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
mxh0506 发表于 2012-1-10 20:27 | 显示全部楼层
优化的问题最头疼. 小程序还好查, 程序越大越麻烦, 想定位错误都很难.
李富贵 发表于 2012-1-10 20:32 | 显示全部楼层
应该不会吧
Ryanhsiung 发表于 2012-1-10 18:10

什么不会,33楼的就是正确答案,你怎么一点debug的能力和水平都没有,你这么多积分都是怎么来的?
banyai 发表于 2012-1-11 09:25 | 显示全部楼层
这个不是编译器盗不盗版的问题,是整型提升,8位数据在做~时,会自动提升成整型,ARM上是32位,前面全是FF,所以两个数不相等了,做一次赋值运算,又会把整型强制转成8位,所以不会出错。
 楼主| Ryanhsiung 发表于 2012-1-11 11:03 | 显示全部楼层
41# 李富贵   答案确实是33L所说,我已经验证过了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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


那这应该算是为编译器的BUG。
 楼主| Ryanhsiung 发表于 2012-1-11 11:05 | 显示全部楼层
本帖最后由 Ryanhsiung 于 2012-1-11 11:11 编辑
什么不会,33楼的就是正确答案,你怎么一点debug的能力和水平都没有,你这么多积分都是怎么来的?
李富贵 发表于 2012-1-10 20:32


你也不看看我的签名,我大多东西都不精,我也在努力的学习中
banyai 发表于 2012-1-11 11:10 | 显示全部楼层
不是编译器的BUG,是C的规定。算术,关系,位等运算都会涉及到整型提升,只有逻辑和移位运算不会。
 楼主| Ryanhsiung 发表于 2012-1-11 11:11 | 显示全部楼层
不是编译器的BUG,是C的规定。算术,关系,位等运算都会涉及到整型提升,只有逻辑和移位运算不会。
banyai 发表于 2012-1-11 11:10

哦,学习
 楼主| 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编译器 、汇编编译器、等等
   
    你说你能全部搞精么????
兰天白云 发表于 2012-1-11 11:37 | 显示全部楼层
其实,没必要学这么多单片机,几款就够
joinj 发表于 2012-1-11 13:13 | 显示全部楼层
我也有过类似经历,同样的程序,用keil3  和 keil4 编译,结果天壤之别·····
 楼主| Ryanhsiung 发表于 2012-1-11 13:41 | 显示全部楼层
其实,没必要学这么多单片机,几款就够
兰天白云 发表于 2012-1-11 11:37

我也不想,但是公司新产品,旧产品用的都不一样
兰天白云 发表于 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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