注册 登录
查看: 525|回复: 11

[K60] k60fx 出现****default_isr entered on vector 3*****

[复制链接]
发表于 2014-11-16 20:57:42 | 显示全部楼层 |阅读模式
今晚晚上用printf输出一个浮点数,一用就出现硬件上访,然后做了如下尝试:1.因为工程是直接复制山外的例程然后自己改main函数的,首先看了一下工程配置是开了硬件浮点运算的,在论坛找了一下看到代码中也要开硬件浮点运算,然后将代码添加到工程中,还是不行。
2.看了一下频率设置,是PLL200,觉得可能是超频的原因,改为PLL120,还是不行。
3.只定义一个浮点数,不输出,还是不行。
4.不在工程中开启硬件浮点运算,频率为PLL200,定义一个浮点数用printf输出,一到输出这个浮点数的时候就卡在那里,修改一下程序,让这个浮点数自加1.0,但是不输出,程序运行正常。但是不知道是否真正开启了硬件浮点运算。
5.把程序中开启硬件浮点运算的代码注释掉,定义一个浮点数,先自加1.0,然后输出,发现能自加,但是不能输出。
现在还是找不到完美的解决方法,请山外哥解答一下,谢啦
回复

使用道具 举报

 楼主| 发表于 2014-11-16 21:21:16 | 显示全部楼层
有点乱 我决定重新做实验测试。。。
回复 支持 反对

使用道具 举报

发表于 2014-11-16 21:22:19 | 显示全部楼层
是IAR 的问题,IAR 浮点printf 有问题的。
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 21:23:08 | 显示全部楼层
1.频率PLL200, 工程中开启硬件浮点运算,软件没开。
程序如下
void  main(void)
{
    float f = 1.0;
    uint8 d = 1;
   
    printf("\r\n 硬件浮点运算测试 CORE频率为%d \r\n", CORE_CLK);
    printf("\r\n %d %f \r\n", d, f);
    while(1)
    {
      

    }
}

现象:一上电就硬件上访。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 21:26:05 | 显示全部楼层
2.频率PLL200,不在工程中开硬件浮点运算,软件也不开浮点运算
程序和上面一下
现象:
串口输出如下:
硬件浮点运算测试 CORE频率为12

1 1.000000

测试正常
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 21:36:06 | 显示全部楼层
3.频率PLL200,工程不开硬件浮点运算,软件开
程序如下

void  main(void)
{

    float f = 1.0;
    uint8 d = 1;
    uint32 i = 0;
     uint32 timevar;
    volatile float x=0.42;
    volatile float y=0.875;
   
    SCB->CPACR |=((3UL << 10*2)|(3UL << 11*2));     /* set CP10 and CP11 Full Access */
   
    printf("\r\n 硬件浮点运算测试 CORE频率为%d \r\n", CORE_CLK);
    printf("\r\n %d %f \r\n", d, f);
    while(1)
    {
        pit_time_start  (PIT0);                 //开始计时

        for(i=0;i<100000;i++)
        {
            x=x*y;
        }

        timevar = pit_time_get_us    (PIT0);    //获取计时时间

        pit_time_close  (PIT0);

        printf("\n\n计时时间为:%dus",timevar); //打印延时时间

        DELAY_MS(1000);

    }
}
现象:
串口输出如下

硬件浮点运算测试 CORE频率为12

1 1.000000


计时时间为:39871us

计时时间为:40000us

计时时间为:40000us
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 21:37:05 | 显示全部楼层
4.配置如3,但是注释掉开启软件浮点运算的代码,发现运算速度没有加快
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 21:41:48 | 显示全部楼层
5.工程设置中开硬件浮点运算,软件也开

void  main(void)
{

    float f = 1.0;
    uint8 d = 1;
    uint32 i = 0;
     uint32 timevar;
    volatile float x=0.42;
    volatile float y=0.875;
   
    SCB->CPACR |=((3UL << 10*2)|(3UL << 11*2));     /* set CP10 and CP11 Full Access */
   
    printf("\r\n 硬件浮点运算测试 CORE频率为%d \r\n", CORE_CLK);
    //printf("\r\n %d %f \r\n", d, f);
    while(1)
    {
        pit_time_start  (PIT0);                 //开始计时

        for(i=0;i<100000;i++)
        {
            x=x*y;
        }

        timevar = pit_time_get_us    (PIT0);    //获取计时时间

        pit_time_close  (PIT0);

        printf("\n\n计时时间为:%dus",timevar); //打印延时时间

        DELAY_MS(1000);

    }
}
现象:上电就硬件上访了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 21:46:09 | 显示全部楼层
6.疑惑来了,山外哥测试过正常的,为毛我测试就不行呢。然后我发现了一个问题。我定义的变量用的是float f = 1.0; 山外哥定义的是volatile float x=0.42; 差了一个关键字volatile,然后我做了最后一个测试。。。把我定义的f也加了volatile 。。嗯。。。实验正常。。。

硬件浮点运算测试 CORE频率为12


计时时间为:7000us

计时时间为:7000us

计时时间为:7000us
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 21:48:29 | 显示全部楼层
7.把开硬件浮点的代码注释掉,测试时间。

void  main(void)
{

   volatile float f = 1.0;
    uint8 d = 1;
    uint32 i = 0;
     uint32 timevar;
    volatile float x=0.42;
    volatile float y=0.875;
   
    //SCB->CPACR |=((3UL << 10*2)|(3UL << 11*2));     /* set CP10 and CP11 Full Access */
   
    printf("\r\n 硬件浮点运算测试 CORE频率为%d \r\n", CORE_CLK);
    //printf("\r\n %d %f \r\n", d, f);
    while(1)
    {
        pit_time_start  (PIT0);                 //开始计时

        for(i=0;i<100000;i++)
        {
            x=x*y;
        }

        timevar = pit_time_get_us    (PIT0);    //获取计时时间

        pit_time_close  (PIT0);

        printf("\n\n计时时间为:%dus",timevar); //打印延时时间

        DELAY_MS(1000);

    }
}
现象:

硬件浮点运算测试 CORE频率为12

****default_isr entered on vector 3*****

HardFault Interrupt
****default_isr entered on vector 3*****

HardFault Interrupt

嗯。。。。奇葩又来了。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-16 21:49:27 | 显示全部楼层
没时间继续测试下去了。。。顺便说下 iar版本为7.2,也是在论坛下载的
回复 支持 反对

使用道具 举报

发表于 2014-11-16 21:59:59 | 显示全部楼层
|~~練^習_. 发表于 2014-11-16 21:49
没时间继续测试下去了。。。顺便说下 iar版本为7.2,也是在论坛下载的

必须要硬件浮点开了,代码也配置开了,这样才可以的。

只开一个,要不硬件上访,要不速度没提升。
回复 支持 反对

使用道具 举报

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

本版积分规则

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