搜索
查看: 6168|回复: 4

[已解决] stm32F103跑ucos部分任务停转死机是什么原因?

[复制链接]

该用户从未签到

1

主题

4

帖子

0

蝴蝶豆

初级会员

最后登录
2020-2-22
发表于 2017-9-15 14:40:09 | 显示全部楼层 |阅读模式
各位好,我遇到个关于stm32的问题,我的系统中有11个任务,起始任务优先级60,后面任务优先级依次是10,11,12,13,14,15、、、19;还有一个ms定时器;一个查询式按键,在ms定时器中检测,抛出消息到任务10中处理;
1、运行一段时间后,多个任务停转,从任务12开始低优先级的任务都不能调度到,只有10和11正常运行,定时器中断正常;当按键按键后消息能正常传递到任务优先级为10的任务中处理;
2、后来在定时器里面添加软件看门狗,每个任务pend信号超时1秒钟,每个任务运行一次会喂一次狗,如果出现调度延时超过10秒就抛出消息实现软件复位;
而目前的情况是,在出现任务停转的时候,看门狗能检测到,并且能抛出消息实现软复位,但是复位后,又会马上出现这个现象,只有把电源拔掉以后才会正常运行;
首先确定应该不是堆栈溢出的问题,应为我试过堆栈越界的话会导致所有任务都调度不到,而不是某些低优先级的任务调度不到。
请大家帮忙分析下原因看看。


回复

使用道具 举报

该用户从未签到

1

主题

13

帖子

0

蝴蝶豆

中级会员

最后登录
2023-8-12
发表于 2017-9-22 10:11:20 | 显示全部楼层
刚刚学习ucosiii 但是没有工程历程学习,现在卡在信息队列这里,我像你这样有多个任务,但是我怎么通过信息进行两个任务的通信呢?不知道是否可以发一下程序学习一下,511760409@qq.com 谢谢,保证只学习,不应用,不流传
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

蝴蝶豆

初级会员

最后登录
2020-2-22
 楼主| 发表于 2017-9-25 14:48:02 | 显示全部楼层
H0700210417 发表于 2017-9-22 10:11
刚刚学习ucosiii 但是没有工程历程学习,现在卡在信息队列这里,我像你这样有多个任务,但是我怎么通过信息 ...

项目中没有用消息队列,只用了信号量和锁,不过开发板上有个关于消息队列的例程,可以发你看看
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

蝴蝶豆

初级会员

最后登录
2020-2-22
 楼主| 发表于 2017-9-27 15:31:36 | 显示全部楼层
还有个情况,就是通过硬件复位信号,使单片机复位都不能再次正常运行,只能把电源断掉,重新上电。。。。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

蝴蝶豆

初级会员

最后登录
2020-2-22
 楼主| 发表于 2017-10-19 12:55:43 | 显示全部楼层
后来找到可能的原因了,想办法提高了复现率;
貌似是两个任务同时使用一个ADC的不同通道造成的,
当两个任务同时采样时,adc转化很快就完成了,在等待adc转化结束的while里面会一直等待,导致低于这个优先级的任务会一直堵死而高优先级的任务任然能运行;
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
        res = ADC_GetConversionValue(ADC1);
后来在检测前后加上锁,就没有复现这个问题了:
LOCK_ADC();
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
        res = ADC_GetConversionValue(ADC1);
UNLOCK_ADC();
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 10:25 , Processed in 0.180689 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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