智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2275|回复: 5
打印 上一主题 下一主题

[咨询] 求助!同一个变量分别定义char和float类型,用IAR J-lINK调试时char型值比float大10

[复制链接]

2

主题

37

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2429
威望
1253
贡献
716
兑换币
718
注册时间
2012-10-11
在线时间
230 小时
跳转到指定楼层
1#
发表于 2013-11-16 15:55:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 擦肩。回首。 于 2013-11-16 16:02 编辑

求助!同一个变量分别定义char和float类型,用IAR J-lINK调试时char型值比float大10倍。比如我定义float angle=0;时计算得angle为32,而定义u8 angle=0 ;计算得的angle为3.2
但是我串口输出时用
if(angle>10.0)        printf("angle:%d  \n",(u8)angle);输出都为32.

我用的是野火的库,u8是unsigned char型。

float angle=0;时


u8  angle=0 ;时





本帖子中包含更多资源

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

x

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
2#
发表于 2013-11-16 16:38:31 | 只看该作者
把完整的 main 函数代码发来看看
回复 支持 反对

使用道具 举报

2

主题

37

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2429
威望
1253
贡献
716
兑换币
718
注册时间
2012-10-11
在线时间
230 小时
3#
 楼主| 发表于 2013-11-16 18:03:06 | 只看该作者
本帖最后由 擦肩。回首。 于 2013-11-16 18:04 编辑
野火 发表于 2013-11-16 16:38
把完整的 main 函数代码发来看看

void main(){
      DisableInterrupts;
      /************初始化*******************/      PIT_init();                                //PIT定时中断初始化            
PWM_init();                                //电机PWM输出初始化           
Coder_init();                                //编码器脉冲读取初始化     
//CCD_init();                                      
ADC_init();                                //加速度计\陀螺仪输入初始化      
// LCD_KEY_init();     
uart_init(UART0,115200);                      //初始化串口0

     // time_delay_ms(6000);
      /************************************/
      EnableInterrupts;                                            //开总中断
      while(1)   
  {      
  Kalman_Filter(accelerometer_angle,gyroscope_rate);      
  if(angle>10.0)        
printf("angle:%d \n",(u8)angle);        
//uart_putchar(UART0,(char)asin((accelerometer_angle-111.0)*0.009));      
  //printf("gyroscope_rate:%d\n",(u16)(gyroscope_rate));      
time_delay_ms(100);        
  }
}


float angle_zero=164.0;                                  //平衡角度63
float angle=0;
void Kalman_Filter(float angle_m,float gyro_m)
{   
    angle_m=(accelerometer_angle-MID)/ACC;        //sin值
    if(angle_m>1)                                 //正弦值不能大于1或小于-1
        angle_m=1;
    else if(angle_m<-1)
        angle_m=-1;

    angle_m=180/3.14159*asin(angle_m);

    angle=angle_m;
}



回复 支持 反对

使用道具 举报

21

主题

896

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4068
威望
2252
贡献
1296
兑换币
1483
注册时间
2012-7-30
在线时间
260 小时
毕业学校
克莱德大学
4#
发表于 2013-11-16 19:26:25 | 只看该作者
  1. void main(){
  2.         DisableInterrupts;
  3.         /************初始化*******************/
  4.         PIT_init();                                //PIT定时中断初始化            
  5.         PWM_init();                                //电机PWM输出初始化           
  6.         Coder_init();                              //编码器脉冲读取初始化     
  7.         //CCD_init();                                      
  8.         ADC_init();                                //加速度计\陀螺仪输入初始化      
  9.         // LCD_KEY_init();     
  10.         uart_init(UART0,115200);                   //初始化串口0

  11.         // time_delay_ms(6000);
  12.         /************************************/
  13.         EnableInterrupts;                          //开总中断
  14.         while(1)   
  15.         {      
  16.                 Kalman_Filter(accelerometer_angle,gyroscope_rate);      
  17.                 if(angle>10.0)        
  18.                         printf("angle:%d \n",(u8)angle);        
  19.                 //uart_putchar(UART0,(char)asin((accelerometer_angle-111.0)*0.009));      
  20.                 //printf("gyroscope_rate:%d\n",(u16)(gyroscope_rate));      
  21.                 time_delay_ms(100);        
  22.         }
  23. }


  24. float angle_zero=164.0;                           //平衡角度63
  25. float angle=0;
  26. void Kalman_Filter(float angle_m,float gyro_m)
  27. {   
  28.         angle_m=(accelerometer_angle-MID)/ACC;        //sin值
  29.         if(angle_m>1)                                 //正弦值不能大于1或小于-1
  30.                 angle_m=1;
  31.         else if(angle_m<-1)
  32.                 angle_m=-1;

  33.         angle_m=180/3.14159*asin(angle_m);

  34.         angle=angle_m;
  35. }
复制代码
发代码时用[code]标记可以保留缩进。

回复 支持 反对

使用道具 举报

2

主题

37

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2429
威望
1253
贡献
716
兑换币
718
注册时间
2012-10-11
在线时间
230 小时
5#
 楼主| 发表于 2013-11-16 19:45:13 | 只看该作者
rubick 发表于 2013-11-16 19:26
发代码时用[code]标记可以保留缩进。

谢谢!知道了!

回复 支持 反对

使用道具 举报

2

主题

37

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2429
威望
1253
贡献
716
兑换币
718
注册时间
2012-10-11
在线时间
230 小时
6#
 楼主| 发表于 2013-11-24 20:38:16 | 只看该作者
后来我发现float是科学计数法表示的 后面还有E+1。刚好是乘以10没有错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 07:31 , Processed in 0.069112 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表