OpenEdv-开源电子网

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

UCOS消息邮箱问题

[复制链接]

14

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-3-9
在线时间
24 小时
发表于 2016-11-2 11:04:04 | 显示全部楼层 |阅读模式
4金钱
麻烦大家帮我分析一下我的程序错在哪里,我做的是一个消息邮箱,在任务App_Task_LED1中用一个变量times记录App_Task_LED1的运行次数,并将其作为消息邮箱Str_Box发送给任务App_Task_Printf,之后通过串口打印出来。UCOS已经移植成功了。

int main(void)
{
    INT8U os_err;
    SystemInit();
    USART_Configuration();
     delay_init();
     NVIC_USART_Config();
    LED_Configuration ();
    OSInit();
    OSStatInit();
    OS_CPU_SysTickInit();
    Str_Box = OSMboxCreate((void*)0);  // 创建消息邮箱
   
    os_err = OSTaskCreate( App_Task_LED1,
                          (void *) 0,
                          (OS_STK *) &App_Task_LED1_Stk[APP_TASK_LED1_STK_SIZE - 1],
                          (INT8U) APP_TASK_LED1_PRIO);
    //创建输出printf的任务                     
    os_err = OSTaskCreate( App_Task_Printf,
                          (void*) 0,
                          (OS_STK*) &App_Task_Printf_Stk[APP_TASK_Printf_STK_SIZE - 1],
                          (INT8U ) APP_TASK_Printf_PRIO);
                          
   
    os_err = os_err;//仅仅是清除这个变量未使用的编译警告
   
    //启动uSOS 操作系统
    OSStart ();

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

    for (;;)
    {
        sprintf(s,"%d",times);
        OSMboxPost(Str_Box,&s); //发送消息
        times++;
        OSTimeDly(100);
    }
}

void App_Task_Printf(void* pdata)
{   
    pdata = pdata;
    while(1)
    {
        ss = OSMboxPend(Str_Box,0,&err);
        printf("%s",ss);
        OSTimeDly(100);
    }
}

谢谢


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

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-2 16:43:09 | 显示全部楼层
编译通过了没有.什么现象?
回复

使用道具 举报

14

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-3-9
在线时间
24 小时
 楼主| 发表于 2016-11-2 18:52:26 | 显示全部楼层
操作系统 发表于 2016-11-2 16:43
编译通过了没有.什么现象?

编译通过了,现在串口没有打印出信息
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-2 21:31:29 | 显示全部楼层
wzy1992 发表于 2016-11-2 18:52
编译通过了,现在串口没有打印出信息

可以用直接调用printf(),打印消息 来调试一下。这么简单的程序,很快可以解决,加油。
回复

使用道具 举报

14

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-3-9
在线时间
24 小时
 楼主| 发表于 2016-11-3 09:49:00 | 显示全部楼层
操作系统 发表于 2016-11-2 21:31
可以用直接调用printf(),打印消息 来调试一下。这么简单的程序,很快可以解决,加油。

void App_Task_LED1(void* pdata)
{
        unsigned char *s= "a";
    pdata = pdata;
        OLED_Clear();
    for (;;)
    {
                OSMboxPost(box,&s); //发送消息
                OSTimeDly(100);
    }
}

void App_Task_Printf(void* pdata)
{
        unsigned char *ss =NULL;
        pdata = pdata;
        OLED_Clear();
        while(1)
        {
                ss = OSMboxPend(box,0,&err);
                printf("\n%s\n",ss);
                OSTimeDly(100);
        }
}

串口打印出来的是乱码,不是字母a,这个地方需要注意什么吗?
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-3 10:02:22 | 显示全部楼层
查看一下邮箱初始化及其要求的资源有没有准备好.
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2016-11-3 10:24:26 | 显示全部楼层
本帖最后由 xianshasaman 于 2016-11-3 10:46 编辑

OSMboxPend的返回值是个二级指针吧
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-7 11:42:01 | 显示全部楼层
OSMboxPost(Str_Box,&s); //发送消息
这行代码中的s变量在哪里呢?注意,ucos中的消息邮箱发送的是指针,也就是说这个demo中的s变量一定不能是栈变量,可以是全局,静态或者堆内存的变量~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 00:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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