OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2047|回复: 4

UCOS多任务处理的疑问?

[复制链接]

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-2-27
在线时间
15 小时
发表于 2017-7-12 18:16:49 | 显示全部楼层 |阅读模式
5金钱
各位大神,
我用原子的例程试的话多任务是可以处理的,但是我自己写的例程就不行,我对比了一下,任务的回调函数不一样,我是两个任务同时处理的我的回调函数比较复杂一点,例程简单一点,我自己写的就执行了一两次之后就不执行了,不知道是为什么?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2013-12-4
在线时间
43 小时
发表于 2017-7-12 19:08:57 | 显示全部楼层
不明白你这个多任务是处理什么的?
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-2-27
在线时间
15 小时
 楼主| 发表于 2017-7-13 08:15:53 | 显示全部楼层
两个任务一个处理LWIP,一个处理文档存储的功能
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-7-13 08:57:12 | 显示全部楼层
贴你的代码  你这么说很难判断问题
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-2-27
在线时间
15 小时
 楼主| 发表于 2017-7-13 20:26:20 | 显示全部楼层
同样的一个函数,我写在main函数下执行是可以的,但是做成进程函数就会卡住了。
void ReadCard_Task(void *p_arg)
{
         /* System Clocks Configuration */
       
       
          int ipos = -1;     OS_ERR err;
          CPU_SR_ALLOC();
          
   while (1)
         {
                 printf("½øÈë222222222222222222222\r\n");
                                         //(for test)if(FindCard(0x52)==0)
                         {
                                                memset(BuffCardRead,0x00,sizeof(BuffCardRead));
//                                          //(for test)0Ϊ¿éºÅif(OneKeyReadCard(0,BuffCardRead)==0)   //       
                                                {
                                                        Halt();
                                                        HexToStr((BYTE *)gsCardNumberTmp,BuffCardRead,4);//4Byte = 8char
                                                        strcpy(gsCardNumberTmp,"40906327");//for test
                                                        if (strlen(gsCardNumberTmp)>3)
                                                        {
                                                        //OS_CRITICAL_ENTER();        //½øÈëÁÙ½çÇø
                                                                HashRecord(gsCardNumberTmp);
                                                                //OS_CRITICAL_EXIT();        //½øÈëÁÙ½çÇø
                                                                //OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //ÑÓʱ1s
                                                                ipos = GetHashTablePos(gsCardNumberTmp, pTestHashTable);//¶ÁÈ¡ÎĵµÀïÃæµÄÊý¾Ý

                                                                if(-1 != ipos)
                                                                {
                                                                        AudioPlayNumber(pTestHashTable[ipos].sData);
                                                                        printf("¿ØÖƵç»ú");
                                                                        CtrolMotor();
                                                                }
                                                                else
                                                                {
                                                                        printf("·Ç·¨µÄ³µÅÆ¿¨ºÅ");
                                                                        printf("BuffCardRead=%s",BuffCardRead);
                                                                        printf("\r\n");
                                                                }
                                                               
                                                                myfree(SRAMIN,pTestHashTable);//ÊÍ·ÅÄÚ´æ
                                                                pTestHashTable = NULL;
                                                               
                                                                }
                                                        else
                                                        {
                                                          printf("¿¨ÓÐÎÊÌâ");
                                                  }
                                               
                                                }
                         }       
      //OS_CRITICAL_EXIT();
                        //OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //ÑÓʱ1s
                         delay_ms(500);

就是这样的一个函数,现在是进程回调函数执行几次就卡了,但是做成普通函数,放在main函数里面就可以的,里面有一个文档处理函数,跟踪是发现fopen的时候不往下走了,各位大侠帮忙看看,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-18 19:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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