OpenEdv-开源电子网

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

ucos系统死机问题求助

[复制链接]

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-9-19
在线时间
8 小时
发表于 2017-9-30 23:46:10 | 显示全部楼层 |阅读模式
15金钱
用原子哥的ucos改写了飞控程序,但是这两天出现了死机跟程序初始化运行不下去的问题,导致飞机惨炸。有时候初始化程序都运行不下去,有时候运行下去了之后,程序就死机了。试过改变中断优先级,任务优先级,堆栈大小。都没能找出bug。

这是初始化程序这里是中断优先级

这里是任务各个任务的优先级跟堆栈大小还有每个中断里面都加了这两兄弟OSIntEnter();  OSIntExit();   然而实在找不出问题了,求大神解答!!!

最佳答案

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

// USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 找到bug了,把串口一的接收中断开启注释掉就可以了 不过我只是用串口一来把姿态数据传输到电脑上,并没有用到接收中断,这个问题导致的死机有点奇怪了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-9-19
在线时间
8 小时
 楼主| 发表于 2017-9-30 23:46:11 | 显示全部楼层
//        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
找到bug了,把串口一的接收中断开启注释掉就可以了
不过我只是用串口一来把姿态数据传输到电脑上,并没有用到接收中断,这个问题导致的死机有点奇怪了。
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-9-19
在线时间
8 小时
 楼主| 发表于 2017-9-30 23:52:51 | 显示全部楼层
                Delay_init();             //ÑÓʱ³õʼ»¯          
                NVIC_Configuration();          //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
                LED_Init();
                TIM_PWM_Init(2499,71);
                TIM2_Cap_Init(0xffff,71); //ÒÔ1MhzµÄƵÂʼÆÊý
                Init_USART1(115200);
                Init_USART3(115200);                //´®¿Ú¹âÁ÷
                MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR);
                 USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //ʹÄÜ´®¿Ú1µÄDMA·¢ËÍ
                Ultrasonic_Init();
                SPI1_INIT();
                while(!NRF_CHECK())
                {
                                LED0=0;
                                LED1=0;
                                Delay_ms(100);
                                LED0=1;
                                LED1=1;
                                Delay_ms(100);
                }
                NRF24L01_INIT();
                SetRX_Mode();
                NRF_GPIO_Interrupt_Init();
                MPU_IIC_Init();
                MPU6050_Init();
                MPU6050_Interrupt_Init();
                while(!w_and_angle.angle_yaw||w_and_angle.angle_yaw>161)                        //µÈ´ýangle_rollºÍangle_yawÎȶ¨
                {
                        LED1=0;
                        LED0=0;
                        Delay_ms(300);
                        LED1=1;
                        LED0=1;
                        Delay_ms(300);
                }
                Angle_Yaw_Flag=w_and_angle.angle_yaw;
                iwdg_init();
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-9-19
在线时间
8 小时
 楼主| 发表于 2017-9-30 23:54:19 | 显示全部楼层
                NVIC_InitTypeDef        NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
       

                /* ¿ªÆôÍⲿÖжÏ, 2¼¶ÏÈÕ¼ÓÅÏȼ¶£¬2¼¶ºóÕ¼ÓÅÏȼ¶£¬nRFÐźŽÓÊÕÖÐ¶Ï */
                NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                NVIC_Init(&NVIC_InitStructure);
       
                                /* ¿ªÆôÍⲿÖжÏ, 0¼¶ÏÈÕ¼ÓÅÏȼ¶£¬0¼¶ºóÕ¼ÓÅÏȼ¶£¬6050Êý¾Ý½ÓÊÕÖÐ¶Ï */
                NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                NVIC_Init(&NVIC_InitStructure);

                ///ÏÂÃæ½øÐд®¿ÚÖжÏNVICÅäÖÃ
                NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0 ;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQͨµÀʹÄÜ
                NVIC_Init(&NVIC_InitStructure);       
                /* ¿ªÆô²¶»ñÖжÏ, 0¼¶ÏÈÕ¼ÓÅÏȼ¶£¬0¼¶ºóÕ¼ÓÅÏȼ¶£¬³¬Éù²¨²¶»ñÐźÅÖжÏ*/
                NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM2ÖжÏ
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                NVIC_Init(&NVIC_InitStructure);   
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-9-19
在线时间
8 小时
 楼主| 发表于 2017-9-30 23:54:39 | 显示全部楼层
                OSTaskCreate(Debug_task,(void *)0,(OS_STK*)&Debug_TASK_STK[Debug_STK_SIZE-1],Debug_TASK_PRIO);                       
                OSTaskCreate(led_task,(void *)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO);
                OSTaskCreate(PID_PWM_task,(void *)0,(OS_STK*)&PID_PWM_TASK_STK[PID_PWM_STK_SIZE-1],PID_PWM_TASK_PRIO);
//                OSTaskCreate(MS5611_task,(void *)0,(OS_STK*)&MS5611_TASK_STK[MS5611_STK_SIZE-1],MS5611_TASK_PRIO);
                OSTaskCreate(Ultrasonic_task,(void *)0,(OS_STK*)&Ultrasonic_TASK_STK[Ultrasonic_STK_SIZE-1],Ultrasonic_TASK_PRIO);
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-9-19
在线时间
8 小时
 楼主| 发表于 2017-9-30 23:56:51 | 显示全部楼层
#define Debug_TASK_PRIO                               6
#define Debug_STK_SIZE                                      128

#define LED_TASK_PRIO                               8
#define LED_STK_SIZE                                      32

#define PID_PWM_TASK_PRIO                               3
#define PID_PWM_STK_SIZE                                      64

#define Ultrasonic_TASK_PRIO                       2
#define Ultrasonic_STK_SIZE                                      64
回复

使用道具 举报

32

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
697
金钱
697
注册时间
2017-1-7
在线时间
75 小时
发表于 2017-10-1 16:17:26 | 显示全部楼层
中断函数内部程序前后需要加上OSIntEnter();和OSIntExit();
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-9-19
在线时间
8 小时
 楼主| 发表于 2017-10-2 09:55:00 | 显示全部楼层
Jevin乐动 发表于 2017-10-1 16:17
中断函数内部程序前后需要加上OSIntEnter();和OSIntExit();

5个中断都加有这两兄弟了
回复

使用道具 举报

32

主题

171

帖子

0

精华

高级会员

Rank: 4

积分
697
金钱
697
注册时间
2017-1-7
在线时间
75 小时
发表于 2017-10-2 10:54:01 | 显示全部楼层
接收和发送数据都是中断方式吗?
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-9-19
在线时间
8 小时
 楼主| 发表于 2017-10-2 11:57:30 | 显示全部楼层
Jevin乐动 发表于 2017-10-2 10:54
接收和发送数据都是中断方式吗?

MPU6050接收、NRF接收、超声波捕获、光流串口接收  四个中断,之前说错成5个了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165287
金钱
165287
注册时间
2010-12-1
在线时间
2107 小时
发表于 2017-10-8 20:20:42 | 显示全部楼层
mdxlz 发表于 2017-10-2 16:20
//        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
找到bug了,把串口一的接收中断开启注释掉就可以了
...

你看看是不是没有中断服务函数
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-2 04:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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