搜索
bottom↓
回复: 5

在lpc2136下跑ucosII,有一个任务没执行或只跑一次?

[复制链接]

出0入0汤圆

发表于 2012-7-12 21:28:38 | 显示全部楼层 |阅读模式
如题,在lpc2136下跑ucosII,有四个任务。task1:点灯,优先级2,task2:uart0发数据,优先级6,task3:uart1发数据,优先级3,task4:uart1接数据,优先级4。当光炮前三个任务时,正常;添加任务四时,当任务四跑一次后,任务2就停止了,任务四也不跑了,只有灯闪烁;当加大任务2的堆栈大小时,任务4一直不执行,这是怎么一回事啊?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2012-7-12 21:29:50 | 显示全部楼层
等待高手指点。

出0入0汤圆

 楼主| 发表于 2012-7-13 17:16:09 | 显示全部楼层
本帖最后由 general111 于 2012-7-13 17:19 编辑

#include "config.h"
#include "stdlib.h"

#define  UART0_BPS 9600   // 定义通讯波特率
#define  UART1_BPS 115200   // 定义通讯波特率

#define Task0StkLengh    100          //Define the Task0 stack length 定义用户任务0的堆栈长度
#define Task1StkLengh    300
#define Task2StkLengh    100
#define Task3StkLengh    200

uint8 Flag_Sms=0;
uint8 Flag_buf=0;
uint8 Flag_gIsNewMsg=0;
uint8 Flag_gmax=0;
uint8 Flag_pass=0;
uint8 Flag_telcompare=0;
uint8 Flag_revsms=0;
uint8 Flag_task2=0;
uint8 Flag_task3_1=0;
uint8 Flag_task3_2=0;
uint8 Flag_task3_3=0;
uint8 Flag_task3_4=0;
uint8 Flag_task3_5=0;
uint8 Flag_task3=0;

OS_STK  Task0Stk [Task0StkLengh];     //Define the Task0 stack 定义用户任务0的堆栈
OS_STK  Task1Stk [Task1StkLengh];
OS_STK  Task2Stk [Task2StkLengh];
OS_STK  Task3Stk [Task3StkLengh];


void    Task0(void *pdata);         //Task0 任务0
void    Task1(void *pdata);
void    Task2(void *pdata);
void    Task3(void *pdata);

int main (void)
{
    OSInit ();
    OSTaskCreate (Task0,(void *)0, &Task0Stk[Task0StkLengh - 1], 2);
        OSTaskCreate (Task1,(void *)0, &Task1Stk[Task1StkLengh - 1], 5);
        OSTaskCreate (Task2,(void *)0, &Task2Stk[Task2StkLengh - 1], 3);
        OSTaskCreate (Task3,(void *)0, &Task3Stk[Task3StkLengh - 1], 4);

    OSStart ();
    return 0;
}

/*********************************************************************************************************
**                            Task0 任务0
**                工作灯
********************************************************************************************************/

void Task0  (void *pdata)          
{
       
        pdata = pdata;

    TargetInit ();

    GpioInit();                //led 初始化

        Uart1Init(UART1_BPS);//Uart1 初始化
        SIM300Init();//初始化SIM300



    while (1)
    {   
       if ((IO0SET & RUN) == 0)
                {
                        IO0SET = RUN;//运行状态指示灯
                        OSTimeDly(50);
                        }
                else
                {
                        IO0CLR = RUN;
                        OSTimeDly(50);
                        }
            OSTimeDly(50);

    }
}
/*********************************************************************************************************
**                            Task1 任务1
**                查询记录  
********************************************************************************************************/
//union uint_2uchar Com_Rec_Chk;      // /lzp 接收命令校验和计算寄存器 /lzp

void Task1  (void *pdata)
{
    uint8 pp[]="Uart0 is OK! welcome to LPC!";
       

        uint8 i;

        pdata = pdata;
       
        if(Uart0Init(UART0_BPS))
        {
                Uart0SendData(pp);
        }
        OSTimeDly(50);
       

        while(1)
        {
               
                SendData_CHD802();//顺序查询历史记录  CHD802的协议       
          
           OSTimeDly(200);           //等待接收完毕
          

        }
}
/*********************************************************************************************************
**                            Task2 任务2
**                通过uart0接收数据,有刷卡事件时通过短信发送
********************************************************************************************************/


