打印
[STM32F1]

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

[复制链接]
1249|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
azhangxingweia|  楼主 | 2017-9-22 14:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ucos系统为什么跳不到下一个任务里
沙发
azhangxingweia|  楼主 | 2017-9-22 14:16 | 只看该作者
本帖最后由 azhangxingweia 于 2017-9-22 14:18 编辑




                                                  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;
                                                }  
                                                }

使用特权

评论回复
板凳
azhangxingweia|  楼主 | 2017-9-22 14:17 | 只看该作者
#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;
                               
                        }

使用特权

评论回复
地板
feelhyq| | 2017-9-22 14:31 | 只看该作者
你的第一个任务没有发送邮箱消息  这个发送消息 OSMboxPost

使用特权

评论回复
5
azhangxingweia|  楼主 | 2017-9-22 14:47 | 只看该作者
feelhyq 发表于 2017-9-22 14:31
你的第一个任务没有发送邮箱消息  这个发送消息 OSMboxPost

为啥第一次能进去啊

使用特权

评论回复
6
feelhyq| | 2017-9-22 14:54 | 只看该作者
azhangxingweia 发表于 2017-9-22 14:47
为啥第一次能进去啊

那是你调试打的断点地方不对,如果你把调试断点打在OSMboxPend 下面一行 就不会进去了

使用特权

评论回复
7
feelhyq| | 2017-9-22 14:55 | 只看该作者
azhangxingweia 发表于 2017-9-22 14:47
为啥第一次能进去啊

多看看操作系统的代码,UCOS总共不过5000行代码

使用特权

评论回复
8
azhangxingweia|  楼主 | 2017-9-22 14:57 | 只看该作者
feelhyq 发表于 2017-9-22 14:55
多看看操作系统的代码,UCOS总共不过5000行代码

谢谢了,我一会儿就去看看

使用特权

评论回复
9
youtome| | 2017-9-22 16:47 | 只看该作者
使用别人移植好的系统试试。

使用特权

评论回复
10
youtome| | 2017-9-22 16:50 | 只看该作者
开始怎么设置的驱动时钟?

使用特权

评论回复
11
gaoke231| | 2017-9-22 22:39 | 只看该作者
断点的地方有点错误吧,估计你也是对UCOS不是很了解吧,就只会用吧。

使用特权

评论回复
12
azhangxingweia|  楼主 | 2017-9-23 00:52 | 只看该作者
gaoke231 发表于 2017-9-22 22:39
断点的地方有点错误吧,估计你也是对UCOS不是很了解吧,就只会用吧。

对 我就是移植别人的程序,不知道哪出问题了

使用特权

评论回复
13
azhangxingweia|  楼主 | 2017-9-23 00:53 | 只看该作者
feelhyq 发表于 2017-9-22 14:55
多看看操作系统的代码,UCOS总共不过5000行代码

会因为我的延时的问题么

使用特权

评论回复
14
icecut| | 2017-9-23 18:55 | 只看该作者
典型的拿 no os 的思想在写 os ,
建议你看21ic 公开课 stm32从入门到精通最后两节 freertos , 思想都是一致的

使用特权

评论回复
15
ticomi| | 2017-9-25 07:59 | 只看该作者
简单而言,在有OS的嵌入式程序里,想让任务运行必须想办法让任务得到CPU的使用权,否则任务无法运行的。

使用特权

评论回复
16
feelhyq| | 2017-9-25 08:57 | 只看该作者
ticomi 发表于 2017-9-25 07:59
简单而言,在有OS的嵌入式程序里,想让任务运行必须想办法让任务得到CPU的使用权,否则任务无法运行的。 ...

这个好像跟有没有OS无关吧

使用特权

评论回复
17
ticomi| | 2017-9-25 15:12 | 只看该作者
feelhyq 发表于 2017-9-25 08:57
这个好像跟有没有OS无关吧

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

使用特权

评论回复
18
zjlol| | 2017-9-26 09:19 | 只看该作者
学习了,谢谢!

使用特权

评论回复
19
Rangar| | 2017-9-26 18:20 | 只看该作者
想办法让任务得到CPU的使用权

使用特权

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

本版积分规则

23

主题

106

帖子

1

粉丝