OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3811|回复: 3

FreeRTOS_v2定时器中断卡死

[复制链接]

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
826
金钱
826
注册时间
2017-6-18
在线时间
163 小时
发表于 2021-10-3 20:24:42 | 显示全部楼层 |阅读模式
1金钱
FreeRTOS_v2定时器中断卡死;

FreeRTOS_V2 进入定时器中断,且运行5S后卡死;
同样的程序,放在多任务模式就没问题;

说明一下:什么方式都用过了,什么进入中断临界区,改中断优先级,OS版 / 普通版的开关中断都用过了,根本一能用;

环境:STM32F407VE+HAL+FreeRTOS

程序是CUBEMX生成的,内部有USB虚拟串口,也是有中断的,并且V2版也没看见过官方有进入临界区之类的操作;

最佳答案

查看完整内容[请看2#楼]

已经解决了,干扰导致电压不正常
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
826
金钱
826
注册时间
2017-6-18
在线时间
163 小时
 楼主| 发表于 2021-10-3 20:24:43 | 显示全部楼层

已经解决了,干扰导致电压不正常
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
826
金钱
826
注册时间
2017-6-18
在线时间
163 小时
 楼主| 发表于 2021-10-3 20:25:12 | 显示全部楼层
哪位大哥能指点一下吗?


这个中断函数:

void TIM6_DAC_IRQHandler(void)
{
//        taskDISABLE_INTERRUPTS();
//      
////        UBaseType_t sta;
////        sta=taskENTER_CRITICAL_FROM_ISR();
//      
//        HAL_TIM_IRQHandler(&_htim6);
//      
////        taskEXIT_CRITICAL_FROM_ISR(sta);
//      
//        taskENABLE_INTERRUPTS();
      
      
  if(__HAL_TIM_GET_FLAG(&_htim6,TIM_FLAG_UPDATE)!=RESET)
        {
                ControlBalance_TASK(NULL);
               
                __HAL_TIM_CLEAR_FLAG(&_htim6,TIM_FLAG_UPDATE);
        }
}


/******************************************************************************/
//×Ôƽoa¿ØÖÆèÎÎñ

void ControlBalance_TASK(void *p_arg)            //×Ôƽoa¿ØÖÆèÎÎñ
{
        float pitch=0, roll=0, yaw=0;
        //int16_t gyroX=0, gyroY=0, gyroZ=0;
        uint16_t valL=0, valR=0;

        //while(1)
        {
                mpu_dmp_get_data(&pitch,&roll,&yaw);         //»ñè¡MPU DMPêy¾Y
                //MPU_Get_Gyroscope(&gyroX,&gyroY,&gyroZ);     //»ñè¡MPU6050 Ëù¶èÖμ
               
//                valL=__HAL_TIM_GET_COUNTER(&_htim4);
//                valR=__HAL_TIM_GET_COUNTER(&_htim5);
//               
//                //×óÂÖ·-×aλÖüÆËã
//                if((int32_t)valL-valL_old<-32768)                     //&#188;&#198;êy&#198;÷&#184;o±&#223;&#212;μ
//                {
//                        valL_sum+=65536;                           //&#212;&#246;&#188;óò&#187;è|
//                }else if((int32_t)valL-valL_old>32768)                //&#188;&#198;êy&#198;÷&#213;y±&#223;&#212;μ
//                {
//                        valL_sum-=65536;                           //&#188;&#245;éùò&#187;è|
//                }
//                _posL=valL_sum+valL;                         //μ±&#199;°&#206;&#187;&#214;&#195;
//                valL_old=valL;
//               
//                //óò&#194;&#214;·-×a&#206;&#187;&#214;&#195;&#188;&#198;&#203;&#227;
//                if((int32_t)valR-valR_old<-32768)                     //&#188;&#198;êy&#198;÷&#184;o±&#223;&#212;μ
//                {
//                        valR_sum+=65536;                           //&#212;&#246;&#188;óò&#187;è|
//                }else if((int32_t)valR-valR_old>32768)                //&#188;&#198;êy&#198;÷&#213;y±&#223;&#212;μ
//                {
//                         valR_sum-=65536;                           //&#188;&#245;éùò&#187;è|
//                }
//                _posR=valR_sum+valR;                         //μ±&#199;°&#206;&#187;&#214;&#195;
//                valR_old=valR;
//               
//                _pos=(_posL+_posR)/2;                        //&#188;&#198;&#203;&#227;μ±&#199;°&#206;&#187;&#214;&#195;
//               
                err=0-pitch;
//                errSpeed=_pos_old-_pos;                      //&#188;&#198;&#203;&#227;&#203;ù&#182;è
//                _pos_old=_pos;
               
                out=pidUpdate(&_pidBalance,err);             //PID&#184;üD&#194;
                //outSpeed=pidUpdate(&_pidSpeed,errSpeed);
                //out-=outSpeed;
               
                motor_setPWM(out,out);
                //osDelay(10);
                //delay_ms(3);
                //ANOTC_Send_Status(roll,pitch,yaw,0,0,0);
                //printf("Frame Rate: %f\r\n",SYSTEM_FrameRate());
        }
}
/******************************************************************************/
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2021-10-5 19:48:42 | 显示全部楼层
中断频率多少
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 18:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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