打印
[STM32F1]

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

[复制链接]
672|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gongche|  楼主 | 2022-12-8 20:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ucos系统为什么跳不到下一个任务里

使用特权

评论回复
沙发
dingy| | 2022-12-8 20:46 | 只看该作者
         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|  楼主 | 2022-12-8 20:48 | 只看该作者
#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|  楼主 | 2022-12-8 20:50 | 只看该作者
你的第一个任务没有发送邮箱消息  这个发送消息 OSMboxPost

使用特权

评论回复
5
gongche|  楼主 | 2022-12-8 20:54 | 只看该作者
为啥第一次能进去啊

使用特权

评论回复
6
juventus9554| | 2022-12-8 20:54 | 只看该作者
那是你调试打的断点地方不对,如果你把调试断点打在OSMboxPend 下面一行 就不会进去了

使用特权

评论回复
7
dengdc| | 2022-12-8 20:56 | 只看该作者
多看看操作系统的代码,UCOS总共不过5000行代码

使用特权

评论回复
8
yszong| | 2022-12-8 20:58 | 只看该作者
没有传递消息,当然就过不去了。这还用问吗?

使用特权

评论回复
9
gongche|  楼主 | 2022-12-8 20:59 | 只看该作者
谢谢了,我一会儿就去看看

使用特权

评论回复
10
renyaq| | 2022-12-8 21:01 | 只看该作者
使用别人移植好的系统试试。

使用特权

评论回复
11
zhenykun| | 2022-12-8 21:03 | 只看该作者
开始怎么设置的驱动时钟?

使用特权

评论回复
12
pangb| | 2022-12-8 21:06 | 只看该作者
断点的地方有点错误吧,估计你也是对UCOS不是很了解吧,就只会用吧。

使用特权

评论回复
13
gongche|  楼主 | 2022-12-8 21:08 | 只看该作者
对 我就是移植别人的程序,不知道哪出问题了

使用特权

评论回复
14
dengdc| | 2022-12-8 21:10 | 只看该作者
会因为我的延时的问题么

使用特权

评论回复
15
xxmmi| | 2022-12-8 21:14 | 只看该作者

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

使用特权

评论回复
16
renyaq| | 2022-12-8 21:16 | 只看该作者
简单而言,在有OS的嵌入式程序里,想让任务运行必须想办法让任务得到CPU的使用权,否则任务无法运行的。

使用特权

评论回复
17
zhanghqi| | 2022-12-8 21:18 | 只看该作者
这个好像跟有没有OS无关吧

使用特权

评论回复
18
zhanghqi| | 2022-12-8 21:20 | 只看该作者
没有OS的也要考虑,但是完全与有OS的不同;有OS的要考虑任务如何才能获取CPU的使用权,而没有OS的则考虑CPU是否可以运行到该处即可。在有OS的系统里,如果优先级高的任务占用时间很长则优先级低的任务是无法运行的,无论是否把低优先级的任务设置为就绪状态!

使用特权

评论回复
19
dengdc| | 2022-12-8 21:22 | 只看该作者

想办法让任务得到CPU的使用权

使用特权

评论回复
20
huwr| | 2022-12-8 21:26 | 只看该作者
是不是没有触发啊

使用特权

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

本版积分规则

768

主题

9410

帖子

2

粉丝