[STM32F1]

ucos系统为什么跳不到下一个任务里

[复制链接]
575|22
手机看帖
扫描二维码
随时随地手机跟帖
gongche|  楼主 | 2018-12-22 18:37 | 显示全部楼层 |阅读模式
ucos系统为什么跳不到下一个任务里
jiahy| | 2018-12-22 18:40 | 显示全部楼层

                                                  while (1)
                                                {
                                                  adcx=Lsens_Get_Val();                        //获取ADC的值
                          
                                                  if(GuangMin_FLAG!=adcx)                      //判断当前值是否与上次值相等,相等就不进入判断继续执行当前音量
                                                {        
                                                  if(adcx<40)                                  //小于50调小音量
                                                {
                          YYuYin_BL.YuYintask=1;
                                                  YYuYin_BL.YuYin=4;
                                                  OSTimeDlyHMSM(0, 0, 0, 1);        
                                                                                               //发送音量数据
                          if(adcx<40)
                                                {
                                                  GuangMin_FLAG=adcx;                          //判断标志,使下一次不进入判断
                        }                                                        
                                                }        
                                                  else
                                                {
                                                  YYuYin_BL.YuYintask=1;
                                                  YYuYin_BL.YuYin=5;
                                                  OSTimeDlyHMSM(0, 0, 3, 0);
                                                  if(adcx>50)                                                        
                                                {
                                       GuangMin_FLAG=adcx;
                                                }  
                                                }

使用特权

评论回复
gongche|  楼主 | 2018-12-22 18:46 | 显示全部楼层
#include "includes.h"
                        
#include "YuYin_Driver.h"
OS_EVENT *MSBOX_AppTaskUaset1;//定义事件主动上送
unsigned short XHJ_Connect_Flag = 0;
unsigned int SendCount;
void Task_Uaset1(void* p_arg)
{
    OS_CPU_SR  cpu_sr;
    INT8U err;        
    unsigned int i,j;
    unsigned char *p;
    static unsigned char *pMSBOX_AppTaskUsart;
    static unsigned short Length;
    static unsigned short Usart_Timer1 = 2000;//2S
    static unsigned short GetXHJAddrCount = 0;
    unsigned char kind;
    unsigned char data;
    unsigned char *pData;
    unsigned char temp;
    unsigned int  count;
   
    Addr Addr_Temp;
        
    (void) p_arg;
    //创建USART接收邮箱
    MSBOX_AppTaskUaset1 = OSMboxCreate(0);
                                      
    while (1)
    {     
//                YuYin_Sound(2);
//                OSTimeDlyHMSM(0, 0, 3, 0);
               
        pMSBOX_AppTaskUsart = OSMboxPend(MSBOX_AppTaskUaset1,Usart_Timer1,&err); //等待消息的到来.并将此消息给SS这个指针   
        if(err == OS_NO_ERR)  //无错处理
        {
            OSTimeDlyHMSM(0, 0, 5, 0);
        }
               
                                if(YYuYin_BL.YuYintask==1)  //倒计时开始
                        {
                                switch(YYuYin_BL.YuYin)
                        {
                                case 0 :
                                YuYin_Sound(Sound_Stage_R);         //红灯请留步
                                OSTimeDlyHMSM(0, 0, 3, 0);
                                break;
                                case 1 :
                                if(YYuYin_BL.YuYin_G_FLAG==1)
                        {
                                YuYin_Sound(Sound_Stage_G);                 //绿灯通行
                                OSTimeDlyHMSM(0, 0, 3, 0);
                                YYuYin_BL.YuYin_G_FLAG=0;        
                        }
                                else
                        {        
                                YuYin_Sound(Sound_Stage_G_D);         //绿灯1s滴一次
                                OSTimeDlyHMSM(0, 0, 3, 0);
                        }        
                                break;
                                case 2 :
                                YYuYin_BL.YuYin_G_FLAG=1;
                                YuYin_Sound(Sound_Stage_G_D_D);        //绿灯1s滴两次
                                OSTimeDlyHMSM(0, 0, 3, 0);
                                break;
                                case 3 :
                                YuYin_Sound(Sound_Stage_R_TZ);         //红灯越过停止线
                                OSTimeDlyHMSM(0, 0, 3, 0);
                                break;
                                case 4 :
                                YuYin_Sound(Sound_Stage_L_YL);         //红灯越过停止线
                                OSTimeDlyHMSM(0, 0, 3, 0);
                                break;
                                case 5 :
                                YuYin_Sound(Sound_Stage_H_YL);         //红灯越过停止线
                                OSTimeDlyHMSM(0, 0, 3, 0);
                                break;
                                
                        }

使用特权

评论回复
gongche|  楼主 | 2018-12-23 08:28 | 显示全部楼层
你的第一个任务没有发送邮箱消息  这个发送消息 OSMboxPost

使用特权

评论回复
gongche|  楼主 | 2018-12-23 16:11 | 显示全部楼层
为啥第一次能进去啊

使用特权

评论回复
huwr| | 2018-12-23 16:15 | 显示全部楼层
那是你调试打的断点地方不对,如果你把调试断点打在OSMboxPend 下面一行 就不会进去了

使用特权

评论回复
huanghuac| | 2018-12-23 16:17 | 显示全部楼层
多看看操作系统的代码,UCOS总共不过5000行代码

使用特权

评论回复
gongche|  楼主 | 2018-12-23 16:21 | 显示全部楼层
谢谢了,我一会儿就去看看

使用特权

评论回复
happy_10| | 2018-12-23 16:24 | 显示全部楼层

使用别人移植好的系统试试。

使用特权

评论回复
wenfen| | 2018-12-23 16:27 | 显示全部楼层
开始怎么设置的驱动时钟?

使用特权

评论回复
zhuhuis| | 2018-12-23 16:31 | 显示全部楼层
断点的地方有点错误吧,估计你也是对UCOS不是很了解吧,就只会用吧。

使用特权

评论回复
gongche|  楼主 | 2018-12-23 16:34 | 显示全部楼层
对 我就是移植别人的程序,不知道哪出问题了

使用特权

评论回复
gongche|  楼主 | 2018-12-23 16:37 | 显示全部楼层
会因为我的延时的问题么

使用特权

评论回复
wenfen| | 2018-12-23 16:40 | 显示全部楼层

典型的拿 no os 的思想在写 os ,
建议你看21ic 公开课 stm32从入门到精通最后两节 freertos , 思想都是一致的

使用特权

评论回复
zhanghqi| | 2018-12-23 16:45 | 显示全部楼层
简单而言,在有OS的嵌入式程序里,想让任务运行必须想办法让任务得到CPU的使用权,否则任务无法运行的。

使用特权

评论回复
songqian17| | 2018-12-23 16:49 | 显示全部楼层
这个好像跟有没有OS无关吧

使用特权

评论回复
chenho| | 2018-12-23 16:52 | 显示全部楼层
没有OS的也要考虑,但是完全与有OS的不同;有OS的要考虑任务如何才能获取CPU的使用权,而没有OS的则考虑CPU是否可以运行到该处即可。在有OS的系统里,如果优先级高的任务占用时间很长则优先级低的任务是无法运行的,无论是否把低优先级的任务设置为就绪状态!

使用特权

评论回复
zwll| | 2018-12-23 16:55 | 显示全部楼层
想办法让任务得到CPU的使用权

使用特权

评论回复
gongche|  楼主 | 2018-12-23 17:01 | 显示全部楼层

其实还是不大明白,我再琢磨琢磨吧,多谢了哈,结贴了先

使用特权

评论回复
八层楼| | 2019-1-2 11:12 | 显示全部楼层
是不是没有触发啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

768

主题

9410

帖子

2

粉丝