打印

为什么会跳到硬件中断里面

[复制链接]
1504|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a369000753|  楼主 | 2013-4-26 15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
F4的板子
void Wait_ACK()
{
         u8 i =250;
        AD7415_SDA_1;
        AD7415_NOP;
        AD7415_SCL_1;
        AD7415_NOP;
        if(AD7415_SDA_STATE)
        printf("NO ACK\r\n");
        else
        printf("ACK\r\n");
    AD7415_SCL_0;
        AD7415_NOP;
}
为什么我家用一条 u8 i =250;
程序运行到这里就跳到硬件中断里面了。不加就不会。。为什么求解。
沙发
uet_cache| | 2013-4-26 15:50 | 只看该作者
你可以把定义放到函数外面,当成全局变量试试。

使用特权

评论回复
板凳
杨爱林林| | 2013-4-26 15:56 | 只看该作者
u8,最大值为0xff(255)  编译器认为i=250 (592) 已经溢出  故进入hardfault
不过有的编译器好像不会出现此类错误,会自动强制转换
比如u8 i=0x100(256)  会自动变为 i=0x01

使用特权

评论回复
地板
a369000753|  楼主 | 2013-4-26 17:16 | 只看该作者
杨爱林林 发表于 2013-4-26 15:56
u8,最大值为0xff(255)  编译器认为i=250 (592) 已经溢出  故进入hardfault
不过有的编译器好像不会出现此 ...

为什么会认为是 592呢? 250 和 592什么关系?

使用特权

评论回复
5
杨爱林林| | 2013-4-26 17:20 | 只看该作者
u8  即  unsigned char
u8定义的数据 当然是char型了  
故 0x250   2*256+5*16=592

使用特权

评论回复
6
杨爱林林| | 2013-4-26 17:22 | 只看该作者
a369000753 发表于 2013-4-26 17:16
为什么会认为是 592呢? 250 和 592什么关系?

可能我的说法有点不妥 但你明白我的意思就好了
u8  i=30;
这里的30  是  0x30   即十进制的  48

使用特权

评论回复
7
song19881218| | 2013-4-26 19:01 | 只看该作者
杨爱林林 发表于 2013-4-26 17:20
u8  即  unsigned char
u8定义的数据 当然是char型了  
故 0x250   2*256+5*16=592

楼主搞笑呢,明明是赋值的250又不是0x250.跟0x250什么联系呢?

使用特权

评论回复
8
杨爱林林| | 2013-4-27 08:51 | 只看该作者
song19881218 发表于 2013-4-26 19:01
楼主搞笑呢,明明是赋值的250又不是0x250.跟0x250什么联系呢?

我犯了个很严重的错误:)

使用特权

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

本版积分规则

11

主题

39

帖子

0

粉丝