OpenEdv-开源电子网

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

为什么 ucos 邮箱 收不到消息呢???

[复制链接]

14

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2014-7-23
在线时间
5 小时
发表于 2016-3-29 23:09:24 | 显示全部楼层 |阅读模式
1金钱
void AppLED1Task(void *pdata)
{
    pdata = pdata; //防止编译器出错 无实际意义
        u8 key = 0;
        u8 err;//邮箱信息
        while(1)
        {
                switch(key)
                {
                        case 1:
                        OLED_P6x8Str(0,0,"1");
                        break;
                        case 2:
                                OLED_P6x8Str(0,0,"2");
                        break;
                        case 3:
                        OLED_P6x8Str(0,0,"3");
                        break;
                        case 4:
                                OLED_P6x8Str(0,0,"4");
                        break;
                }
                key = (u8)OSMboxPend(msg_key,200,&err);
                OSTimeDlyHMSM(0, 0, 0, 300);
        }
}

/***************
按键扫描任务
***********/
void keyScan(void * pdata)
{
    pdata = pdata;
    u16 T =0;
    u16 Ti=0;
    u8 key;
    u8 keysave;//上次按键状态保存
        while(1)
        {
                if(KEY_U == 1)
                { key =1;}   //上键
                else if(KEY_D == 1)
                { key = 2; }  //下键
                else if(KEY_A == 1)
                { key = 3;}  //左键
                else if(KEY_B == 1)
                { key = 4; }  //右键
                else key = 0;
                switch(keysave)
                {
                        case 1:  //上
                                if(key != keysave)
                                {
                                        OSMboxPost(msg_key,(u8 *)keysave);
                                        T = 0;
                                        Ti = 0;
                                }
                                else
                                {
                                        if(T > LongPressTime) // 触发长按
                                        {
                                                T= LongPressTime;
                                                if(Ti> LongPressSpeed) //长按执行速度
                                                {
                                                        Ti = 0;
                                                        OSMboxPost(msg_key,(void *)keysave);
                                                }
                                                Ti++;
                                        }
                                        T++;
                                }
                                break;
                        case 2: //下
                                if(key != keysave)
                                {
                                        OSMboxPost(msg_key,(void *)keysave);
                                        T = 0;
                                        Ti = 0;
                                }
                                else
                                {
                                        if(T > LongPressTime) // 触发长按
                                        {
                                                T= LongPressTime;
                                                if(Ti> LongPressSpeed) //长按执行速度
                                                {
                                                        Ti = 0;
                                                        OSMboxPost(msg_key,(void *)keysave);
                                                }
                                                Ti++;
                                        }
                                        T++;
                                }
                                break;
                        case 3: //左
                                if(key != keysave)
                                {
                                        OSMboxPost(msg_key,(void *)keysave);
                                        T = 0;
                                        Ti = 0;
                                }
                                else
                                {
                                        if(T > LongPressTime) // 触发长按
                                        {
                                                T= LongPressTime;
                                                if(Ti> LongPressSpeed) //长按执行速度
                                                {
                                                        Ti = 0;
                                                        OSMboxPost(msg_key,(void *)keysave);
                                                }
                                                Ti++;
                                        }
                                        T++;
                                }
                                break;
                        case 4: //右
                                if(key != keysave)
                                {
                                        OSMboxPost(msg_key,(void *)keysave);
                                        T = 0;
                                        Ti = 0;
                                }
                                else
                                {
                                        if(T > LongPressTime) // 触发长按
                                        {
                                                T= LongPressTime;
                                                if(Ti> LongPressSpeed) //长按执行速度
                                                {
                                                        Ti = 0;
                                                        OSMboxPost(msg_key,(void *)keysave);
                                                }
                                                Ti++;
                                        }
                                        T++;
                                }
                                break;
                }
                keysave = key;
                OSTimeDlyHMSM(0, 0, 0, 50);
        }
}


我在按键扫描中调试 可以获取到按键的信息,也能走到发送消息的函数  但是为什么在第一个任务中却收不到发来的按键信息呢  一直都是 0
代码也不是很复杂 我也是完全按照教程来的  实在是看不出来哪里有问题了  大家帮忙看看  是不是哪里出了什么问题。。。。

最佳答案

查看完整内容[请看2#楼]

我擦 我解决了 是没有创建空的 邮箱 加上 msg_key = OSMboxCreate((void*)0); //创建空消息邮箱 在任务头 就好了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2014-7-23
在线时间
5 小时
 楼主| 发表于 2016-3-29 23:09:25 | 显示全部楼层
我擦 我解决了 是没有创建空的  邮箱   

加上  msg_key = OSMboxCreate((void*)0);        //创建空消息邮箱
   
在任务头  就好了
回复

使用道具 举报

14

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2014-7-23
在线时间
5 小时
 楼主| 发表于 2016-3-29 23:10:45 | 显示全部楼层
代码我上传到了  github  如果需要看全部的  可以在这里  https://github.com/a750183047/Tianni-II/blob/master/app/app.c

求大家帮帮忙
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 05:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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