void Task2  (void *pdata)
{
          
         uint8 buf[11];         
         pdata = pdata;
         OSTimeDly(50);
         
         while(1)
         {
                 
                 protocol();         //处理接收的协议                 
                 if(Ready_Flag)         //有刷卡短息 ,发卡号
                {
                        
                        Ready_Flag=0;
                        //转换为10位卡号
                        buf[0]=(Dinfo.ID1%100/10)+'0';
                        buf[1]=(Dinfo.ID1%10)+'0';
                       
                        buf[2]=(Dinfo.ID2%100/10)+'0';
                        buf[3]=(Dinfo.ID2%10)+'0';
                       
                        buf[4]=(Dinfo.ID3%100/10)+'0';
                        buf[5]=(Dinfo.ID3%10)+'0';
                       
                        buf[6]=(Dinfo.ID4%100/10)+'0';
                        buf[7]=(Dinfo.ID4%10)+'0';
                       
                        buf[8]=(Dinfo.ID5%100/10)+'0';
                        buf[9]=(Dinfo.ID5%10)+'0';

                        buf[10]='\0';
                        //发英文格式短信
                        SendSms(telcode1,buf);
                        OSTimeDly(100);
                                               
                }

                OSTimeDly(50);
         }          
}
/*********************************************************************************************************
**                            Task3 任务3
**                测试SIM卡
********************************************************************************************************/
void Task3  (void *pdata)
{
         /*发短消息CTL+Z={0x1a,0x0} CR=0x0d LF=0x0a*/
          /*AT+CMGS="15023664179"<CR>HELLO!<CTL+Z><CR>*/
        //         uint8 i;
       
        uint8 telSource[12]={0};         //要修改的手机号
        uint8 telDestination[12]={0}; //修改成的手机号
        uint8 Secret[Password_num]={0}; //读到的密码
        uint8 data_buf[42]={'a','d','m','i','n',' ','1','3','7','0','5','3','3','0','9','2','9','\0',
                                                                                                  '1','3','0','0','4,'5','0','1,'9,'1','5','\0',
                                                                                                 '1','5','8','6','4','2','6','0','6','3','9','\0'};

        uint8 i=0,k=0,j=0;
        pdata = pdata;
        I2cInit(100000);                                                /* I2C初始化,400K                        */
        OSTimeDly(200);

        /* 往起始地址0x00开始写入39个数据        */
        I2C_WriteNByte(CAT24C16, X_ADD_8_SUBA, 0x00, data_buf, 42);
        OSTimeDly(50);

         TelphoneInit();         //Telphone初始化 : 读出Password和3个telphone NO.       
         OSTimeDly(200);


         Uart1SendData("AT+CPIN?\r");//SIM卡状态  返回:+CPIN:  READY , 则正常       
         OSTimeDly(100);
         while(Uart1RevBuf[i++]!=0x0)
         {
                if(Uart1RevBuf=='R'&&Uart1RevBuf[i+1]=='E'&&Uart1RevBuf[i+2]=='A'&&Uart1RevBuf[i+3]=='D'&&Uart1RevBuf[i+4]=='Y')       
                {
                        break;
                }
                Uart1SendData("AT+CPIN?\r");
                OSTimeDly(100);
         }
       
         Uart1SendData("AT+CSCA?\r");//设置短信中心号码了吗 AT+CSCA=“+8613800270500”        设置为当地运营商号码(具体而定)
         OSTimeDly(100);

         Uart1SendData("AT+CMGD=1\r");  //删除所有段信   \"DEL ALL\"
         Uart1SendData("AT+CMGD=2\r");
         Uart1SendData("AT+CMGD=3\r");
         Uart1SendData("AT+CMGD=4\r");
         Uart1SendData("AT+CMGD=5\r");
         Uart1SendData("AT+CMGD=6\r");
         Uart1SendData("AT+CMGD=7\r");
         Uart1SendData("AT+CMGD=8\r");
         Uart1SendData("AT+CMGD=9\r");
         Uart1SendData("AT+CMGD=10\r");

         OSTimeDly(50);

         Uart1SendData("AT+CNMI=2,1\r");//设置短信提示功能输入指令       
         OSTimeDly(50);                                //+CMTI: "SM",1    1表示手机内短消息数量
//         OS_EXIT_CRITICAL();

         while(1)
         {
               
                RevSms();

                if(gIsNewMsg==0x0F)        //收短信并解析
                {                                 
       
                        gIsNewMsg=0x0;
                        if(gMx>19)         //短信内容大于密码字节数才比较,否则删除
                        {
                       
                                for(j=0;j<Password_num;j++)           //密码
                                {
                                        Secret[j]=newmsg[j];       
                                }
       
                                if(PasswordCompare(Secret)) //密码比较  正确则执行下面对比
                                {
                               
                                        for(j=0;j<11;j++)
                                        {
                                                telSource[j]=newmsg[Password_num+1+j];       
                                        }
                                        telSource[12]='\0';

                                        for(j=0;j<11;j++)
                                        {
                                                telDestination[j]=newmsg[Password_num+13+j];       
                                        }
                                        telDestination[12]='\0';

                                        if(TelphoneCompare(telSource,telDestination))
                                        {
                               
                                                SendSms(telcode,"OK!");//发短信
                                                OSTimeDly(50);                                               
                                                               
                                        }
                                        else
                                        {
                                                SendSms(telcode,"No Match!");//发短信

                                        }
                                }
                                else
                                {       
                                        SendSms(telcode,"Password Error!");//发短信

                                 }
                        }
                        gMx=0;                                 
                        //删除短信
                        Uart1SendData("AT+CMGD=");
                        Uart1SendData(msgID);
                        Uart1SendChar(0x0d);
//                        Uart1SendData("AT+CMGD= ALL\r"); //删除所有段信
                        OSTimeDly(50);
                }       
                               
                OSTimeDly(100);   
                  
       
         }
}

出0入0汤圆

 楼主| 发表于 2012-7-14 12:02:23 | 显示全部楼层
问题解决,是task3的程序问题。

出0入0汤圆

发表于 2012-9-15 11:37:18 | 显示全部楼层
你好,能发一份模板给我吗?

出0入0汤圆

发表于 2012-9-15 11:37:41 | 显示全部楼层
我的邮箱574151383@qq.com
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 18:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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